From 33362d834094901683944ee7f84dbfcad0ed7744 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 8 Nov 2025 04:38:09 +0300 Subject: [PATCH] 2025.4 PREVIEW --- .dockerignore | 8 +- .gitignore | 8 +- README.md | 15 +- core/api_urls.py | 88 - core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 104017 -> 0 bytes core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 88983 -> 0 bytes core/locale/da_DK/LC_MESSAGES/django.mo | Bin 86955 -> 0 bytes core/locale/de_DE/LC_MESSAGES/django.mo | Bin 92065 -> 0 bytes core/locale/en_GB/LC_MESSAGES/django.mo | Bin 83770 -> 0 bytes core/locale/en_US/LC_MESSAGES/django.mo | Bin 83761 -> 0 bytes core/locale/es_ES/LC_MESSAGES/django.mo | Bin 90070 -> 0 bytes core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 92807 -> 0 bytes core/locale/he_IL/LC_MESSAGES/django.mo | Bin 96794 -> 0 bytes core/locale/id_ID/LC_MESSAGES/django.mo | Bin 87085 -> 0 bytes core/locale/it_IT/LC_MESSAGES/django.mo | Bin 90397 -> 0 bytes core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 95601 -> 0 bytes core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 90189 -> 0 bytes core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 89957 -> 0 bytes core/locale/no_NO/LC_MESSAGES/django.mo | Bin 87589 -> 0 bytes core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 89150 -> 0 bytes core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 89809 -> 0 bytes core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 91583 -> 0 bytes core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 118638 -> 0 bytes core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 87584 -> 0 bytes core/locale/th_TH/LC_MESSAGES/django.mo | Bin 141700 -> 0 bytes core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 89905 -> 0 bytes core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 101049 -> 0 bytes core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 78891 -> 0 bytes core/urls.py | 3 - {blog => engine}/__init__.py | 0 {blog/docs => engine/authv}/__init__.py | 0 {vibes_auth => engine/authv}/admin.py | 10 +- {vibes_auth => engine/authv}/apps.py | 4 +- .../drf => engine/authv/docs}/__init__.py | 0 .../authv/docs/drf}/__init__.py | 0 .../authv}/docs/drf/views.py | 4 +- .../authv}/docs/drf/viewsets.py | 4 +- {vibes_auth => engine/authv}/filters.py | 2 +- {vibes_auth => engine/authv}/forms.py | 4 +- {blog => engine/authv}/graphene/__init__.py | 0 .../authv}/graphene/mutations.py | 24 +- .../authv}/graphene/object_types.py | 16 +- .../authv}/locale/ar_AR/LC_MESSAGES/django.mo | Bin 16016 -> 16034 bytes .../authv}/locale/ar_AR/LC_MESSAGES/django.po | 316 ++-- .../authv}/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 13260 -> 13297 bytes .../authv}/locale/cs_CZ/LC_MESSAGES/django.po | 315 ++-- .../authv}/locale/da_DK/LC_MESSAGES/django.mo | Bin 13039 -> 13076 bytes .../authv}/locale/da_DK/LC_MESSAGES/django.po | 309 ++-- .../authv}/locale/de_DE/LC_MESSAGES/django.mo | Bin 13986 -> 14023 bytes .../authv}/locale/de_DE/LC_MESSAGES/django.po | 332 ++-- .../authv}/locale/en_GB/LC_MESSAGES/django.mo | Bin 12581 -> 12618 bytes .../authv}/locale/en_GB/LC_MESSAGES/django.po | 312 ++-- .../authv}/locale/en_US/LC_MESSAGES/django.mo | Bin 12570 -> 12607 bytes .../authv}/locale/en_US/LC_MESSAGES/django.po | 312 ++-- .../authv}/locale/es_ES/LC_MESSAGES/django.mo | Bin 13742 -> 13779 bytes .../authv}/locale/es_ES/LC_MESSAGES/django.po | 311 ++-- .../authv}/locale/fa_IR/LC_MESSAGES/django.mo | Bin .../authv/locale/fa_IR}/LC_MESSAGES/django.po | 259 +-- .../authv}/locale/fr_FR/LC_MESSAGES/django.mo | Bin 14390 -> 14427 bytes .../authv}/locale/fr_FR/LC_MESSAGES/django.po | 265 +-- .../authv}/locale/he_IL/LC_MESSAGES/django.mo | Bin 14382 -> 14419 bytes .../authv}/locale/he_IL/LC_MESSAGES/django.po | 304 ++-- .../authv}/locale/hi_IN/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes .../authv/locale/hi_IN}/LC_MESSAGES/django.po | 261 +-- .../authv}/locale/hr_HR/LC_MESSAGES/django.mo | Bin .../authv/locale/hr_HR}/LC_MESSAGES/django.po | 259 +-- .../authv}/locale/id_ID/LC_MESSAGES/django.mo | Bin 13104 -> 13141 bytes .../authv}/locale/id_ID/LC_MESSAGES/django.po | 263 +-- .../authv}/locale/it_IT/LC_MESSAGES/django.mo | Bin 13684 -> 13721 bytes .../authv}/locale/it_IT/LC_MESSAGES/django.po | 263 +-- .../authv}/locale/ja_JP/LC_MESSAGES/django.mo | Bin 15136 -> 15173 bytes .../authv}/locale/ja_JP/LC_MESSAGES/django.po | 342 ++-- .../authv}/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes .../authv/locale/kk_KZ}/LC_MESSAGES/django.po | 261 +-- .../authv}/locale/ko_KR/LC_MESSAGES/django.mo | Bin 13876 -> 13913 bytes .../authv}/locale/ko_KR/LC_MESSAGES/django.po | 338 ++-- .../authv}/locale/nl_NL/LC_MESSAGES/django.mo | Bin 13392 -> 13429 bytes .../authv}/locale/nl_NL/LC_MESSAGES/django.po | 311 ++-- .../authv}/locale/no_NO/LC_MESSAGES/django.mo | Bin 13077 -> 13114 bytes .../authv}/locale/no_NO/LC_MESSAGES/django.po | 314 ++-- .../authv}/locale/pl_PL/LC_MESSAGES/django.mo | Bin 13526 -> 13563 bytes .../authv}/locale/pl_PL/LC_MESSAGES/django.po | 310 ++-- .../authv}/locale/pt_BR/LC_MESSAGES/django.mo | Bin 13469 -> 13506 bytes .../authv}/locale/pt_BR/LC_MESSAGES/django.po | 314 ++-- .../authv}/locale/ro_RO/LC_MESSAGES/django.mo | Bin 13867 -> 13904 bytes .../authv}/locale/ro_RO/LC_MESSAGES/django.po | 306 ++-- .../authv}/locale/ru_RU/LC_MESSAGES/django.mo | Bin 17808 -> 17845 bytes .../authv}/locale/ru_RU/LC_MESSAGES/django.po | 332 ++-- .../authv}/locale/sv_SE/LC_MESSAGES/django.mo | Bin 13307 -> 13344 bytes .../authv}/locale/sv_SE/LC_MESSAGES/django.po | 312 ++-- .../authv}/locale/th_TH/LC_MESSAGES/django.mo | Bin 20428 -> 20465 bytes .../authv}/locale/th_TH/LC_MESSAGES/django.po | 348 ++-- .../authv}/locale/tr_TR/LC_MESSAGES/django.mo | Bin 13616 -> 13653 bytes .../authv}/locale/tr_TR/LC_MESSAGES/django.po | 310 ++-- .../authv}/locale/vi_VN/LC_MESSAGES/django.mo | Bin 14781 -> 14818 bytes .../authv}/locale/vi_VN/LC_MESSAGES/django.po | 331 ++-- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 12057 -> 12094 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 313 ++-- {vibes_auth => engine/authv}/managers.py | 2 +- .../authv/messaging}/__init__.py | 0 .../authv}/messaging/admin.py | 3 +- .../authv}/messaging/auth.py | 0 .../authv}/messaging/consumers.py | 0 .../authv}/messaging/models.py | 4 +- .../authv}/messaging/routing.py | 2 +- .../authv}/messaging/services.py | 4 +- .../authv}/migrations/0001_initial.py | 16 +- .../0002_blacklistedtoken_outstandingtoken.py | 2 +- .../migrations/0003_alter_user_language.py | 6 +- .../migrations/0004_alter_user_language.py | 2 +- .../migrations/0005_alter_user_groups.py | 25 + .../authv/migrations}/__init__.py | 0 {vibes_auth => engine/authv}/models.py | 51 +- {vibes_auth => engine/authv}/serializers.py | 12 +- {vibes_auth => engine/authv}/signals.py | 4 +- .../authv}/static/person.png | Bin {vibes_auth => engine/authv}/tasks.py | 4 +- .../authv/templates}/__init__.py | 0 .../templates/user_reset_password_email.html | 0 .../templates/user_verification_email.html | 0 {blog => engine/authv}/tests.py | 0 {vibes_auth => engine/authv}/urls.py | 6 +- {core => engine/authv/utils}/__init__.py | 0 .../authv}/utils/emailing.py | 8 +- {vibes_auth => engine/authv}/validators.py | 0 {vibes_auth => engine/authv}/views.py | 10 +- {vibes_auth => engine/authv}/viewsets.py | 24 +- {core/crm/amo => engine/blog}/__init__.py | 0 {blog => engine/blog}/admin.py | 5 +- {blog => engine/blog}/apps.py | 6 +- {core => engine/blog}/docs/__init__.py | 0 .../blog/docs/drf}/__init__.py | 0 {blog => engine/blog}/docs/drf/views.py | 0 {blog => engine/blog}/docs/drf/viewsets.py | 4 +- .../blog/elasticsearch}/__init__.py | 0 .../blog}/elasticsearch/documents.py | 6 +- {blog => engine/blog}/filters.py | 4 +- .../blog/graphene}/__init__.py | 0 .../blog}/graphene/object_types.py | 2 +- .../blog}/locale/ar_AR/LC_MESSAGES/django.mo | Bin 3944 -> 3945 bytes .../blog}/locale/ar_AR/LC_MESSAGES/django.po | 53 +- .../blog}/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 3468 -> 3469 bytes .../blog}/locale/cs_CZ/LC_MESSAGES/django.po | 60 +- .../blog}/locale/da_DK/LC_MESSAGES/django.mo | Bin 3396 -> 3397 bytes .../blog}/locale/da_DK/LC_MESSAGES/django.po | 57 +- .../blog}/locale/de_DE/LC_MESSAGES/django.mo | Bin 3546 -> 3547 bytes .../blog}/locale/de_DE/LC_MESSAGES/django.po | 56 +- .../blog}/locale/en_GB/LC_MESSAGES/django.mo | Bin 3242 -> 3243 bytes .../blog}/locale/en_GB/LC_MESSAGES/django.po | 52 +- .../blog}/locale/en_US/LC_MESSAGES/django.mo | Bin 3247 -> 3248 bytes .../blog}/locale/en_US/LC_MESSAGES/django.po | 52 +- .../blog}/locale/es_ES/LC_MESSAGES/django.mo | Bin 3492 -> 3493 bytes .../blog}/locale/es_ES/LC_MESSAGES/django.po | 56 +- .../blog}/locale/fa_IR/LC_MESSAGES/django.mo | Bin .../blog}/locale/fa_IR/LC_MESSAGES/django.po | 42 +- .../blog}/locale/fr_FR/LC_MESSAGES/django.mo | Bin 3555 -> 3556 bytes .../blog}/locale/fr_FR/LC_MESSAGES/django.po | 60 +- .../blog}/locale/he_IL/LC_MESSAGES/django.mo | Bin 3715 -> 3716 bytes .../blog}/locale/he_IL/LC_MESSAGES/django.po | 56 +- .../blog}/locale/hi_IN/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes .../blog/locale/hi_IN}/LC_MESSAGES/django.po | 44 +- .../blog}/locale/hr_HR/LC_MESSAGES/django.mo | Bin .../blog}/locale/hr_HR/LC_MESSAGES/django.po | 42 +- .../blog}/locale/id_ID/LC_MESSAGES/django.mo | Bin 3374 -> 3375 bytes .../blog}/locale/id_ID/LC_MESSAGES/django.po | 68 +- .../blog}/locale/it_IT/LC_MESSAGES/django.mo | Bin 3433 -> 3434 bytes .../blog}/locale/it_IT/LC_MESSAGES/django.po | 60 +- .../blog}/locale/ja_JP/LC_MESSAGES/django.mo | Bin 3790 -> 3791 bytes .../blog}/locale/ja_JP/LC_MESSAGES/django.po | 73 +- .../blog}/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes .../blog/locale/kk_KZ}/LC_MESSAGES/django.po | 44 +- .../blog}/locale/ko_KR/LC_MESSAGES/django.mo | Bin 3581 -> 3582 bytes .../blog}/locale/ko_KR/LC_MESSAGES/django.po | 67 +- .../blog}/locale/nl_NL/LC_MESSAGES/django.mo | Bin 3391 -> 3392 bytes .../blog}/locale/nl_NL/LC_MESSAGES/django.po | 56 +- .../blog}/locale/no_NO/LC_MESSAGES/django.mo | Bin 3385 -> 3386 bytes .../blog}/locale/no_NO/LC_MESSAGES/django.po | 52 +- .../blog}/locale/pl_PL/LC_MESSAGES/django.mo | Bin 3400 -> 3401 bytes .../blog}/locale/pl_PL/LC_MESSAGES/django.po | 55 +- .../blog}/locale/pt_BR/LC_MESSAGES/django.mo | Bin 3532 -> 3533 bytes .../blog}/locale/pt_BR/LC_MESSAGES/django.po | 59 +- .../blog}/locale/ro_RO/LC_MESSAGES/django.mo | Bin 3525 -> 3526 bytes .../blog}/locale/ro_RO/LC_MESSAGES/django.po | 59 +- .../blog}/locale/ru_RU/LC_MESSAGES/django.mo | Bin 4586 -> 4587 bytes .../blog}/locale/ru_RU/LC_MESSAGES/django.po | 52 +- .../blog}/locale/sv_SE/LC_MESSAGES/django.mo | Bin 3420 -> 3421 bytes .../blog}/locale/sv_SE/LC_MESSAGES/django.po | 52 +- .../blog}/locale/th_TH/LC_MESSAGES/django.mo | Bin 5293 -> 5294 bytes .../blog}/locale/th_TH/LC_MESSAGES/django.po | 74 +- .../blog}/locale/tr_TR/LC_MESSAGES/django.mo | Bin 3448 -> 3449 bytes .../blog}/locale/tr_TR/LC_MESSAGES/django.po | 55 +- .../blog}/locale/vi_VN/LC_MESSAGES/django.mo | Bin 3689 -> 3690 bytes .../blog}/locale/vi_VN/LC_MESSAGES/django.po | 55 +- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 3111 -> 3112 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 57 +- .../blog}/migrations/0001_initial.py | 0 .../0002_alter_post_slug_alter_post_title.py | 0 .../blog}/migrations/0003_alter_post_tags.py | 0 ...ntent_ar_ar_post_content_cs_cz_and_more.py | 0 ...ntent_fa_ir_post_content_he_il_and_more.py | 0 ...on_post_meta_description_ar_ar_and_more.py | 0 .../migrations/0007_post_is_static_page.py | 0 .../blog/migrations}/__init__.py | 0 {blog => engine/blog}/models.py | 7 +- {blog => engine/blog}/serializers.py | 2 +- {blog => engine/blog}/signals.py | 0 {blog => engine/blog}/static/.gitkeep | 0 .../blog/templates}/__init__.py | 0 {core => engine/blog}/tests.py | 0 {blog => engine/blog}/translation.py | 2 +- {blog => engine/blog}/urls.py | 2 +- .../docs => engine/blog/utils}/__init__.py | 0 {blog => engine/blog}/views.py | 0 {blog => engine/blog}/viewsets.py | 10 +- {blog => engine/blog}/widgets.py | 0 .../docs/drf => engine/core}/__init__.py | 0 {core => engine/core}/abstract.py | 0 {core => engine/core}/admin.py | 5 +- {core => engine/core}/apps.py | 6 +- {core => engine/core}/b2b_urls.py | 2 +- {core => engine/core}/choices.py | 0 {core => engine/core}/crm/__init__.py | 2 +- .../core/crm/amo}/__init__.py | 0 {core => engine/core}/crm/amo/gateway.py | 6 +- {core => engine/core}/crm/exceptions.py | 0 {core => engine/core}/data/.gitkeep | 0 .../core}/data/payment_methods.json | 0 .../core/docs}/__init__.py | 0 {core => engine/core}/docs/drf/__init__.py | 0 {core => engine/core}/docs/drf/views.py | 6 +- {core => engine/core}/docs/drf/viewsets.py | 46 +- .../core}/docs/images/evibes-big-simple.png | Bin .../core}/docs/images/evibes-big.png | Bin {core => engine/core}/docs/images/evibes.ico | Bin {core => engine/core}/docs/images/evibes.png | Bin {core => engine/core}/docs/images/favicon.svg | 0 .../core}/elasticsearch/__init__.py | 2 +- .../core}/elasticsearch/documents.py | 4 +- {core => engine/core}/errors.py | 0 {core => engine/core}/filters.py | 4 +- .../static => engine/core/fixtures}/.gitkeep | 0 engine/core/fixtures/initialization.json | 1 + {core => engine/core}/forms.py | 0 {core => engine/core}/graphene/__init__.py | 0 {core => engine/core}/graphene/mutations.py | 20 +- .../core}/graphene/object_types.py | 12 +- {core => engine/core}/graphene/schema.py | 34 +- .../core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 0 -> 104213 bytes .../core}/locale/ar_AR/LC_MESSAGES/django.po | 1472 +++++++++-------- .../core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 0 -> 89136 bytes .../core}/locale/cs_CZ/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/da_DK/LC_MESSAGES/django.mo | Bin 0 -> 87103 bytes .../core}/locale/da_DK/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/de_DE/LC_MESSAGES/django.mo | Bin 0 -> 92200 bytes .../core}/locale/de_DE/LC_MESSAGES/django.po | 1442 ++++++++-------- .../core/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 83909 bytes .../core}/locale/en_GB/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/locale/en_US/LC_MESSAGES/django.mo | Bin 0 -> 83900 bytes .../core}/locale/en_US/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/locale/es_ES/LC_MESSAGES/django.mo | Bin 0 -> 90218 bytes .../core}/locale/es_ES/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core}/locale/fa_IR/LC_MESSAGES/django.mo | Bin .../core/locale/fa_IR}/LC_MESSAGES/django.po | 1466 ++++++++-------- .../core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 0 -> 92971 bytes .../core}/locale/fr_FR/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/he_IL/LC_MESSAGES/django.mo | Bin 0 -> 96944 bytes .../core}/locale/he_IL/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/locale/hi_IN/LC_MESSAGES/django.mo | Bin 0 -> 359 bytes .../core}/locale/hi_IN/LC_MESSAGES/django.po | 1468 ++++++++-------- .../core}/locale/hr_HR/LC_MESSAGES/django.mo | Bin .../core/locale/hr_HR}/LC_MESSAGES/django.po | 1466 ++++++++-------- .../core/locale/id_ID/LC_MESSAGES/django.mo | Bin 0 -> 87230 bytes .../core}/locale/id_ID/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/it_IT/LC_MESSAGES/django.mo | Bin 0 -> 90536 bytes .../core}/locale/it_IT/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 0 -> 95722 bytes .../core}/locale/ja_JP/LC_MESSAGES/django.po | 1472 +++++++++-------- .../core/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 0 -> 359 bytes .../core}/locale/kk_KZ/LC_MESSAGES/django.po | 1468 ++++++++-------- .../core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 0 -> 90333 bytes .../core}/locale/ko_KR/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 0 -> 90095 bytes .../core}/locale/nl_NL/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/no_NO/LC_MESSAGES/django.mo | Bin 0 -> 87740 bytes .../core}/locale/no_NO/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 0 -> 89318 bytes .../core}/locale/pl_PL/LC_MESSAGES/django.po | 1441 ++++++++-------- .../core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 89953 bytes .../core}/locale/pt_BR/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 0 -> 91724 bytes .../core}/locale/ro_RO/LC_MESSAGES/django.po | 1442 ++++++++-------- .../core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 0 -> 118853 bytes .../core}/locale/ru_RU/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 0 -> 87743 bytes .../core}/locale/sv_SE/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/locale/th_TH/LC_MESSAGES/django.mo | Bin 0 -> 141879 bytes .../core}/locale/th_TH/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 0 -> 90080 bytes .../core}/locale/tr_TR/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 0 -> 101246 bytes .../core}/locale/vi_VN/LC_MESSAGES/django.po | 1440 ++++++++-------- .../core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 79025 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 1470 ++++++++-------- .../core/management}/__init__.py | 0 .../core}/management/commands/__init__.py | 2 +- .../management/commands/await_services.py | 18 +- .../management/commands/check_translated.py | 2 +- .../management/commands/clear_unwanted.py | 2 +- .../management/commands/deepl_translate.py | 5 +- .../commands/delete_never_ordered_products.py | 2 +- .../delete_products_by_description.py | 2 +- .../management/commands/fetch_products.py | 2 +- .../core}/management/commands/fix_fuzzy.py | 0 .../core}/management/commands/fix_prices.py | 4 +- engine/core/management/commands/initialize.py | 25 + .../management/commands/rebuild_slugs.py | 2 +- .../management/commands/set_default_caches.py | 2 +- .../management/commands/translate_fields.py | 6 +- {core => engine/core}/managers.py | 0 .../core}/migrations/0001_initial.py | 10 +- .../core}/migrations/0002_initial.py | 0 ...ame_alter_attribute_name_ar_ar_and_more.py | 0 ..._name_alter_product_name_ar_ar_and_more.py | 0 ..._remove_brand_category_brand_categories.py | 0 .../migrations/0006_alter_order_status.py | 0 .../migrations/0007_alter_category_image.py | 4 +- .../migrations/0008_digitalassetdownload.py | 0 .../core}/migrations/0009_documentary.py | 4 +- .../migrations/0010_product_partnumber.py | 0 ...and_big_logo_brand_description_and_more.py | 6 +- .../core}/migrations/0012_alter_order_user.py | 0 .../core}/migrations/0013_product_slug.py | 0 .../migrations/0014_alter_product_slug.py | 0 .../migrations/0015_alter_product_slug.py | 0 .../migrations/0016_alter_product_slug.py | 0 .../0017_order_human_readable_id.py | 4 +- .../0018_alter_order_human_readable_id.py | 6 +- .../core}/migrations/0019_address.py | 0 ..._billing_address_order_shipping_address.py | 0 ...ame_ar_ar_attribute_name_ar_ar_and_more.py | 0 .../core}/migrations/0022_category_slug.py | 0 .../migrations/0023_address_address_line.py | 0 .../0024_categorytag_category_tags.py | 0 .../migrations/0025_alter_product_category.py | 0 ..._alter_category_slug_alter_product_slug.py | 0 .../0027_brand_priority_alter_brand_slug.py | 0 ..._alter_category_slug_alter_product_slug.py | 0 .../migrations/0029_alter_category_slug.py | 0 .../migrations/0030_alter_category_slug.py | 0 .../migrations/0031_alter_product_slug.py | 0 ...brand_slug_alter_category_slug_and_more.py | 0 .../migrations/0033_alter_category_slug.py | 4 +- ..._category_priority_alter_brand_priority.py | 0 ...brand_slug_alter_category_slug_and_more.py | 4 +- ...0036_vendor_b2b_auth_token_vendor_users.py | 4 +- .../core}/migrations/0037_product_sku.py | 0 .../migrations/0038_backfill_product_sku.py | 2 +- .../migrations/0039_alter_product_sku.py | 4 +- ...tionshipmanagementprovider_ordercrmlink.py | 0 ...rrelationshipmanagementprovider_options.py | 0 ...ame_fa_ir_attribute_name_he_il_and_more.py | 0 .../0043_attribute_is_filterable_and_more.py | 0 .../0044_vendor_last_processing_response.py | 4 +- ..._name_alter_product_name_ar_ar_and_more.py | 0 ...ame_alter_attribute_name_ar_ar_and_more.py | 0 .../0047_alter_attribute_unique_together.py | 0 ...ration_path_alter_productimage_priority.py | 0 .../0049_alter_attribute_unique_together.py | 0 .../0050_remove_attribute_categories.py | 0 .../0051_stock_system_attributes.py | 0 .../0052_alter_stock_system_attributes.py | 0 .../core/migrations}/__init__.py | 0 {core => engine/core}/mixins.py | 0 {core => engine/core}/models.py | 40 +- {core => engine/core}/permissions.py | 0 {core => engine/core}/serializers/__init__.py | 0 {core => engine/core}/serializers/detail.py | 18 +- {core => engine/core}/serializers/seo.py | 0 {core => engine/core}/serializers/simple.py | 8 +- {core => engine/core}/serializers/utility.py | 2 +- {core => engine/core}/signals.py | 12 +- {core => engine/core}/sitemaps.py | 4 +- .../Source Code Pro ExtraLight_Regular.json | 0 .../core}/static/css/constance.css | 0 {core => engine/core}/static/favicon.ico | Bin {core => engine/core}/static/favicon.png | Bin {core => engine/core}/static/flags/ar-ar.png | Bin {core => engine/core}/static/flags/cs-cz.png | Bin {core => engine/core}/static/flags/da-dk.png | Bin {core => engine/core}/static/flags/de-de.png | Bin {core => engine/core}/static/flags/en-gb.png | Bin {core => engine/core}/static/flags/en-us.png | Bin {core => engine/core}/static/flags/es-es.png | Bin {core => engine/core}/static/flags/fa-ir.png | Bin {core => engine/core}/static/flags/fr-fr.png | Bin {core => engine/core}/static/flags/he-il.png | Bin {core => engine/core}/static/flags/hi-in.png | Bin {core => engine/core}/static/flags/hr-hr.png | Bin {core => engine/core}/static/flags/id-id.png | Bin {core => engine/core}/static/flags/it-it.png | Bin {core => engine/core}/static/flags/ja-jp.png | Bin {core => engine/core}/static/flags/kk-kz.png | Bin {core => engine/core}/static/flags/ko-kr.png | Bin {core => engine/core}/static/flags/nl-nl.png | Bin {core => engine/core}/static/flags/no-no.png | Bin {core => engine/core}/static/flags/pl-pl.png | Bin {core => engine/core}/static/flags/pt-br.png | Bin {core => engine/core}/static/flags/ro-ro.png | Bin {core => engine/core}/static/flags/ru-ru.png | Bin {core => engine/core}/static/flags/sv-se.png | Bin {core => engine/core}/static/flags/th-th.png | Bin {core => engine/core}/static/flags/tr-tr.png | Bin {core => engine/core}/static/flags/vi-vn.png | Bin .../core}/static/flags/zh-hans.png | Bin {core => engine/core}/static/logo.png | Bin {core => engine/core}/static/maintenance.html | 0 .../core}/static/robots_backend.txt | 0 .../core}/static/robots_frontend.txt | 0 {core => engine/core}/tasks.py | 12 +- .../core/templates}/__init__.py | 0 .../core}/templates/contact_us_email.html | 0 .../digital_order_created_email.html | 0 .../digital_order_delivered_email.html | 0 .../core}/templates/json_table_widget.html | 0 .../templates/promocode_granted_email.html | 0 .../shipped_order_created_email.html | 0 .../shipped_order_delivered_email.html | 0 .../core/templatetags}/__init__.py | 0 .../core}/templatetags/conditions.py | 0 {core => engine/core}/templatetags/filters.py | 0 {payments => engine/core}/tests.py | 0 {core => engine/core}/translation.py | 2 +- {core => engine/core}/typing/__init__.py | 0 {core => engine/core}/typing/models.py | 0 engine/core/urls.py | 180 ++ {core => engine/core}/utils/__init__.py | 9 +- {core => engine/core}/utils/caching.py | 6 +- {core => engine/core}/utils/db.py | 0 {core => engine/core}/utils/emailing.py | 10 +- {core => engine/core}/utils/languages.py | 0 {core => engine/core}/utils/lists.py | 0 {core => engine/core}/utils/messages.py | 0 {core => engine/core}/utils/nominatim.py | 0 {core => engine/core}/utils/security.py | 2 +- {core => engine/core}/utils/seo_builders.py | 2 +- {core => engine/core}/utils/vendors.py | 4 +- {core => engine/core}/validators.py | 0 {core => engine/core}/vendors/__init__.py | 15 +- {core => engine/core}/views.py | 23 +- {core => engine/core}/viewsets.py | 22 +- {core => engine/core}/widgets.py | 0 .../graphene => engine/payments}/__init__.py | 0 {payments => engine/payments}/admin.py | 8 +- {payments => engine/payments}/apps.py | 4 +- {payments => engine/payments}/choices.py | 0 .../payments/docs}/__init__.py | 0 .../payments/docs/drf}/__init__.py | 0 .../payments}/docs/drf/views.py | 4 +- .../payments}/docs/drf/viewsets.py | 15 +- {payments => engine/payments}/errors.py | 0 {payments => engine/payments}/forms.py | 4 +- .../payments}/gateways/__init__.py | 0 .../payments/graphene}/__init__.py | 0 .../payments}/graphene/mutations.py | 8 +- .../payments}/graphene/object_types.py | 2 +- .../locale/ar_AR/LC_MESSAGES/django.mo | Bin 0 -> 5322 bytes .../locale/ar_AR/LC_MESSAGES/django.po | 94 +- .../locale/cs_CZ/LC_MESSAGES/django.mo | Bin 0 -> 4667 bytes .../locale/cs_CZ/LC_MESSAGES/django.po | 94 +- .../locale/da_DK/LC_MESSAGES/django.mo | Bin 0 -> 4651 bytes .../locale/da_DK/LC_MESSAGES/django.po | 94 +- .../locale/de_DE/LC_MESSAGES/django.mo | Bin 0 -> 4829 bytes .../locale/de_DE/LC_MESSAGES/django.po | 94 +- .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 4521 bytes .../locale/en_GB/LC_MESSAGES/django.po | 94 +- .../locale/en_US/LC_MESSAGES/django.mo | Bin 0 -> 4509 bytes .../locale/en_US/LC_MESSAGES/django.po | 94 +- .../locale/es_ES/LC_MESSAGES/django.mo | Bin 0 -> 4797 bytes .../locale/es_ES/LC_MESSAGES/django.po | 94 +- .../locale/fa_IR/LC_MESSAGES/django.mo | Bin .../locale/fa_IR/LC_MESSAGES/django.po | 92 +- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 0 -> 4894 bytes .../locale/fr_FR/LC_MESSAGES/django.po | 94 +- .../locale/he_IL/LC_MESSAGES/django.mo | Bin 0 -> 5037 bytes .../locale/he_IL/LC_MESSAGES/django.po | 94 +- .../locale/hi_IN/LC_MESSAGES/django.mo | Bin 0 -> 359 bytes .../locale/hi_IN}/LC_MESSAGES/django.po | 94 +- .../locale/hr_HR/LC_MESSAGES/django.mo | Bin .../locale/hr_HR/LC_MESSAGES/django.po | 92 +- .../locale/id_ID/LC_MESSAGES/django.mo | Bin 0 -> 4671 bytes .../locale/id_ID/LC_MESSAGES/django.po | 94 +- .../locale/it_IT/LC_MESSAGES/django.mo | Bin 0 -> 4794 bytes .../locale/it_IT/LC_MESSAGES/django.po | 94 +- .../locale/ja_JP/LC_MESSAGES/django.mo | Bin 0 -> 5004 bytes .../locale/ja_JP/LC_MESSAGES/django.po | 94 +- .../locale/kk_KZ/LC_MESSAGES/django.mo | Bin 0 -> 359 bytes .../locale/kk_KZ}/LC_MESSAGES/django.po | 94 +- .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 0 -> 4798 bytes .../locale/ko_KR/LC_MESSAGES/django.po | 94 +- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 0 -> 4680 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 94 +- .../locale/no_NO/LC_MESSAGES/django.mo | Bin 0 -> 4620 bytes .../locale/no_NO/LC_MESSAGES/django.po | 94 +- .../locale/pl_PL/LC_MESSAGES/django.mo | Bin 0 -> 4713 bytes .../locale/pl_PL/LC_MESSAGES/django.po | 94 +- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 4754 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 94 +- .../locale/ro_RO/LC_MESSAGES/django.mo | Bin 0 -> 4762 bytes .../locale/ro_RO/LC_MESSAGES/django.po | 94 +- .../locale/ru_RU/LC_MESSAGES/django.mo | Bin 0 -> 5816 bytes .../locale/ru_RU/LC_MESSAGES/django.po | 94 +- .../locale/sv_SE/LC_MESSAGES/django.mo | Bin 0 -> 4699 bytes .../locale/sv_SE/LC_MESSAGES/django.po | 94 +- .../locale/th_TH/LC_MESSAGES/django.mo | Bin 0 -> 6863 bytes .../locale/th_TH/LC_MESSAGES/django.po | 94 +- .../locale/tr_TR/LC_MESSAGES/django.mo | Bin 0 -> 4682 bytes .../locale/tr_TR/LC_MESSAGES/django.po | 94 +- .../locale/vi_VN/LC_MESSAGES/django.mo | Bin 0 -> 5152 bytes .../locale/vi_VN/LC_MESSAGES/django.po | 94 +- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 4292 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 94 +- {payments => engine/payments}/managers.py | 2 +- .../payments}/migrations/0001_initial.py | 0 .../payments}/migrations/0002_initial.py | 0 .../0003_alter_transaction_balance.py | 0 .../0004_alter_transaction_payment_method.py | 0 .../0005_gateway_transaction_gateway.py | 0 ...nsaction_payments_tr_created_95e595_idx.py | 0 .../payments/migrations}/__init__.py | 0 {payments => engine/payments}/models.py | 8 +- {payments => engine/payments}/serializers.py | 2 +- {payments => engine/payments}/signals.py | 6 +- .../payments/static/.gitkeep | 0 engine/payments/templates/__init__.py | 0 .../templates/balance_deposit_email.html | 0 engine/payments/tests.py | 0 {payments => engine/payments}/urls.py | 4 +- .../payments}/utils/__init__.py | 2 +- {payments => engine/payments}/utils/cbr.py | 0 .../payments}/utils/currencies.py | 0 .../payments}/utils/emailing.py | 6 +- .../payments}/utils/gateways.py | 4 +- {payments => engine/payments}/views.py | 8 +- {payments => engine/payments}/viewsets.py | 10 +- evibes/__init__.py | 3 - evibes/api_urls.py | 53 - evibes/asgi.py | 4 +- evibes/b2b_urls.py | 23 - evibes/hosts.py | 7 - evibes/locale/ar_AR/LC_MESSAGES/django.mo | Bin 3887 -> 10338 bytes evibes/locale/ar_AR/LC_MESSAGES/django.po | 106 +- evibes/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 3255 -> 8879 bytes evibes/locale/cs_CZ/LC_MESSAGES/django.po | 106 +- evibes/locale/da_DK/LC_MESSAGES/django.mo | Bin 3217 -> 8618 bytes evibes/locale/da_DK/LC_MESSAGES/django.po | 106 +- evibes/locale/de_DE/LC_MESSAGES/django.mo | Bin 3251 -> 8994 bytes evibes/locale/de_DE/LC_MESSAGES/django.po | 106 +- evibes/locale/en_GB/LC_MESSAGES/django.mo | Bin 3099 -> 8450 bytes evibes/locale/en_GB/LC_MESSAGES/django.po | 106 +- evibes/locale/en_US/LC_MESSAGES/django.mo | Bin 3104 -> 8454 bytes evibes/locale/en_US/LC_MESSAGES/django.po | 106 +- evibes/locale/es_ES/LC_MESSAGES/django.mo | Bin 3341 -> 9094 bytes evibes/locale/es_ES/LC_MESSAGES/django.po | 106 +- evibes/locale/fa_IR/LC_MESSAGES/django.po | 71 +- evibes/locale/fr_FR/LC_MESSAGES/django.mo | Bin 3430 -> 9359 bytes evibes/locale/fr_FR/LC_MESSAGES/django.po | 110 +- evibes/locale/he_IL/LC_MESSAGES/django.mo | Bin 3540 -> 9682 bytes evibes/locale/he_IL/LC_MESSAGES/django.po | 71 +- evibes/locale/hi_IN/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes evibes/locale/hi_IN/LC_MESSAGES/django.po | 73 +- evibes/locale/hr_HR/LC_MESSAGES/django.po | 71 +- evibes/locale/id_ID/LC_MESSAGES/django.mo | Bin 3124 -> 8637 bytes evibes/locale/id_ID/LC_MESSAGES/django.po | 106 +- evibes/locale/it_IT/LC_MESSAGES/django.mo | Bin 3322 -> 9052 bytes evibes/locale/it_IT/LC_MESSAGES/django.po | 106 +- evibes/locale/ja_JP/LC_MESSAGES/django.mo | Bin 3438 -> 9454 bytes evibes/locale/ja_JP/LC_MESSAGES/django.po | 106 +- evibes/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 358 -> 359 bytes evibes/locale/kk_KZ/LC_MESSAGES/django.po | 73 +- evibes/locale/ko_KR/LC_MESSAGES/django.mo | Bin 3191 -> 8824 bytes evibes/locale/ko_KR/LC_MESSAGES/django.po | 106 +- evibes/locale/nl_NL/LC_MESSAGES/django.mo | Bin 3228 -> 8699 bytes evibes/locale/nl_NL/LC_MESSAGES/django.po | 106 +- evibes/locale/no_NO/LC_MESSAGES/django.mo | Bin 3228 -> 8666 bytes evibes/locale/no_NO/LC_MESSAGES/django.po | 106 +- evibes/locale/pl_PL/LC_MESSAGES/django.mo | Bin 3272 -> 8961 bytes evibes/locale/pl_PL/LC_MESSAGES/django.po | 106 +- evibes/locale/pt_BR/LC_MESSAGES/django.mo | Bin 3298 -> 9059 bytes evibes/locale/pt_BR/LC_MESSAGES/django.po | 106 +- evibes/locale/ro_RO/LC_MESSAGES/django.mo | Bin 3320 -> 9089 bytes evibes/locale/ro_RO/LC_MESSAGES/django.po | 106 +- evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 4040 -> 11518 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 106 +- evibes/locale/sv_SE/LC_MESSAGES/django.mo | Bin 3254 -> 8754 bytes evibes/locale/sv_SE/LC_MESSAGES/django.po | 106 +- evibes/locale/th_TH/LC_MESSAGES/django.mo | Bin 4584 -> 13349 bytes evibes/locale/th_TH/LC_MESSAGES/django.po | 71 +- evibes/locale/tr_TR/LC_MESSAGES/django.mo | Bin 3322 -> 9046 bytes evibes/locale/tr_TR/LC_MESSAGES/django.po | 109 +- evibes/locale/vi_VN/LC_MESSAGES/django.mo | Bin 3577 -> 9611 bytes evibes/locale/vi_VN/LC_MESSAGES/django.po | 74 +- evibes/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 3037 -> 8163 bytes evibes/locale/zh_Hans/LC_MESSAGES/django.po | 106 +- evibes/middleware.py | 8 +- evibes/models.png | Bin 2864119 -> 0 bytes evibes/settings/base.py | 64 +- evibes/settings/caches.py | 6 +- evibes/settings/constance.py | 2 +- evibes/settings/drf.py | 138 +- evibes/settings/elasticsearch.py | 2 +- evibes/settings/emailing.py | 2 +- evibes/settings/jazzmin.py | 10 +- evibes/settings/logconfig.py | 2 +- evibes/urls.py | 96 +- nginx.conf | 14 +- payments/locale/ar_AR/LC_MESSAGES/django.mo | Bin 5255 -> 0 bytes payments/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 4618 -> 0 bytes payments/locale/da_DK/LC_MESSAGES/django.mo | Bin 4599 -> 0 bytes payments/locale/de_DE/LC_MESSAGES/django.mo | Bin 4778 -> 0 bytes payments/locale/en_GB/LC_MESSAGES/django.mo | Bin 4470 -> 0 bytes payments/locale/en_US/LC_MESSAGES/django.mo | Bin 4458 -> 0 bytes payments/locale/es_ES/LC_MESSAGES/django.mo | Bin 4739 -> 0 bytes payments/locale/fr_FR/LC_MESSAGES/django.mo | Bin 4837 -> 0 bytes payments/locale/he_IL/LC_MESSAGES/django.mo | Bin 4982 -> 0 bytes payments/locale/hi_IN/LC_MESSAGES/django.mo | Bin 358 -> 0 bytes payments/locale/id_ID/LC_MESSAGES/django.mo | Bin 4622 -> 0 bytes payments/locale/it_IT/LC_MESSAGES/django.mo | Bin 4737 -> 0 bytes payments/locale/ja_JP/LC_MESSAGES/django.mo | Bin 4941 -> 0 bytes payments/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 358 -> 0 bytes payments/locale/ko_KR/LC_MESSAGES/django.mo | Bin 4746 -> 0 bytes payments/locale/nl_NL/LC_MESSAGES/django.mo | Bin 4630 -> 0 bytes payments/locale/no_NO/LC_MESSAGES/django.mo | Bin 4565 -> 0 bytes payments/locale/pl_PL/LC_MESSAGES/django.mo | Bin 4663 -> 0 bytes payments/locale/pt_BR/LC_MESSAGES/django.mo | Bin 4700 -> 0 bytes payments/locale/ro_RO/LC_MESSAGES/django.mo | Bin 4707 -> 0 bytes payments/locale/ru_RU/LC_MESSAGES/django.mo | Bin 5756 -> 0 bytes payments/locale/sv_SE/LC_MESSAGES/django.mo | Bin 4645 -> 0 bytes payments/locale/th_TH/LC_MESSAGES/django.mo | Bin 6780 -> 0 bytes payments/locale/tr_TR/LC_MESSAGES/django.mo | Bin 4632 -> 0 bytes payments/locale/vi_VN/LC_MESSAGES/django.mo | Bin 5097 -> 0 bytes payments/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 4246 -> 0 bytes pyproject.toml | 27 +- scripts/Unix/generate-environment-file.sh | 4 +- scripts/Unix/reboot.sh | 16 +- scripts/Unix/run.sh | 14 +- scripts/Windows/generate-environment-file.ps1 | 4 +- scripts/Windows/reboot.ps1 | 21 +- scripts/Windows/run.ps1 | 20 +- uv.lock | 314 ++-- vibes_auth/locale/hi_IN/LC_MESSAGES/django.mo | Bin 358 -> 0 bytes vibes_auth/locale/kk_KZ/LC_MESSAGES/django.mo | Bin 358 -> 0 bytes 651 files changed, 30869 insertions(+), 27291 deletions(-) delete mode 100644 core/api_urls.py delete mode 100644 core/locale/ar_AR/LC_MESSAGES/django.mo delete mode 100644 core/locale/cs_CZ/LC_MESSAGES/django.mo delete mode 100644 core/locale/da_DK/LC_MESSAGES/django.mo delete mode 100644 core/locale/de_DE/LC_MESSAGES/django.mo delete mode 100644 core/locale/en_GB/LC_MESSAGES/django.mo delete mode 100644 core/locale/en_US/LC_MESSAGES/django.mo delete mode 100644 core/locale/es_ES/LC_MESSAGES/django.mo delete mode 100644 core/locale/fr_FR/LC_MESSAGES/django.mo delete mode 100644 core/locale/he_IL/LC_MESSAGES/django.mo delete mode 100644 core/locale/id_ID/LC_MESSAGES/django.mo delete mode 100644 core/locale/it_IT/LC_MESSAGES/django.mo delete mode 100644 core/locale/ja_JP/LC_MESSAGES/django.mo delete mode 100644 core/locale/ko_KR/LC_MESSAGES/django.mo delete mode 100644 core/locale/nl_NL/LC_MESSAGES/django.mo delete mode 100644 core/locale/no_NO/LC_MESSAGES/django.mo delete mode 100644 core/locale/pl_PL/LC_MESSAGES/django.mo delete mode 100644 core/locale/pt_BR/LC_MESSAGES/django.mo delete mode 100644 core/locale/ro_RO/LC_MESSAGES/django.mo delete mode 100644 core/locale/ru_RU/LC_MESSAGES/django.mo delete mode 100644 core/locale/sv_SE/LC_MESSAGES/django.mo delete mode 100644 core/locale/th_TH/LC_MESSAGES/django.mo delete mode 100644 core/locale/tr_TR/LC_MESSAGES/django.mo delete mode 100644 core/locale/vi_VN/LC_MESSAGES/django.mo delete mode 100644 core/locale/zh_Hans/LC_MESSAGES/django.mo delete mode 100644 core/urls.py rename {blog => engine}/__init__.py (100%) rename {blog/docs => engine/authv}/__init__.py (100%) rename {vibes_auth => engine/authv}/admin.py (93%) rename {vibes_auth => engine/authv}/apps.py (80%) rename {blog/docs/drf => engine/authv/docs}/__init__.py (100%) rename {blog/elasticsearch => engine/authv/docs/drf}/__init__.py (100%) rename {vibes_auth => engine/authv}/docs/drf/views.py (96%) rename {vibes_auth => engine/authv}/docs/drf/viewsets.py (97%) rename {vibes_auth => engine/authv}/filters.py (94%) rename {vibes_auth => engine/authv}/forms.py (73%) rename {blog => engine/authv}/graphene/__init__.py (100%) rename {vibes_auth => engine/authv}/graphene/mutations.py (94%) rename {vibes_auth => engine/authv}/graphene/object_types.py (90%) rename {vibes_auth => engine/authv}/locale/ar_AR/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/ar_AR/LC_MESSAGES/django.po (65%) rename {vibes_auth => engine/authv}/locale/cs_CZ/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/cs_CZ/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/authv}/locale/da_DK/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/da_DK/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/de_DE/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/de_DE/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/authv}/locale/en_GB/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/en_GB/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/authv}/locale/en_US/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/en_US/LC_MESSAGES/django.po (61%) rename {vibes_auth => engine/authv}/locale/es_ES/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/es_ES/LC_MESSAGES/django.po (63%) rename {blog => engine/authv}/locale/fa_IR/LC_MESSAGES/django.mo (100%) rename {vibes_auth/locale/hr_HR => engine/authv/locale/fa_IR}/LC_MESSAGES/django.po (58%) rename {vibes_auth => engine/authv}/locale/fr_FR/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/fr_FR/LC_MESSAGES/django.po (71%) rename {vibes_auth => engine/authv}/locale/he_IL/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/he_IL/LC_MESSAGES/django.po (66%) rename {blog => engine/authv}/locale/hi_IN/LC_MESSAGES/django.mo (74%) rename {vibes_auth/locale/kk_KZ => engine/authv/locale/hi_IN}/LC_MESSAGES/django.po (58%) rename {blog => engine/authv}/locale/hr_HR/LC_MESSAGES/django.mo (100%) rename {vibes_auth/locale/fa_IR => engine/authv/locale/hr_HR}/LC_MESSAGES/django.po (58%) rename {vibes_auth => engine/authv}/locale/id_ID/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/id_ID/LC_MESSAGES/django.po (69%) rename {vibes_auth => engine/authv}/locale/it_IT/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/it_IT/LC_MESSAGES/django.po (70%) rename {vibes_auth => engine/authv}/locale/ja_JP/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/ja_JP/LC_MESSAGES/django.po (55%) rename {blog => engine/authv}/locale/kk_KZ/LC_MESSAGES/django.mo (74%) rename {vibes_auth/locale/hi_IN => engine/authv/locale/kk_KZ}/LC_MESSAGES/django.po (58%) rename {vibes_auth => engine/authv}/locale/ko_KR/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/ko_KR/LC_MESSAGES/django.po (56%) rename {vibes_auth => engine/authv}/locale/nl_NL/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/nl_NL/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/no_NO/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/no_NO/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/authv}/locale/pl_PL/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/pl_PL/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/pt_BR/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/pt_BR/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/ro_RO/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/ro_RO/LC_MESSAGES/django.po (65%) rename {vibes_auth => engine/authv}/locale/ru_RU/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/ru_RU/LC_MESSAGES/django.po (64%) rename {vibes_auth => engine/authv}/locale/sv_SE/LC_MESSAGES/django.mo (66%) rename {vibes_auth => engine/authv}/locale/sv_SE/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/th_TH/LC_MESSAGES/django.mo (68%) rename {vibes_auth => engine/authv}/locale/th_TH/LC_MESSAGES/django.po (64%) rename {vibes_auth => engine/authv}/locale/tr_TR/LC_MESSAGES/django.mo (65%) rename {vibes_auth => engine/authv}/locale/tr_TR/LC_MESSAGES/django.po (63%) rename {vibes_auth => engine/authv}/locale/vi_VN/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/vi_VN/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/authv}/locale/zh_Hans/LC_MESSAGES/django.mo (67%) rename {vibes_auth => engine/authv}/locale/zh_Hans/LC_MESSAGES/django.po (57%) rename {vibes_auth => engine/authv}/managers.py (98%) rename {blog/migrations => engine/authv/messaging}/__init__.py (100%) rename {vibes_auth => engine/authv}/messaging/admin.py (93%) rename {vibes_auth => engine/authv}/messaging/auth.py (100%) rename {vibes_auth => engine/authv}/messaging/consumers.py (100%) rename {vibes_auth => engine/authv}/messaging/models.py (97%) rename {vibes_auth => engine/authv}/messaging/routing.py (73%) rename {vibes_auth => engine/authv}/messaging/services.py (97%) rename {vibes_auth => engine/authv}/migrations/0001_initial.py (94%) rename {vibes_auth => engine/authv}/migrations/0002_blacklistedtoken_outstandingtoken.py (96%) rename {vibes_auth => engine/authv}/migrations/0003_alter_user_language.py (91%) rename {vibes_auth => engine/authv}/migrations/0004_alter_user_language.py (97%) create mode 100644 engine/authv/migrations/0005_alter_user_groups.py rename {blog/templates => engine/authv/migrations}/__init__.py (100%) rename {vibes_auth => engine/authv}/models.py (71%) rename {vibes_auth => engine/authv}/serializers.py (97%) rename {vibes_auth => engine/authv}/signals.py (86%) rename {vibes_auth => engine/authv}/static/person.png (100%) rename {vibes_auth => engine/authv}/tasks.py (89%) rename {blog/utils => engine/authv/templates}/__init__.py (100%) rename {vibes_auth => engine/authv}/templates/user_reset_password_email.html (100%) rename {vibes_auth => engine/authv}/templates/user_verification_email.html (100%) rename {blog => engine/authv}/tests.py (100%) rename {vibes_auth => engine/authv}/urls.py (75%) rename {core => engine/authv/utils}/__init__.py (100%) rename {vibes_auth => engine/authv}/utils/emailing.py (93%) rename {vibes_auth => engine/authv}/validators.py (100%) rename {vibes_auth => engine/authv}/views.py (90%) rename {vibes_auth => engine/authv}/viewsets.py (90%) rename {core/crm/amo => engine/blog}/__init__.py (100%) rename {blog => engine/blog}/admin.py (89%) rename {blog => engine/blog}/apps.py (68%) rename {core => engine/blog}/docs/__init__.py (100%) rename {core/management => engine/blog/docs/drf}/__init__.py (100%) rename {blog => engine/blog}/docs/drf/views.py (100%) rename {blog => engine/blog}/docs/drf/viewsets.py (83%) rename {core/migrations => engine/blog/elasticsearch}/__init__.py (100%) rename {blog => engine/blog}/elasticsearch/documents.py (83%) rename {blog => engine/blog}/filters.py (89%) rename {core/templates => engine/blog/graphene}/__init__.py (100%) rename {blog => engine/blog}/graphene/object_types.py (92%) rename {blog => engine/blog}/locale/ar_AR/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/ar_AR/LC_MESSAGES/django.po (81%) rename {blog => engine/blog}/locale/cs_CZ/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/cs_CZ/LC_MESSAGES/django.po (78%) rename {blog => engine/blog}/locale/da_DK/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/da_DK/LC_MESSAGES/django.po (79%) rename {blog => engine/blog}/locale/de_DE/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/de_DE/LC_MESSAGES/django.po (81%) rename {blog => engine/blog}/locale/en_GB/LC_MESSAGES/django.mo (93%) rename {blog => engine/blog}/locale/en_GB/LC_MESSAGES/django.po (82%) rename {blog => engine/blog}/locale/en_US/LC_MESSAGES/django.mo (93%) rename {blog => engine/blog}/locale/en_US/LC_MESSAGES/django.po (82%) rename {blog => engine/blog}/locale/es_ES/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/es_ES/LC_MESSAGES/django.po (80%) rename {core => engine/blog}/locale/fa_IR/LC_MESSAGES/django.mo (100%) rename {blog => engine/blog}/locale/fa_IR/LC_MESSAGES/django.po (77%) rename {blog => engine/blog}/locale/fr_FR/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/fr_FR/LC_MESSAGES/django.po (80%) rename {blog => engine/blog}/locale/he_IL/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/he_IL/LC_MESSAGES/django.po (75%) rename {core => engine/blog}/locale/hi_IN/LC_MESSAGES/django.mo (74%) rename {blog/locale/kk_KZ => engine/blog/locale/hi_IN}/LC_MESSAGES/django.po (76%) rename {core => engine/blog}/locale/hr_HR/LC_MESSAGES/django.mo (100%) rename {blog => engine/blog}/locale/hr_HR/LC_MESSAGES/django.po (77%) rename {blog => engine/blog}/locale/id_ID/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/id_ID/LC_MESSAGES/django.po (75%) rename {blog => engine/blog}/locale/it_IT/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/it_IT/LC_MESSAGES/django.po (78%) rename {blog => engine/blog}/locale/ja_JP/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/ja_JP/LC_MESSAGES/django.po (54%) rename {core => engine/blog}/locale/kk_KZ/LC_MESSAGES/django.mo (74%) rename {blog/locale/hi_IN => engine/blog/locale/kk_KZ}/LC_MESSAGES/django.po (76%) rename {blog => engine/blog}/locale/ko_KR/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/ko_KR/LC_MESSAGES/django.po (60%) rename {blog => engine/blog}/locale/nl_NL/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/nl_NL/LC_MESSAGES/django.po (82%) rename {blog => engine/blog}/locale/no_NO/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/no_NO/LC_MESSAGES/django.po (81%) rename {blog => engine/blog}/locale/pl_PL/LC_MESSAGES/django.mo (91%) rename {blog => engine/blog}/locale/pl_PL/LC_MESSAGES/django.po (78%) rename {blog => engine/blog}/locale/pt_BR/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/pt_BR/LC_MESSAGES/django.po (81%) rename {blog => engine/blog}/locale/ro_RO/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/ro_RO/LC_MESSAGES/django.po (80%) rename {blog => engine/blog}/locale/ru_RU/LC_MESSAGES/django.mo (94%) rename {blog => engine/blog}/locale/ru_RU/LC_MESSAGES/django.po (84%) rename {blog => engine/blog}/locale/sv_SE/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/sv_SE/LC_MESSAGES/django.po (82%) rename {blog => engine/blog}/locale/th_TH/LC_MESSAGES/django.mo (94%) rename {blog => engine/blog}/locale/th_TH/LC_MESSAGES/django.po (67%) rename {blog => engine/blog}/locale/tr_TR/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/tr_TR/LC_MESSAGES/django.po (80%) rename {blog => engine/blog}/locale/vi_VN/LC_MESSAGES/django.mo (92%) rename {blog => engine/blog}/locale/vi_VN/LC_MESSAGES/django.po (78%) rename {blog => engine/blog}/locale/zh_Hans/LC_MESSAGES/django.mo (91%) rename {blog => engine/blog}/locale/zh_Hans/LC_MESSAGES/django.po (67%) rename {blog => engine/blog}/migrations/0001_initial.py (100%) rename {blog => engine/blog}/migrations/0002_alter_post_slug_alter_post_title.py (100%) rename {blog => engine/blog}/migrations/0003_alter_post_tags.py (100%) rename {blog => engine/blog}/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py (100%) rename {blog => engine/blog}/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py (100%) rename {blog => engine/blog}/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py (100%) rename {blog => engine/blog}/migrations/0007_post_is_static_page.py (100%) rename {core/templatetags => engine/blog/migrations}/__init__.py (100%) rename {blog => engine/blog}/models.py (95%) rename {blog => engine/blog}/serializers.py (91%) rename {blog => engine/blog}/signals.py (100%) rename {blog => engine/blog}/static/.gitkeep (100%) rename {payments => engine/blog/templates}/__init__.py (100%) rename {core => engine/blog}/tests.py (100%) rename {blog => engine/blog}/translation.py (85%) rename {blog => engine/blog}/urls.py (85%) rename {payments/docs => engine/blog/utils}/__init__.py (100%) rename {blog => engine/blog}/views.py (100%) rename {blog => engine/blog}/viewsets.py (81%) rename {blog => engine/blog}/widgets.py (100%) rename {payments/docs/drf => engine/core}/__init__.py (100%) rename {core => engine/core}/abstract.py (100%) rename {core => engine/core}/admin.py (99%) rename {core => engine/core}/apps.py (73%) rename {core => engine/core}/b2b_urls.py (89%) rename {core => engine/core}/choices.py (100%) rename {core => engine/core}/crm/__init__.py (60%) rename {payments/graphene => engine/core/crm/amo}/__init__.py (100%) rename {core => engine/core}/crm/amo/gateway.py (97%) rename {core => engine/core}/crm/exceptions.py (100%) rename {core => engine/core}/data/.gitkeep (100%) rename {core => engine/core}/data/payment_methods.json (100%) rename {payments/migrations => engine/core/docs}/__init__.py (100%) rename {core => engine/core}/docs/drf/__init__.py (100%) rename {core => engine/core}/docs/drf/views.py (95%) rename {core => engine/core}/docs/drf/viewsets.py (96%) rename {core => engine/core}/docs/images/evibes-big-simple.png (100%) rename {core => engine/core}/docs/images/evibes-big.png (100%) rename {core => engine/core}/docs/images/evibes.ico (100%) rename {core => engine/core}/docs/images/evibes.png (100%) rename {core => engine/core}/docs/images/favicon.svg (100%) rename {core => engine/core}/elasticsearch/__init__.py (99%) rename {core => engine/core}/elasticsearch/documents.py (97%) rename {core => engine/core}/errors.py (100%) rename {core => engine/core}/filters.py (99%) rename {payments/static => engine/core/fixtures}/.gitkeep (100%) create mode 100644 engine/core/fixtures/initialization.json rename {core => engine/core}/forms.py (100%) rename {core => engine/core}/graphene/__init__.py (100%) rename {core => engine/core}/graphene/mutations.py (97%) rename {core => engine/core}/graphene/object_types.py (98%) rename {core => engine/core}/graphene/schema.py (93%) create mode 100644 engine/core/locale/ar_AR/LC_MESSAGES/django.mo rename {core => engine/core}/locale/ar_AR/LC_MESSAGES/django.po (77%) create mode 100644 engine/core/locale/cs_CZ/LC_MESSAGES/django.mo rename {core => engine/core}/locale/cs_CZ/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/da_DK/LC_MESSAGES/django.mo rename {core => engine/core}/locale/da_DK/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/de_DE/LC_MESSAGES/django.mo rename {core => engine/core}/locale/de_DE/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/en_GB/LC_MESSAGES/django.mo rename {core => engine/core}/locale/en_GB/LC_MESSAGES/django.po (73%) create mode 100644 engine/core/locale/en_US/LC_MESSAGES/django.mo rename {core => engine/core}/locale/en_US/LC_MESSAGES/django.po (73%) create mode 100644 engine/core/locale/es_ES/LC_MESSAGES/django.mo rename {core => engine/core}/locale/es_ES/LC_MESSAGES/django.po (75%) rename {payments => engine/core}/locale/fa_IR/LC_MESSAGES/django.mo (100%) rename {core/locale/hr_HR => engine/core/locale/fa_IR}/LC_MESSAGES/django.po (62%) create mode 100644 engine/core/locale/fr_FR/LC_MESSAGES/django.mo rename {core => engine/core}/locale/fr_FR/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/he_IL/LC_MESSAGES/django.mo rename {core => engine/core}/locale/he_IL/LC_MESSAGES/django.po (76%) create mode 100644 engine/core/locale/hi_IN/LC_MESSAGES/django.mo rename {core => engine/core}/locale/hi_IN/LC_MESSAGES/django.po (62%) rename {payments => engine/core}/locale/hr_HR/LC_MESSAGES/django.mo (100%) rename {core/locale/fa_IR => engine/core/locale/hr_HR}/LC_MESSAGES/django.po (62%) create mode 100644 engine/core/locale/id_ID/LC_MESSAGES/django.mo rename {core => engine/core}/locale/id_ID/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/it_IT/LC_MESSAGES/django.mo rename {core => engine/core}/locale/it_IT/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/ja_JP/LC_MESSAGES/django.mo rename {core => engine/core}/locale/ja_JP/LC_MESSAGES/django.po (76%) create mode 100644 engine/core/locale/kk_KZ/LC_MESSAGES/django.mo rename {core => engine/core}/locale/kk_KZ/LC_MESSAGES/django.po (62%) create mode 100644 engine/core/locale/ko_KR/LC_MESSAGES/django.mo rename {core => engine/core}/locale/ko_KR/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/nl_NL/LC_MESSAGES/django.mo rename {core => engine/core}/locale/nl_NL/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/no_NO/LC_MESSAGES/django.mo rename {core => engine/core}/locale/no_NO/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/pl_PL/LC_MESSAGES/django.mo rename {core => engine/core}/locale/pl_PL/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/pt_BR/LC_MESSAGES/django.mo rename {core => engine/core}/locale/pt_BR/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/ro_RO/LC_MESSAGES/django.mo rename {core => engine/core}/locale/ro_RO/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/ru_RU/LC_MESSAGES/django.mo rename {core => engine/core}/locale/ru_RU/LC_MESSAGES/django.po (79%) create mode 100644 engine/core/locale/sv_SE/LC_MESSAGES/django.mo rename {core => engine/core}/locale/sv_SE/LC_MESSAGES/django.po (74%) create mode 100644 engine/core/locale/th_TH/LC_MESSAGES/django.mo rename {core => engine/core}/locale/th_TH/LC_MESSAGES/django.po (82%) create mode 100644 engine/core/locale/tr_TR/LC_MESSAGES/django.mo rename {core => engine/core}/locale/tr_TR/LC_MESSAGES/django.po (75%) create mode 100644 engine/core/locale/vi_VN/LC_MESSAGES/django.mo rename {core => engine/core}/locale/vi_VN/LC_MESSAGES/django.po (77%) create mode 100644 engine/core/locale/zh_Hans/LC_MESSAGES/django.mo rename {core => engine/core}/locale/zh_Hans/LC_MESSAGES/django.po (72%) rename {payments/templates => engine/core/management}/__init__.py (100%) rename {core => engine/core}/management/commands/__init__.py (92%) rename {core => engine/core}/management/commands/await_services.py (78%) rename {core => engine/core}/management/commands/check_translated.py (98%) rename {core => engine/core}/management/commands/clear_unwanted.py (98%) rename {core => engine/core}/management/commands/deepl_translate.py (98%) rename {core => engine/core}/management/commands/delete_never_ordered_products.py (95%) rename {core => engine/core}/management/commands/delete_products_by_description.py (95%) rename {core => engine/core}/management/commands/fetch_products.py (90%) rename {core => engine/core}/management/commands/fix_fuzzy.py (100%) rename {core => engine/core}/management/commands/fix_prices.py (91%) create mode 100644 engine/core/management/commands/initialize.py rename {core => engine/core}/management/commands/rebuild_slugs.py (97%) rename {core => engine/core}/management/commands/set_default_caches.py (87%) rename {core => engine/core}/management/commands/translate_fields.py (96%) rename {core => engine/core}/managers.py (100%) rename {core => engine/core}/migrations/0001_initial.py (99%) rename {core => engine/core}/migrations/0002_initial.py (100%) rename {core => engine/core}/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py (100%) rename {core => engine/core}/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py (100%) rename {core => engine/core}/migrations/0005_remove_brand_category_brand_categories.py (100%) rename {core => engine/core}/migrations/0006_alter_order_status.py (100%) rename {core => engine/core}/migrations/0007_alter_category_image.py (83%) rename {core => engine/core}/migrations/0008_digitalassetdownload.py (100%) rename {core => engine/core}/migrations/0009_documentary.py (94%) rename {core => engine/core}/migrations/0010_product_partnumber.py (100%) rename {core => engine/core}/migrations/0011_brand_big_logo_brand_description_and_more.py (97%) rename {core => engine/core}/migrations/0012_alter_order_user.py (100%) rename {core => engine/core}/migrations/0013_product_slug.py (100%) rename {core => engine/core}/migrations/0014_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0015_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0016_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0017_order_human_readable_id.py (85%) rename {core => engine/core}/migrations/0018_alter_order_human_readable_id.py (89%) rename {core => engine/core}/migrations/0019_address.py (100%) rename {core => engine/core}/migrations/0020_order_billing_address_order_shipping_address.py (100%) rename {core => engine/core}/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py (100%) rename {core => engine/core}/migrations/0022_category_slug.py (100%) rename {core => engine/core}/migrations/0023_address_address_line.py (100%) rename {core => engine/core}/migrations/0024_categorytag_category_tags.py (100%) rename {core => engine/core}/migrations/0025_alter_product_category.py (100%) rename {core => engine/core}/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0027_brand_priority_alter_brand_slug.py (100%) rename {core => engine/core}/migrations/0028_alter_category_slug_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0029_alter_category_slug.py (100%) rename {core => engine/core}/migrations/0030_alter_category_slug.py (100%) rename {core => engine/core}/migrations/0031_alter_product_slug.py (100%) rename {core => engine/core}/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py (100%) rename {core => engine/core}/migrations/0033_alter_category_slug.py (87%) rename {core => engine/core}/migrations/0034_category_priority_alter_brand_priority.py (100%) rename {core => engine/core}/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py (94%) rename {core => engine/core}/migrations/0036_vendor_b2b_auth_token_vendor_users.py (89%) rename {core => engine/core}/migrations/0037_product_sku.py (100%) rename {core => engine/core}/migrations/0038_backfill_product_sku.py (93%) rename {core => engine/core}/migrations/0039_alter_product_sku.py (85%) rename {core => engine/core}/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py (100%) rename {core => engine/core}/migrations/0041_alter_customerrelationshipmanagementprovider_options.py (100%) rename {core => engine/core}/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py (100%) rename {core => engine/core}/migrations/0043_attribute_is_filterable_and_more.py (100%) rename {core => engine/core}/migrations/0044_vendor_last_processing_response.py (85%) rename {core => engine/core}/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py (100%) rename {core => engine/core}/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py (100%) rename {core => engine/core}/migrations/0047_alter_attribute_unique_together.py (100%) rename {core => engine/core}/migrations/0048_vendor_integration_path_alter_productimage_priority.py (100%) rename {core => engine/core}/migrations/0049_alter_attribute_unique_together.py (100%) rename {core => engine/core}/migrations/0050_remove_attribute_categories.py (100%) rename {core => engine/core}/migrations/0051_stock_system_attributes.py (100%) rename {core => engine/core}/migrations/0052_alter_stock_system_attributes.py (100%) rename {vibes_auth => engine/core/migrations}/__init__.py (100%) rename {core => engine/core}/mixins.py (100%) rename {core => engine/core}/models.py (98%) rename {core => engine/core}/permissions.py (100%) rename {core => engine/core}/serializers/__init__.py (100%) rename {core => engine/core}/serializers/detail.py (94%) rename {core => engine/core}/serializers/seo.py (100%) rename {core => engine/core}/serializers/simple.py (97%) rename {core => engine/core}/serializers/utility.py (99%) rename {core => engine/core}/signals.py (94%) rename {core => engine/core}/sitemaps.py (97%) rename {core => engine/core}/static/Source Code Pro ExtraLight_Regular.json (100%) rename {core => engine/core}/static/css/constance.css (100%) rename {core => engine/core}/static/favicon.ico (100%) rename {core => engine/core}/static/favicon.png (100%) rename {core => engine/core}/static/flags/ar-ar.png (100%) rename {core => engine/core}/static/flags/cs-cz.png (100%) rename {core => engine/core}/static/flags/da-dk.png (100%) rename {core => engine/core}/static/flags/de-de.png (100%) rename {core => engine/core}/static/flags/en-gb.png (100%) rename {core => engine/core}/static/flags/en-us.png (100%) rename {core => engine/core}/static/flags/es-es.png (100%) rename {core => engine/core}/static/flags/fa-ir.png (100%) rename {core => engine/core}/static/flags/fr-fr.png (100%) rename {core => engine/core}/static/flags/he-il.png (100%) rename {core => engine/core}/static/flags/hi-in.png (100%) rename {core => engine/core}/static/flags/hr-hr.png (100%) rename {core => engine/core}/static/flags/id-id.png (100%) rename {core => engine/core}/static/flags/it-it.png (100%) rename {core => engine/core}/static/flags/ja-jp.png (100%) rename {core => engine/core}/static/flags/kk-kz.png (100%) rename {core => engine/core}/static/flags/ko-kr.png (100%) rename {core => engine/core}/static/flags/nl-nl.png (100%) rename {core => engine/core}/static/flags/no-no.png (100%) rename {core => engine/core}/static/flags/pl-pl.png (100%) rename {core => engine/core}/static/flags/pt-br.png (100%) rename {core => engine/core}/static/flags/ro-ro.png (100%) rename {core => engine/core}/static/flags/ru-ru.png (100%) rename {core => engine/core}/static/flags/sv-se.png (100%) rename {core => engine/core}/static/flags/th-th.png (100%) rename {core => engine/core}/static/flags/tr-tr.png (100%) rename {core => engine/core}/static/flags/vi-vn.png (100%) rename {core => engine/core}/static/flags/zh-hans.png (100%) rename {core => engine/core}/static/logo.png (100%) rename {core => engine/core}/static/maintenance.html (100%) rename {core => engine/core}/static/robots_backend.txt (100%) rename {core => engine/core}/static/robots_frontend.txt (100%) rename {core => engine/core}/tasks.py (95%) rename {vibes_auth/docs => engine/core/templates}/__init__.py (100%) rename {core => engine/core}/templates/contact_us_email.html (100%) rename {core => engine/core}/templates/digital_order_created_email.html (100%) rename {core => engine/core}/templates/digital_order_delivered_email.html (100%) rename {core => engine/core}/templates/json_table_widget.html (100%) rename {core => engine/core}/templates/promocode_granted_email.html (100%) rename {core => engine/core}/templates/shipped_order_created_email.html (100%) rename {core => engine/core}/templates/shipped_order_delivered_email.html (100%) rename {vibes_auth/docs/drf => engine/core/templatetags}/__init__.py (100%) rename {core => engine/core}/templatetags/conditions.py (100%) rename {core => engine/core}/templatetags/filters.py (100%) rename {payments => engine/core}/tests.py (100%) rename {core => engine/core}/translation.py (97%) rename {core => engine/core}/typing/__init__.py (100%) rename {core => engine/core}/typing/models.py (100%) create mode 100644 engine/core/urls.py rename {core => engine/core}/utils/__init__.py (96%) rename {core => engine/core}/utils/caching.py (93%) rename {core => engine/core}/utils/db.py (100%) rename {core => engine/core}/utils/emailing.py (95%) rename {core => engine/core}/utils/languages.py (100%) rename {core => engine/core}/utils/lists.py (100%) rename {core => engine/core}/utils/messages.py (100%) rename {core => engine/core}/utils/nominatim.py (100%) rename {core => engine/core}/utils/security.py (59%) rename {core => engine/core}/utils/seo_builders.py (98%) rename {core => engine/core}/utils/vendors.py (89%) rename {core => engine/core}/validators.py (100%) rename {core => engine/core}/vendors/__init__.py (98%) rename {core => engine/core}/views.py (96%) rename {core => engine/core}/viewsets.py (98%) rename {core => engine/core}/widgets.py (100%) rename {vibes_auth/graphene => engine/payments}/__init__.py (100%) rename {payments => engine/payments}/admin.py (87%) rename {payments => engine/payments}/apps.py (79%) rename {payments => engine/payments}/choices.py (100%) rename {vibes_auth/messaging => engine/payments/docs}/__init__.py (100%) rename {vibes_auth/migrations => engine/payments/docs/drf}/__init__.py (100%) rename {payments => engine/payments}/docs/drf/views.py (80%) rename {payments => engine/payments}/docs/drf/viewsets.py (51%) rename {payments => engine/payments}/errors.py (100%) rename {payments => engine/payments}/forms.py (81%) rename {payments => engine/payments}/gateways/__init__.py (100%) rename {vibes_auth/templates => engine/payments/graphene}/__init__.py (100%) rename {payments => engine/payments}/graphene/mutations.py (73%) rename {payments => engine/payments}/graphene/object_types.py (94%) create mode 100644 engine/payments/locale/ar_AR/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/ar_AR/LC_MESSAGES/django.po (73%) create mode 100644 engine/payments/locale/cs_CZ/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/cs_CZ/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/da_DK/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/da_DK/LC_MESSAGES/django.po (70%) create mode 100644 engine/payments/locale/de_DE/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/de_DE/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/en_GB/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/en_GB/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/en_US/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/en_US/LC_MESSAGES/django.po (70%) create mode 100644 engine/payments/locale/es_ES/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/es_ES/LC_MESSAGES/django.po (71%) rename {vibes_auth => engine/payments}/locale/fa_IR/LC_MESSAGES/django.mo (100%) rename {payments => engine/payments}/locale/fa_IR/LC_MESSAGES/django.po (62%) create mode 100644 engine/payments/locale/fr_FR/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/fr_FR/LC_MESSAGES/django.po (72%) create mode 100644 engine/payments/locale/he_IL/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/he_IL/LC_MESSAGES/django.po (72%) create mode 100644 engine/payments/locale/hi_IN/LC_MESSAGES/django.mo rename {payments/locale/kk_KZ => engine/payments/locale/hi_IN}/LC_MESSAGES/django.po (62%) rename {vibes_auth => engine/payments}/locale/hr_HR/LC_MESSAGES/django.mo (100%) rename {payments => engine/payments}/locale/hr_HR/LC_MESSAGES/django.po (62%) create mode 100644 engine/payments/locale/id_ID/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/id_ID/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/it_IT/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/it_IT/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/ja_JP/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/ja_JP/LC_MESSAGES/django.po (72%) create mode 100644 engine/payments/locale/kk_KZ/LC_MESSAGES/django.mo rename {payments/locale/hi_IN => engine/payments/locale/kk_KZ}/LC_MESSAGES/django.po (62%) create mode 100644 engine/payments/locale/ko_KR/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/ko_KR/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/nl_NL/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/nl_NL/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/no_NO/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/no_NO/LC_MESSAGES/django.po (70%) create mode 100644 engine/payments/locale/pl_PL/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/pl_PL/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/pt_BR/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/pt_BR/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/ro_RO/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/ro_RO/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/ru_RU/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/ru_RU/LC_MESSAGES/django.po (75%) create mode 100644 engine/payments/locale/sv_SE/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/sv_SE/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/th_TH/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/th_TH/LC_MESSAGES/django.po (77%) create mode 100644 engine/payments/locale/tr_TR/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/tr_TR/LC_MESSAGES/django.po (71%) create mode 100644 engine/payments/locale/vi_VN/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/vi_VN/LC_MESSAGES/django.po (73%) create mode 100644 engine/payments/locale/zh_Hans/LC_MESSAGES/django.mo rename {payments => engine/payments}/locale/zh_Hans/LC_MESSAGES/django.po (69%) rename {payments => engine/payments}/managers.py (95%) rename {payments => engine/payments}/migrations/0001_initial.py (100%) rename {payments => engine/payments}/migrations/0002_initial.py (100%) rename {payments => engine/payments}/migrations/0003_alter_transaction_balance.py (100%) rename {payments => engine/payments}/migrations/0004_alter_transaction_payment_method.py (100%) rename {payments => engine/payments}/migrations/0005_gateway_transaction_gateway.py (100%) rename {payments => engine/payments}/migrations/0006_transaction_payments_tr_created_95e595_idx.py (100%) rename {vibes_auth/utils => engine/payments/migrations}/__init__.py (100%) rename {payments => engine/payments}/models.py (96%) rename {payments => engine/payments}/serializers.py (95%) rename {payments => engine/payments}/signals.py (89%) rename vibes_auth/tests.py => engine/payments/static/.gitkeep (100%) create mode 100644 engine/payments/templates/__init__.py rename {payments => engine/payments}/templates/balance_deposit_email.html (100%) create mode 100644 engine/payments/tests.py rename {payments => engine/payments}/urls.py (78%) rename {payments => engine/payments}/utils/__init__.py (86%) rename {payments => engine/payments}/utils/cbr.py (100%) rename {payments => engine/payments}/utils/currencies.py (100%) rename {payments => engine/payments}/utils/emailing.py (89%) rename {payments => engine/payments}/utils/gateways.py (87%) rename {payments => engine/payments}/views.py (92%) rename {payments => engine/payments}/viewsets.py (70%) delete mode 100644 evibes/api_urls.py delete mode 100644 evibes/b2b_urls.py delete mode 100644 evibes/hosts.py delete mode 100644 evibes/models.png delete mode 100644 payments/locale/ar_AR/LC_MESSAGES/django.mo delete mode 100644 payments/locale/cs_CZ/LC_MESSAGES/django.mo delete mode 100644 payments/locale/da_DK/LC_MESSAGES/django.mo delete mode 100644 payments/locale/de_DE/LC_MESSAGES/django.mo delete mode 100644 payments/locale/en_GB/LC_MESSAGES/django.mo delete mode 100644 payments/locale/en_US/LC_MESSAGES/django.mo delete mode 100644 payments/locale/es_ES/LC_MESSAGES/django.mo delete mode 100644 payments/locale/fr_FR/LC_MESSAGES/django.mo delete mode 100644 payments/locale/he_IL/LC_MESSAGES/django.mo delete mode 100644 payments/locale/hi_IN/LC_MESSAGES/django.mo delete mode 100644 payments/locale/id_ID/LC_MESSAGES/django.mo delete mode 100644 payments/locale/it_IT/LC_MESSAGES/django.mo delete mode 100644 payments/locale/ja_JP/LC_MESSAGES/django.mo delete mode 100644 payments/locale/kk_KZ/LC_MESSAGES/django.mo delete mode 100644 payments/locale/ko_KR/LC_MESSAGES/django.mo delete mode 100644 payments/locale/nl_NL/LC_MESSAGES/django.mo delete mode 100644 payments/locale/no_NO/LC_MESSAGES/django.mo delete mode 100644 payments/locale/pl_PL/LC_MESSAGES/django.mo delete mode 100644 payments/locale/pt_BR/LC_MESSAGES/django.mo delete mode 100644 payments/locale/ro_RO/LC_MESSAGES/django.mo delete mode 100644 payments/locale/ru_RU/LC_MESSAGES/django.mo delete mode 100644 payments/locale/sv_SE/LC_MESSAGES/django.mo delete mode 100644 payments/locale/th_TH/LC_MESSAGES/django.mo delete mode 100644 payments/locale/tr_TR/LC_MESSAGES/django.mo delete mode 100644 payments/locale/vi_VN/LC_MESSAGES/django.mo delete mode 100644 payments/locale/zh_Hans/LC_MESSAGES/django.mo delete mode 100644 vibes_auth/locale/hi_IN/LC_MESSAGES/django.mo delete mode 100644 vibes_auth/locale/kk_KZ/LC_MESSAGES/django.mo diff --git a/.dockerignore b/.dockerignore index 7c29c69b..5e76b07e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -73,10 +73,10 @@ backups/ services_data/ static/ media/ -!core/static -!blog/static -!vibes_auth/static -!payments/static +!engine/core/static +!engine/blog/static +!engine/authv/static +!engine/payments/static # Environment file .env diff --git a/.gitignore b/.gitignore index fb11fcfb..574f447d 100644 --- a/.gitignore +++ b/.gitignore @@ -109,10 +109,10 @@ static/ media/ # Allow checked-in static from apps -!core/static/ -!payments/static/ -!vibes_auth/static/ -!blog/static/ +!engine/core/static/ +!engine/payments/static/ +!engine/authv/static/ +!engine/blog/static/ # Webassets .webassets-cache/ diff --git a/README.md b/README.md index 83e4e865..aca50b61 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # eVibes -![LOGO](core/docs/images/evibes-big.png) +![LOGO](engine/core/docs/images/evibes-big.png) eVibes — a lightweight, production-ready e‑commerce backend. Storefront, product catalog, cart, and orders work out of the box. Minimal complexity, maximum flexibility — install, adjust to your needs, and start selling. @@ -87,7 +87,7 @@ eVibes — a lightweight, production-ready e‑commerce backend. Storefront, pro ## Configuration ### Dockerfile -If you rely on locale mirrors, adjust Debian sources before running install scripts: +If you rely on locale mirrors, adjust Debian sources before running installation scripts: ``` RUN sed -i 's|https://deb.debian.org/debian|https://ftp..debian.org/debian|g' /etc/apt/sources.list.d/debian.sources ``` @@ -107,14 +107,7 @@ After generation, review and update secrets and credentials (API keys, DB passwo 1. @.your-domain.com 2. www.your-domain.com 3. api.your-domain.com - 4. b2b.your-domain.com - 5. prometheus.your-domain.com - -- For local development, add hosts entries (development only): - ```hosts - 127.0.0.1 api.localhost - 127.0.0.1 b2b.localhost - ``` + 4. prometheus.your-domain.com - Once running, access: - API root / Admin redirect: http://api.localhost:8000/ @@ -136,4 +129,4 @@ After generation, review and update secrets and credentials (API keys, DB passwo This project is licensed under the terms of the LICENSE file included in this repository. -![FAVICON](core/docs/images/evibes.png) \ No newline at end of file +![FAVICON](engine/core/docs/images/evibes.png) \ No newline at end of file diff --git a/core/api_urls.py b/core/api_urls.py deleted file mode 100644 index cfa07308..00000000 --- a/core/api_urls.py +++ /dev/null @@ -1,88 +0,0 @@ -from django.urls import include, path -from rest_framework.routers import DefaultRouter - -from core.sitemaps import BrandSitemap, CategorySitemap, ProductSitemap, StaticPagesSitemap -from core.views import ( - CacheOperatorView, - ContactUsView, - DownloadDigitalAssetView, - GlobalSearchView, - RequestCursedURLView, - SupportedLanguagesView, - WebsiteParametersView, - sitemap_detail, - sitemap_index, -) -from core.viewsets import ( - AddressViewSet, - AttributeGroupViewSet, - BrandViewSet, - CategoryViewSet, - FeedbackViewSet, - OrderProductViewSet, - OrderViewSet, - ProductTagViewSet, - ProductViewSet, - PromoCodeViewSet, - PromotionViewSet, - StockViewSet, - VendorViewSet, - WishlistViewSet, -) - -app_name = "core" - -core_router = DefaultRouter() -core_router.register(r"products", ProductViewSet, basename="products") -core_router.register(r"orders", OrderViewSet, basename="orders") -core_router.register(r"wishlists", WishlistViewSet, basename="wishlists") -core_router.register(r"attribute_groups", AttributeGroupViewSet, basename="attribute_groups") -core_router.register(r"brands", BrandViewSet, basename="brands") -core_router.register(r"categories", CategoryViewSet, basename="categories") -core_router.register(r"vendors", VendorViewSet, basename="vendors") -core_router.register(r"feedbacks", FeedbackViewSet, basename="feedbacks") -core_router.register(r"stocks", StockViewSet, basename="stocks") -core_router.register(r"promo_codes", PromoCodeViewSet, basename="promo_codes") -core_router.register(r"promotions", PromotionViewSet, basename="promotions") -core_router.register(r"addresses", AddressViewSet, basename="addresses") -core_router.register(r"product_tags", ProductTagViewSet, basename="product_tags") -core_router.register(r"order_products", OrderProductViewSet, basename="order_products") - -sitemaps = { - "static": StaticPagesSitemap, - "products": ProductSitemap, - "categories": CategorySitemap, - "brands": BrandSitemap, -} - -urlpatterns = [ - path("core/", include(core_router.urls)), - path( - "sitemap.xml", - sitemap_index, - { - "sitemaps": sitemaps, - "sitemap_url_name": "core:sitemap-detail", - }, - name="sitemap-index", - ), - path( - "sitemap-
.xml", - sitemap_detail, - {"sitemaps": sitemaps}, - name="sitemap-detail", - ), - path( - "sitemap-
-.xml", - sitemap_detail, - {"sitemaps": sitemaps}, - name="sitemap-detail", - ), - path("download//", DownloadDigitalAssetView.as_view(), name="download_digital_asset"), - path("search/", GlobalSearchView.as_view(), name="global_search"), - path("app/cache/", CacheOperatorView.as_view(), name="cache_operator"), - path("app/languages/", SupportedLanguagesView.as_view(), name="supported_languages"), - path("app/parameters/", WebsiteParametersView.as_view(), name="parameters"), - path("app/contact_us/", ContactUsView.as_view(), name="contact_us"), - path("app/request_cursed_url/", RequestCursedURLView.as_view(), name="request_cursed_url"), -] diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo deleted file mode 100644 index 9487f878b0d0443c6affb94a7926f05535c27943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104017 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 diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo deleted file mode 100644 index 86cfbc4ba45bb5d31fe4eef1c6d94a7004291858..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88983 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 DQziuW diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo deleted file mode 100644 index 119246ddeeec5d383a86fcd459379554a3cad669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86955 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 a4I_Q!yN`b%_2-9AzrVDi0sJk`9Q_aSrn+?i diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo deleted file mode 100644 index f4b4bf2c99948ffac551832c71652b53b7756c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92065 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 UyFcl^y7#}nc0p^Xab`XLFP7NR3IG5A diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo deleted file mode 100644 index a35aaae8bd0dc806d1b06c9cfa8d5a24c4d69609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83770 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

VFnZCP01Mw-tg$n{1fAgeRPKMp}S*NM~_uhF{y8 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 diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo deleted file mode 100644 index f27c29c2d128e4f227383cff313eb0d6c7cd5df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83761 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 KYoswU3I7dx@Bj?} diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo deleted file mode 100644 index 305145d3adda482c72f1ce7c70f0efc99f5a8c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92807 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 Lisb?EgC}7tgbybZgh}q!e84$AFjpq%q0Cme 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 diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo deleted file mode 100644 index 45e5f491decfbc8c3651d67860dd169cce7d69be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87085 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 BVtxPs diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo deleted file mode 100644 index 6b6d7cfb5f1d1bb11e3556f7f67ff7cf2f9a03e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90397 zcmce<2b^A2o&SGBQv-?=1r+oqloT?PLI@ZLl12z7BqX5;n0aRAnVE;o%riXCOp-wm z7hTt`D{Db)YX#S}tp&R-*xTy5YhmrZtYt0evbz8G=leb9+_&pG$`#?gnoFyn9kL0NVp_#ek)*`)_(*~=E_ZkGLWWtJTa{tDbZC(8~yGs_;x z^}wnudjQx3=Yspd+`d0J9zrqEc+dJ1Nb(uy)MfR zC*7&*vy7zK@(tdO>p->pu#H)E6nHo&I-LYQ99#uH2;2&a9+!j1fxY0N;Ps%=KN+N` z>{jqYlyeVw8P~UM;vKI43tSIgwAu4}?nRC-0q2qK)u8HeH+UQPNl^5yKQ7CT0Ea>K z^CY;Pe4Y!cpTD_<1N;$q2lqd*HOrQOt!-I$74&{3#P}M|@7qD2asS_ULNjp7rPKu+ zr;=BIAG)0Slm7TCX#>}fzbeb#0siLdEc-O?-|+5%Jz4f{?k^q9vcCp@*rYzZKXRS( z&7Gk7^IPCi;PI_2dnC9R6u({oiar;C3&Bf3(eL_j|E6&LG?1!f&jQ7tzXa8<%f~(a zg`o8>IG6jEgLjdx7d)7Hp0+p3y12i1f0iu*uK>l5H-pQ;JHTb&J)rvIh)J*i!@!fd zUIXgA8n^^}R(O7Axc@D1HTUOU?{cycJc;X`fKLMT{>wng$;ZHB!T$lphetip>9z5ZkJ(r*OSpI3mY$F-o<8&rLt3QFJH z2C98;3eWEj_rDbI`=I*kciWboeDj~6>ObcxUjDJ5>a!Ts^VQ%9;Kc!l!tLXeEBs{i_A0Uk6p+Ux0c)`)hB{aiHq61XQ`_gQC|?Q1xwq%4ZT( zx@Uo^_bUUw2UNO$1?Pj`1(nZXPjfyv0Tdsd46Xya!4=?jp!)N*;F;jtK;{2KQ1!eI zRKFhaH{Nd#1I14#gY&?ppq^g>E(aeEitnBcsva)_&j;TFs($|ssvUEm?)vOR@G!2| zgSvka_(1ULa9szL-#%~=_*dXr;6H$`1HTJC5PZfnoL(;gS8{zjcqsUFQ2p{<@Eq{O zXL>!a03X2hGr@)63qZB!ec)-}*FlwY$g^A@oC}JcyFl^ZAee(UfYJjm2UY(&!L8t@ zz`fw{&&IZZ&jVGTKZ4?mgP(&f0gnbB1YQY>4t=2VxfWD^+yJV6ZwFQ1dqDNecR{85 z4XAn^_FU(~^T4HCUkj=qUkYvp-wd7y{vK3$XFbpRb1kTLZ39<i#)9Q-%%bntiJA>jO5oNfz1 z_1j}W@z1VseGRyY>;2*WhXZ~Rd;c5!?ZaK21>Ve=ewc-2pxnd@HE;KLS1+{5hy{4t=r9(Zj%FxxN@w zzJ1`~;25a_r=B2eYM3{*XC2SuL`fa=G)K$Z6yQ006H6n%aKihjQf_YZxk*Z%}i?LH0E^RqzZ ze?fS@BRt;?D*rL?1aLCkzXd#w>(_$fv-g9d%a6dh;BUc)fpV^u@54dSbv}4J_!#gg za0jUL{h;Kt3F^H`Q1yCVc>W4da&ZTkgI@zBm-m5ZgQvXA^ScI=oHW6H@Oj{3@HgOz z;G8p~O22<5DEeIis=r&H>hlIr?Y|qm3j92{6FmJ@&IdPv(qngn;?IZty|@1yP<(JT zsD8cW^E&<={sH-U~_}EqZnE(*oWA>i!$R)!^sBMc~}mxISG8c5&Sgs{9v# z%Kt;4-uo%2emLf}p6|Kf3a$r1mH$#ubo@-Xf9UJ{`fN~izYbKoR|WiHxPQp&y+6(X zMXzhYbHG=EXMp#BD(A>IxV)_cmvX%yRDQREo4~JuYr*-q`*lCKhU+(h=Yu~9c={cF ze;C}z{WpT^!C!*wz?Efv19B2Gu`*1m}Z? zzscpU8@!t9$AaSXmw}Soe*g~!KLqN%kAlkYU%|t`dqK7HPoV16{f~bCx`6w^x!k`A zRDRC{CFidI9|*n$JPN!MG(8GRF24qxa1l7? zt=|6ALA^H&E&*Q(o(6s#TnPRg)O*Lh&FQog6n&l!E(YHWo&kaK6g-^kGeOD2T2S=63VbAZ6LsSb2bY2$10Mwb z4ivv;@9=yd10K)i25>WY4XAd%0aX3J0IL4?f@<&lcRF1+gNJZ^B`CT)0X!OfHmG{M z5>z|h2kO0Vf#RnJyvy5h0jPFu0oCu9gQ~|9K(%il_%QG(pwit6J_>v-I1juFRJ*

4la3y#jDEV9VUT^m(DE@jOxB@)kecoSNK;<_E>i$20j{|=I zt^!xQ-^*!$D(6L@_~s*^%KLG+f6NEGpU(sP<{)$6BY6Jd4>I=U`W{g2>iMwC+qIys z_k$;ZH-nD^Uj~YfcY+6l9}ajo_)@Mv0qVWJkGOn|fO_vH5LV7^10Moz{b#51)nLyY z;!WUr-2d2Jj)&gue6a!i%0Y~Oz+s-R`?$B`Ento7&w`@E(oZ-JfNIyv!3E%*;7#DS zK=EnMC-Ds_?`hx|xaQN|Z*Tq#Jk9f8f^)fl@n?})uCM$Yd2>DQ^WG1a{0q8?`+o-> z0-pZ`*BcwbMOACLA5+fyFEWPWy6a24 z%k|U2XMv~xyXW`rFMI!d1U!Rup9fWsgTI3B0X`6XAox-6DDZRO@!+?>XOqt#K-KGM zUqcqSem?j!@b&kg@4;KXj?IVOU;PHff-~5)k zknYxd(MepN|KGHS>mT3e_y6mU=sfP1Ft@4PPT<|et+;Bv&S0`nPdLrb)edR z2bhEJ1I4fZ0gC?L0+)k70;N|Tap)YgH}gQHTLA6>PX}w1^I}kX<`0L>F?t{QfH~H$ z$AT&+2Nic*0X`1A;X!lEPy58-b4+gk07?%nIbx3K)vLj?xPBq1{`f3-8u(>!8Tcnq z>6g+8=YYFG$^UJj`u%g@4)CCd%rX6SX~2D;+I1^tvAEvlpy=@yQ1$o-D8BzS zD7k;|(R0k+oCv;{>(!vz^F{Db@UUa%n4LZXRCycHG7;tsCe{s0J0z8rX!{PcF z;3K$xIjH`+6I6RX7oL9~RK9-zPXZ4<*7;)|DE+Vw6y1lwmEcQ2)$g<55^xSeqxN)z zlCulJh2SNi`09F4@_#cZy1oK@DEKZ=_53&}e)}GHEcjD!9+*AcujhlJ(^=q=;054= z!OK9E(+{ft&k6WqP;~kGaQ#kD<$nki-R=qZe-5g=--F8U!N+;M9tp~BECH48<)G?U z1Ep7nK+$gmRK1=Gs$RE%D)%+uqrrEBdhg4i`tci}_~3h>%KaUv`W$||)9+EB$~_y@ z{XS6n><#!LQ2D}0M(CQ1XYip1k4^e$NZ^>gX-7Sp!)H0Q2KT%axz8t`@CC0xH1TnQe8@>GAG1+D@& zf~w~Y0bc;BUvCFxhu#hz0e%paz5R4}KKD_sXO0E+d^@OmT?1|bZw6Jr&x7LsAA+mF zIgfU}KNl3;H-M6hD?rh&7OwY#i@3fCRJnJ69|3;^s(;>?yWGAFynyS^fU3ta^X6n% zfH_zPC&9D8Z-Of4xcM%hIVgVG1xoMS1a1c321*~?2Z}BaKiTWK1kAZUAJp?2sD8Qu z>;rEBhroNm-C)ltUfzd6(czQe4)EKc>bde%f4&x!yk7*Wo>zgVgSUWc=Z8S?$HzdW z`z9#;{7X=Lxbn0)*;;TARK4y1w}W?s7l993;QiSHs^6~#RiFK!@_9Zez5gZf1>l1h zdbzIxRgX7-dhcJslfiF;lG8&MdH);-uHkwuD0#aH6koj@d<^&{up4~HVyF8WQ0=@9 z6#efA*Ixq9<@$)zyZcqaG}@OnOiVp@r>5nG(IPiI(@%{Tj@zoc@{bN^n z{@tMT={ivSumhCb?*$(V-Uf;e_XPYtsQUf_+yEYQhWjghA`t_~h`A0zI`(;r2`dgsr`$tgqIBJ#Ge-)^FM?pP*GI$#Jcj5YdpzO%!!Fk~S zg352+S)TqpP<*!o)ctEf)&Kf%|M{T!%sI!)J3L?) zsCI7)*LwrLB;b2N)%QO@$-$}TI=y#+eO%YUE5T2KD);0yb8KD0D5!dV6jb|v4@xgQ z>O6mc2Pir219kr?p!CtZ!Sli2f|8R}k9GSu1S-FmhwFa<#g~Vk@AoeP&*%C^Q2OhG zpz`}YsD4(F)n-a2p-*EfJ__ub&7;DgsYpZ5j)$AI?+T)V-a zKP%wBffw-Jqc{5ffq-uf_}>9HT;SzA7rdJEUj}!AD>u!_o&Y`_6n%dfaP5VDeOtia z2HdvU@81#d;EVkFnt<;Pc+}%O|2?4S@FB1Z{57}?oVUg0Vh6aG>wZvn=Xv0h!8d@? zYYVsf{WajBTwe-Go~{C=A4Wj&+v`Bl|1F@}@qO@M@Ua&=f3625ua5&&-Y!sf_NIW( z1|P-st)S|0Cn)*<7f|D+AA{0Er*4~*y#ee2C&349cl~`cC^>l_sQm8(#iyrT;{0_T zsCK^wlze^(lwQtuIRBgl>UsiP2)-%Y|2I&2^q8H_e`kS`!)rnD-@8H8?^mGS>)JKP z;@y{lqRZPs>BIMfveS2gCxBl7C67M^CAUXk>Uw4wsOxjU^T8{_{g;AQas4{*aB$9L zPOk@pmvOxWRQ;a5j$>b(h2`u+w`?Ryp|xql%jJMum-2R{djPksTaK69@0e3ye~bKL{#{ae9t@HL?5 zc>Lp?uXcf#aQ$ph`F;abIllsx-*H#De%=J?`BmUba1^`%d=036`UxnxKI>|y&vQV@ z!`-0j@q19|mS5xY`6N(u{5bd;@K2!X_39_MzWxR%y>a+%=ck?E7}rk)mEUhc(XG43 z_4?xjJ~iN*1AYaRKX_1WPBsVBpZa0LL9D$2#j9Tm4~Dt-EUy27BmTWJJbOgIKJc&N z!+?(iAIbfffc@a}!u|IL)LOuCj=3E3IN~2JVfyILVu0PG8zXt~Nt1SCluK$;d|Ka#7hx+py9OshP9X$JGDg9?SzdV$28EF=A zv^aKhPxM~PF~IRnj@Od*UqHIt))sPVe_O))J3#TuyEr~Y8tDbiLp<@D1RvIDX7=4#$%@{*#xb6ZH3ThwOy`uK+QPw$@O$&L$7( zU;X_r_dgDPlw%{uwOnIXvKMgd;n3eM((7*@h)K-8#QANY#*_=fGuavaJ(lY_$59*? zaY)|RgnTRk|2>@he+n1Jf+vON?~Mt-TRDy;T?2do$04Ly$+iAa+h!=&*m5m_x}N$!~6fvJ=A~YZ$s(&yQL@3 z;k=jQl{_CV-Ph?CO7CEHv*&QUh~sZ~b~E^kkp7S0+qvFE*?$1{aQ$=eA32`IaU$2t z!T;pQIhSAeea?RX>Ti_eBCa3B@nyT?YXXnuT7Nfzud*}$?;`+aBil`RvK7DQ{AJ*s z9RJL5H23Wf9OZa27xOu;vYYfJ_qK9=H}CxmhyHpv&fvTruKzjUeh`-;TgW^5+X$X- zXFh*+M>zj7X-?(*2jRVgz#nn_xN!a7;O9eH!P(*dBRO9Z@_st!&(*{5_r#E-HD!Z3bm$F6I6wz)QdrIey0dXL3Af4j@NL10$j`SRL(zDNrhhL`pw*b7|)l0M{~TD zd!GbPFQxq=*ZO-mcw;#K3b=yfn;gqHPT=?e$9<$52VVgG5BLd=uW{(_-@(s;PvQ7% zxc4;hW#Jq*$o@_TPo_?N97p&q^W)FsT7R2({`VX=bKV6$+V1*)e+!(?y=%c&a9qGU zdpLG;?@F%U2i^`Y=iWISzvX;_3&aw)gjSdt`~BAnB!sGo6q|n24BbZ9F9M7{E+MGxc_R-_4lAs8Gp_7T)T^0aQ}Ox z`A)e0NAQ^(L)^OvycL|_80L62*B=D;alD6f{jKBt@f_dfxQ6SmgWcr$5RP|P3ZI)B z;J*GI!Tk$4`Z@Hs&>{W*q>yes&j&a@%Jt*Hk(2^|Ih_9*+{V$%^D8;dBkgruKZ)aW zoVPgsi$j0+f-eQX!m*n3{|1lZ*w3+vLx1x_+P8Cl4#!uyJ_S4`+~?Hdov-3r^KB2{ z;Gg~7!@ZAiyoBS$91A!;&v66B>uWfFJa{9=iQM}jIKsWBaQ+0&^>+j34UX$Lws3tE_!fJTWjW_>3+IAkLcMf; z3&$zp`q2TmgCEmF{!ZX{J@4!9R~)b4{8I2V-QcfL%Ik2hS9ASn(yZk;l?p+XXfcNR%!utMN-}s_@d#l+$(Knu7dgqrR_QAI}Gx zt$d_5S{rPP4(4me$6JlwiShbnwc&|+-t4`$-Z$Rv&UXzp+Ubq4R&#HozuwLVCPw?l z8_m($aASPZG8%5Q$H`|&-l~&PeXpJOwdys$J2BQD&T6Cmd4GMluKP2Vx_LZrjE>g_ zTeWdY+t(N$$~RnF8y#%sJ2vjzm0!@RjnwxwTYDB1bsMSo4b?^)?U8n_A|~3rSR13p zW32|cPTf1qAn4#SrPP#{-3Med7InW`sT<;t*c!p6JF@g#V2`lARlPdhx^<4cr$M| zTjP1}WH)SDA873N-tOt@@m{L8`year>(2AJix;mQ9&YZd_pe^OIG>nMqsWzqOLA|8 zid>Q#+tqnE(xjIgI)e%NXr+kR9HCO90}a(}bezstXKkS9QT27=^@?t?HIT{Mg;a+3W?%V_hc9L+mC&tD^Q{(bU2-D~*alcoOWWBIbzcLdm_f51) zvH%Gu+T+cU#`R*JoT5h>?Y7$Mj6zaaNmZnbks8dDZD`ipqYK7!Nu`xM+8pg_kJknU zB#JFkxSY__xv3@RP)O<=>fD*5pgPkTSGw*h9yLeNQK&D8OD(D{V}hl7O@WQo8Wal8 zeCNrp&KEDf=Mr{w{mrs&jOIMYy-ZZ?3rJJ5PRnPs(Jg zrEkM~3;XK>wTWSR7Y6QW^ofy>%AUM2kVCd{IDHXCHLRsQOY)v{Ql#Z>dXMu)dvs!W zSZSeJYrHL`rz_;8dUM(WKj^AdQ&olu`>%^NI|$; zAE`Blr^(OSh>0)fWmO0!wRd82_jqHZo}ar0n$hK(cW%qiUbSp_j=PZsddfGM=fuU)%#5M=X>gtra{#nOmk7f;Bd3IHXQBdbrWc`I(jPB zvs84{`>@>Fq-=tVWCb={i{ft#H~P#n$eaadiOOIVuz72@Z$@SJk2Mho(;O0umMoBY zI7QZKNN~N}n3$Ue?NrH0=!zUgU&S?Y^lq$dE331fq?7Gbr}PJ-AobH~4(H9ixFfOx zMnD|6iPor$W~6v3OUgSCwl7+6v~c0_;n|@GhmmHoY{TU327>4P&=_@NfvAvd3__?b z!Tz-BG_76goaw0#P0f?tRU333o{sS5vO3*nv9d*_XC$WTS1Pe^im|rA$YQ^T>-!tB zk_DA$Q=*criuu)T_+1%_&INP&OXx529*s{!@6cP5?!^|KYV2kCuod&|o;RV;q%<^+%)ef3r_xtNx&L=|v4O4y^mCc}?Gm%~ov?!rgB#iUa;1 z_ug=G5Qc({Fq$R-8Y}clq!9^gzlMFdUN}WQHmK4v^qmn}oe(-)d{p0W^5lA#Y)91- zsq@UYXSgSSBr=lbQtnD2;35gM!HK3ABKOM+xc3?&3o$^XB(U^vMos6xN=!|W!~3>85*O!u_)V8-&-Hf zwlqg!AA5X7TRdPnc4=NK2;ps}Yit~8Gqj}Ov~ zjF3ZA5*~w*M(zxmsNLnT$v_O77#Av%GB7c0UP)0mYT=yF&V6{~y1%fN(xGO9U7u-0 zh}UB>F=d=s>x%{>dQb!PdcTaF>-&&Zcj`aYI20u{Lz~iI7}28(N1E&9;U}U&d5_2J zt+g6W91i(dVcc9~D?b^f8H$#!i=9~UvQQz2Q)3Y4M=G8mkVXMk4MxM9P0c6S`IsRU zsv&tpIGsZ^EY%oxVMrrw>t0Ew28zX)73n1eQsl1AMRrA2C}9yQ>s*#2AQI28stm=q?mJQ*=1&Wa6VV-tIt#nAh~8Tz1Y1ww=|<3wmwR z=;Fk(rpd?+GwiL)b%mA7kr4HXt7Y%<<|u@#O%PFNF_^RfBwm^Z%Ps}c>BB3LcMlEs z!_Y*fvaP5zKf8F_*3B2M-L-k^Zak`dgcuAi9rCVd6`Y7ecQJ8`Y@4jCd~u6{46F{J zuxUbmV%Xg_JX~UoflqIP&uL?1aX1*mWYvh=g02PD(;D#x-+f`do3Px1uK41DMcvtU zqNStb8KP=R!UnA63q@@#Fvv}hCC{K{t&#CfvJ8Q)N<6wgDmSa0uitU$hO+e#=XwMy z>Vks$frl#D8^4=?CYxH)<%L?y@w)oXiL06C<-0ik2fDU`tjCo_|P0O%YG#08|+NXo^kC!O%8FXAOzEtk0&LX z(G#;G4iF|3jKxx`rSn1syi7>fP5X!j5doKvA4d)nR~u%hcQ1(QzB-lRddJn;Oddz) zt7S`{<~d3XB5o)&P4K>L?!@%}SQABS0}#|*swn5MV(9b%tc+y{-;b1^;9(HH9;+cF8D8 z^UoA7D%e`YN*2j9-=tV2l;-}(AYRW{vWpt_NoIL*sDahQjB^q8`$8Oz2RzE=n2}_hX>r%dS#_fsf8)nD3EN z!>=Uf4<*#CdmHTuYFee-l6)Tx7?O&`g(BuxgS!}&JEfIJq)#Gk4B4u1L@T)$ifcm( zkENJfN9dkGn-w0s8-&n|RlyLlQr>z3SPbS{xe=Upr?8U@dlBw~Wny$qHW$sps9vhp zhl5S-(1q?T(wi`kvuKq!p-1c!3t1Eu65|pc86Gxjn0Hr}h~dT_bgd1LmgM6E$28lA za&ZnWsmuy*kx*hyfZr1Pu%<#lGmKN-F&9^!4bF+ZPt%fI8DWk5je*IMpN;q=<64qs z6-`bS3DvMubz+JcO9sd25t6S$T3rK#XNe%=q&3=O!|<>u*wM89X5WOgVvUdwp&ukS zXA0N4y%y_IX&|f;Ti{N3IZ9cxsoWw@2~SD)O!588S_t(BamExrfqt}tK4*v+dA~Xu zh$AhfgBfu+Y~mTRx;8Y1u^eqkuVkvNf+J%!=Eg-t@l;V&CgrI>$C$D@X|HL?)P#}7 zejAo}1%gYGoR#QIB_XRSD_2G`H!0W|B{*RPU2ktwA*-8R#IjMN8WEO9P13)3O&I3= z!6tTaXVfz$sD;GD@L6QgS&Sp>S{|VWl7+~KY95L}{$1Eq=jdA%i#41t^~|ecydo9j z0X;o{okl#Ymw2SeTYZGPs%hcTkQm;Ma#^;Q44w+97kw-sU`s1tQJ-cD(L=4hAY7zH z4deCwK7B2w_SVfn%8Ck$T1Qoa7D0`8Xd(n{#C&xH5~T2Vp=*+%DAUz_0aQ)QVtS

5>5D%cer(*J`-lcSMl7mC0Pv*w!Bmof{bPA9WbzZ4VrRwc1U$sCEs1SaH| zGT~M6(jt%Aj8u{|Eh_NYw`h2mM8}IBkdGB2!*O^yjdepd$8%pt0;|D68U~i8$)aYR z7}vrZGaV&G82oF(Ll7A=tRQ%Z=k(zkC}4uQ(;AQK!Z^qa8E-0JZ7hlQ*bu`zA_$6K zqDJuDf`HJK$W3%V>s=O!QBYs3G`bh7qKO0-IoX)19t$&h!E=gj3HEbgq~7`vCRyU% zuvf9*#zjUKFG8^cA5*HX12zO39aoIOWC%W>t4ai7M8H^*e)ZWOg%o{6TUfZN=hGOQ z7^XT=Wthuu<;#JNs(@n37ExRwlJT$beWr5INK;$~-TRn#uMvr=co;$6r7x`Os)U@W zx@PPY0PM(G!%+IIsnuNcCCw*10aMn)a442ise-G4Ap6lpEpfX@9_Na7H7~pE4ytWlCtkwwWf4Pm;}?k0WE?0f@|DTI z?pvrPUyxo};K>4I7g){!J(Kf0wS~RY(!D+pHArsSDdt;B|gInW_xrf)D3%EDBA%!ZC=4Cd6}1$oS!%bs#*xC z+;XAOsyRP*6mHBGL|i(^t3+?RE1<}@nuaD*w?rins^&vbSzLJ1lejo4r$U@zkk%gJ z9;RxX*<%MWFtc^X+_ky0q6)#hggFg`^I0wxr(udAPV$_@h$XR<7K|FaJ;C(16u0_1 zxDW0;1S=G&?j{af+3N3--!mC|sI$*w*isoL?x#(z5#jp|9wEJ^-Yd!1MqRMUf!lRaUx;1|+~*WrV!iqG{_i?~y=fIaOEyO=TdP<%o;7~7n6CaE0cbh8edFhOpM*CD}Wbl^^PV48}hsbP_n+l>_2O@oQ* zvN2VqTFL>iNRao$8rEZxI5DcJMJ3kjB?gc%L?)093K@C7V-{UuxP37K!JUynk|LY9 zvX-EJ%bCFhrhOnzR6ZfrF(u&bDl3dv#C6D3Il@;&(J`g<+6Wd8HVU(Dkk{*+B8Bjf zE!I(`efTC$4f7Yay&!c?Ra&vS{r$Y%jyl>L&osQXB}ir6rshUxgZp7<;L)toxMwP- z4c43Nd>A7HY9x!LTFf-WeIRBL50uu?RtXhu<2Et~>o4g$)>kPIR29(8wZO zXk=OQ7r_JtIGA>nzhXg0kz8HgXP%+fzcfd=k}KB2RTK@VO`^@h;j{=ukA|tVR)j2a z>){L670I5lK?nn!WD|elM|E8wi8w>6ekCqdJuxuRBAo?CEd0QG2oVZ^HKHP#GngAg zo9_)0kvfkTQQjAV|4vzVRF$Egmp45wUBNH)N?*IrBbwui!Cw3X~%Ry`v_hccZH+E=x-^g9Q1c$TYoTVS=3Cavy|Yem%-+Np@mHJo)oJ zBJMDD<<|Jv$ycWoy_Nzh#KKTm?*D4;Ma%GMIcnY~zc9jK%D&VI&U>s@Bueh?QXqUZ z@P*Cq_W5F8iqP4am^&MQ+K@K*9C1JxoGhsAd=D#`au-EYMWJ+TKy>MBtC!ZhY$Ot6 z^W0SpSFl3ddnV$=nnZcGHlODRiHs+6`w5ocq~)Rn#9g5ECU+mv9tH#%@; z;S83DULKs<)R3!s7Jw*-1=GgyT)Cqo0pfTfF8!fx9f7IPfMOIEde3{>bfJ%BY(;9( z$L9BmTI&B`8!B^5>YEtBDp(-#8onD#yTxE7k~8r;tZ0#RB3-SgF|-!Ms^mITb9dTi znzE3R2|ZjakF>>;8h*tX;&7j0Pq88%qcbY05`*V?S|O8j-jmz^bLsS3&(*iy&K$`Sewd(R8U{#pwevIZG{vSt-MW;hbnlq)+|V< zXkgTRLu`eD1w$4%v>2S(_8VQ?vE0xHTD&o{=}l}NWx9y(nTC}+hpuJrR^~pc1i)tl}O;Z7q?jOLf$w`eoXiX(MGXQa91lxF8H;&HvGzu(v>@ zulXLg;5uYGH*U+f5|qr_qqVX2P;-3h9n(CvmLr4M*-qPP8z5h}c|+=Wi*`tfnW1p` zS(NS6PS~Ah#xo|J+Sx9Y^d8$yr{Nr&Ym-!_Dkj?V^2=GaEw>A&9v7(J657KMEmc%; zZa&MOa;1MHVXwKu0q zT9q`^JM;+i8#pVhjd7}kD!cJb@tLv=MAcg5ia4-D*Jv?tQJdstc`ry8#ePWI8+GNg zgyN}aSG-ev2MZrYQ0yYDIGPwO-8Z6p?L(WCjhHTK=u)tkd;+(o9e?Jey9h*{A_)sB zVxXK(O`mG0NNAc134!g7{cdirrdz9x*94uYCfVzr$AcVyY@R?3Ozz#UxLG{Iewv+Sx7hESZLMf!-m<*cYi65K`-aw1z+nzV2C^67l441mUamZa-1cDz z9#6Lw!mV5+L2}boZ^fr|%M1BTq7|A+c(*j|TI{{$u|}}{c~3~VTOShXG2PKq#0z@5 zRf6&@ku6dfl@?Xr|1rBr^ZU=yt22dzsL}!F(MF8>5y){ivD(^kX}b*9A#XMKE=_yJ z-log65*KZe(qdHNJtiP0HQ8$uFj<_NgD@lPp~6$OTiUFm#VfWQpPrGjbR(>fW%%L~ zo4B*B{M~bv&7=}D+fOa6d%_NW*JLFdqrrfLiPhSS)0LVl&nJ^@SFJ-Y+Nd#!Y#g?e zihyFqsNHu>N&V_7Zf^~$2z5}t8?r3l^5IXG*r+)3SZU{Vm>%uCO))V5>kcUD(88pp z`_o>RUYwFO&#H5h+7j~aeB`n^!O%Gjuk#?dco%~V+{}r~iZNhZa~0j?KpNRK z8~tXC&}?@slYF@2=k~VF+lAgdb)ioYb#LFX?V^qAckRA-?beNpkX&YQs;}q`b=zO^ z29?pKZ!4W3FE%gTmf4w$6Xzp!eekN^hr1>iDaSCa z%0osuBqadIXB#+)(f!h?ttgMzlj)?=+Gwpq`>L1uL~FQs%}A0GuvDvfq{W1#D-Am$ zEA`ejbtJ8x*`5P-A7q+z%Cu^L2#Rn__BEQAcwL!=OsRap7Sni@LIz_)a<#%2ukah| zykyf^nSWS{9&;W@m$5NLf@qhEJELq+N>xMqp{i=RZklzU&St0VqoV1&5osNBi=;A= zmTpEpTz=n!{YCXWNabthi@QOe#TW50qFzdAO80_}n563?HQO zs9w}7_L{VcCRNhpz_f`=tP=*bUS_lpG#IJok%>&!Uq5i~HO|HnGqL3;45q@GLvvF? zHw05dJra9_7p2I;s~WDS^l^lkmay<{=z-)II_IU!Qr3!s!cvLzQkuvP$a9cPfFNPc~~W=+nA!nJSnfzy}(e@qz(*KJPDnv4+}ztpdqJ|s^XQz zbKGJ@G}cgc&>7Ahr*Z}mQ-%O3+D(Tf37}hx9Wd(0v}{5{B79o1AacX}3|SN|2OQ_~ zwPDr1YzyldwWCE92=fS9kzcvUOYVq8fySjAo$Ok`=*w}5y7N|C9GTcs_iW1yp=8_B zrW;JM_EE>QV@BRhaW%>L{e96bPC}40Owyp|ivgSqYg9@dm5lQV89T>psi1$ou**Im z7uFWAkdNhrBbn)Hi!&47)i zc`!@u^oTQd2*?vPy&Lhn#Yo-uRl(qtFUev8J=)#z z$UatsB-*D;*^`sO15BQ(*7mhQaW5R^(Nn2qzC+2@#I|PUSjC|%702Pz48+DpiI`B~ zBL1t~^j$+=8-W99>kSp9W*Vc;+7N!D(Q}oL?=~$9lfK3JZSMHzvO0`u zG7ba}-0~r+g*is0PYkfag^iymS~dX7{ZFdN6sX&Mn<1#TD2CxnSP7?{k#@sYNGEk{ zfnVF3627!z;%S?s5Nz9%;M}AzwHU>x(~F#NkK(>C?ND{$P77ExRwAugmqN4IjtQkK zOv@7qk`8n$_H<)PPYO(f+pL&JP_1G1977at?Di?I8(r5tF^$D{SD$0FVoou9V)?Uh zrLdoI8he?ASyn7xwQSik#0Q4&r*|QX0=sYzQv|j)SXxC_vHL>bW!JL$je&CK=Na4) zD6~PL5WV+ic+I*&`&v*##mim@-iz;Sm$`>sOKW7{km&AkYQmopN75ng8E!WH1GP9} zbcpl_ED@}+zB!r2>1h~^;8nUB7_Mne+JJ{D+xhB6#WNc}4zpE!DovLgO_wjr{IQHa zX2QN5>-KI5Qwryz+x7Cf`SNA@V1a#Hc6ELxFX723Y!FNbK3Z`rYGHSi`J$*TB!+=l zWK8AKt0|rJ{Qak!F@+62W_%jPA_|(%P?P8!&6vRWVfLrf`1CWr5cxB>+B4KDrb2S> zFQ?g_hhfs}Ni1+S6M4*=pYeSkOwIVX@J^;S6ZuhCNrMrKwif*$om2#%^udg5%Al4z z`x_$@BYD_iWqQmVz6>Q~-*U*b3~i<~@ey8k%*vc#pK%Q2pE_JNVM}_gJF{t1cJp&0 zXR|iU$tXh2u-Ux0%%o8NdALA|E3&>lOSgRxT}c^+s-vvN_mPN(Zc=bIShs-^BYNTmK`l<8@zP2Y( zNUC$+T{PGDIv!c*&!_H!V_zGe^*57l!A&}R)Mxp+v!;Exm@!F7bZw=hsa~U!oa~OF zXYm^330$AtbJL`}-*^D-yyGJRG?#b*Xx|qELVM%Pb zRrm>>BxD($#sX|+Gx&C~R#rev@I-q%eiz?ngKji(`N*!4H=SYcdQ>W0gbd7-cfMH3 zRLA`y!i{u>eV4Q<8uXO9{7A z+$dbz1S!>v_szFv2{Ou|{Otyn=yo^eA78YAK)NX+=^}3UE}s|HKX#ZBGT{%C_}XE` zZ{kpCx@R_5D8VusPGb-#&c>rzm@fxYgf5OYr@NQ97%T5%)1dO8jC^7U+du7lQi-B` zn)nV)Yb!Mmp(9Q5sdmlO!r9n$XcyDrgOuFaKl7!i`ZGrC`luh7iXZYYnQv4wzJ_2< zv)w~2ei9<@B7!n*i?nfS!jDmOW)d^^4BR&jsjBWYQH*2S9S(%eZ6%|a zarqj{WBC$YtniB!8ADa=(>ISx=UQuSKW7nqrOXV5{`dG*Vx6#-yFBp{p5(>=2vF+rTtN>Ba61L;zJeoQORAzt9DhEY&>nx0IxaPb|~B@<;e zoa*?_)aLs_eTd7dk0|7fS@k)mmNx!swT`V8R2~|<+fqbb#Q1G-S{lEU5?Dn;;Hx&Q z@wSbf;rJ8}>zJ-D9)#snMbeO&MTsq$&M;HO{8(`}(miZIP$tH|#Q$JuR>1l9fNYJV z8SN-;B-HBs(hH@>C2dwp5cWJ*)1|5u31|HpiK#GOiQVvTnPe$;7Guv-@2HE4ZwBAr zbA7OJ#zh8vIo}LtPoThzYZ#_fE5$*yBue|`V~De;j|V7WGq-gXA5GE_Po%KSU(M2; zXbRFQtx&nDZgVm6L9UNom&@2_++$$_{U8o8yH>tTV=ZZ2hG^ZHc6Qm+jmN3n^0AK1 zH6Gz_=^~>^G0#bOt!wjk77Y4w%52K_RHN}Tn{JY2F&@GWh#346`76B`l$-yyKwo^W z2F7lW0?OObH8dAWfdwj{?Qy^`^9ouyrRZQ$2zM2Q;W@j{HJ1|!m}YJ5jai;YWu1~t zJDXh1W!fa28CBPvSbaK^R4Q93V(OFGR#=7BS6=EUYboAAXre@FiZQkNr5>3@j%JXX zQr?wn{2#J}gRNIp-_AT^>t>U9uW8C;n*N}22b>Wrfe6!RpPLx>{{5*G( z6*+)1d?G$-fJ$Qd8$z*5H%65h0`i2$<1d>SR{$k-cpnU%CH8}v$nWZKNAW5^lePDt$O9lrfXR~B*0Ae@G+kb`> z9zZVlE0nY6aX@l*e_7Z7`7dRv1DC>Cs&ODfIm_#_%czIO!rG_MdpN_k2G4$ahNT^f zf%&j2EKf}FH2=Jvg>ic|t#31u8bozxGo~q)^m!`#%!0>}EOMnC$!&e$P2*3C-i05| zwB^U?69>^t?YvRMF^!X1u2I*X&0Z!9_h{(a)BA!6dVV;%da`Ys_=-SWPRZmGjHojF-Do{hJkuwLB1c(D4}*E` zKChA%>v{aK2oMnf&m%2-J)w#!We^lhkdn^VLvbFbPV;0ToMk-faxST#tRyz(wiG@b zE5_-TENPXfdo+PD9Yv>v?53?n8elLSG2g`t>5PU=`>xa7_H~IisX+IE5=BxGmbESP z9OoOdT7p}eAR*F?ylW~<+Z!yY=DbM7x4``CJ*ltlX|!zU9sj8+qgmtvqps4yL6NJ7 zJ%`bnPkhjW6yYJt{`ziy4Xw~ed|-&lfVjLyfl*&NBfDbj)M&6rC8hhTi%p6qdQi=N z_aN3T1mj^e$i%w0B5|SzZ3wAY@5e_TQI1+2TP0eNNQ4s;Fex1ERGiq#CnX~BW%ALN zll^~Z{p|66@LVBo|&J>WfSJglKItCMuaf$&O=f47FzlIW~^tJoB-5k~ixMG45 zVT9Z%h7}&n;vNNx-0xV9qyy4U3DdhpBV$+1y08W!z}i7SiLEp>HGh24?_qr*e|J$jUu zdFPLsg?ia^r#U*xp!k)D(hN^ZlH(|NUNpt0%;UPiwDeEQgb^h+0q|?md^SX%M-xF} z<6ZH&+7hQ`u3G}wY#d)GEhe1f19N499!j>ty}hWN_DqDtFuRs1#+8iL3$~omQ}S4g z=2fNmJ-g`9g$xQ>@wpNsRAg{xp;B{j==i2a79EYkOG7F`0oaU^=kcAVz9@J&rWxhq zR6LMbJ%A4HBwGKZ&cYgA|HX05>fqKeQR2E^I#hC*btacqGm4}oLgABmF^tSW1K-s; zO=}!x+P7gW8>OK;OY9d<#G0^rx_n|hGfI?Kjl>6KFE!qS*e$lQ#q|Ke6b8c_ht(|f z^z{NahSa7NwWZG|%}j50vwv{mqGD;N(k#?I2yN$Eqzw!7o3&R;-ZmR*@)-5!OQ_QP z8Gc1x8|1UN8iQ#M(Y~AoT@!46NjccMCS@@;G}+egctnZtrPakJ;i9jR+EvXWx@aa; z75|KGX50~LY~`6-rln6|Nu(`?39{RYN!2zArRu&;wWt{S-R(=rG^Vtl?g#=cRRcp5 zOR!|W_06cx?2GiJedXqWK~KvWsgFNuo!XHIAGRc!Lh)}jNMDr;5pkt%^wf8D_)6x~ zOQGRLxdA?L?Z4(-+HSwP*iRyL!*@9O2|;3FXf*vqeCfKf$FW46$bO2Q8R^1+Jv5Op zU!D2c{&KaGGE=y1WQ-j(_Ts#9n(CY$=3nE^RK)B=>~9)%jTKO<@f$w$ZCoZ}9PQH5 zZKawM7pbMsf!hvI{jQOy$$q;48-E8c!6P z+{m!0Uiu1yF=5yba_$ptzWv7YvT2i|rF;eZc3*SSwYk6RGL|ngjlDYGc-iK48+Ybs zbT8{(Hg`u|zh2U{wLRGA?^-u8*zVfZT%FI|zO8FVUEhmil41i6_v(DbvK41`EnD7o z#n^=`+hzH=>$hFJYwh}7=U;H? zj*Z;eyrX;lwyo#!nty4mYZp7pSLf??Y~Hnb=Y{#ki#Kf%-rsAhStQ@p7@xa!^VW?; zyOz_O_4-Cs_zmsVwwYon1CPe&IksgDr+>|*yDsQDyGW<1^9vPS8~I^HeTZgtes(W8 zZ?`X^bX~wYsrKr8)IX5YUbEsH#xeR<%9@3v`Mfpx@kqHEwL zx3Wv6xZ4fB>VV^`@9(h*66wGwvJ1&}>q~_W4ma{9k(2T9M)8H$%k;AX-T5UGq|=Y} zbmYRwjNdTB5n}tr_4E?skny`-Wtp?raX1=t) zoZnGn06s$nb~Y&7d>+Y3-oUE$@mixj(y+E_QM(3Hw6FZF<_pq?v|0D4Uyix{dghnI z2ZZ=(K9-AVRUe%ebp(F}GSvM|_40b%=V zp#~S&W{7osEDyckovj~gFtg2y!E7xrP4Hva`mRPTTN}KPMz*$(5Akc!8Cw*ZV@-Z~ zLccxIZZ0Z6p`s(ToG&BrgDwm^7V%55`aQp9#zIg#cCdf2)u$m2^`iGZzJ@9ys!8J+ z`Jm<0E@K81{{%xJ{CEbp*mOUqVgA*k-Em(P>jAawh7~Ds&1$QgPz z47=sm`;8I! zgd<~cK~43;%Io(Gx3eav!IENQmY%L2@7M*NK+D5z7l?kTmUGhQa~Cg0X!Wz9jq&E{ z#f!s_=0=k+ikW10DV4)YLX+`k>BDK9(-+rY5BAmcdxf+we%ss#txLKUN!*}c7c_yH zI3StihbsKzUB-w=l19O{_{V?z8`jh^I0jbryz+D4xppTpt1Gf>WuwY){FatX(u^`& zQ3yzems+U;dsDxQJdY_#VCiUi>%Y7)$mlQuYR6a z)1&MPMSHFrLNh(j&&v zV&(XTXHq0eP3QA-FfaS%?s^Z6=Nr$e=SY1iBN7W+DvucIXo^|8^2LjHq7OBoUc7j9 z-lOEZm4rD4wg;?X@j$b`+2t8rb&j5_2sc-RyDP5g?(XifthOpO8RZM%W7{jhW?UTo zo(8(sev!O~{>v$Y@)l8CqrM-9s%J^wlTM1H+)b}>-e`})GD?eTYmMv2kcV_7O;@_4 z3yVkP3w+)BetRLE4O`Ky!PMaqG#wkM9WRicOW?e(6eJ+`mZl}h+DOhfAvc@MO` z#^=D$Ol(Ni$l_Y5C=)9d-L1vNVpx72!+Ucb1J_k6RZqI0q`G=ntqj^rj)6YsT`=dW zm6Er>B!i}bl-))?-!#@(%^Cdw1Ff+>VmEldbpkQbHG|__%a`dY{$%5t#%R}7^Y>A} z{3ZGPUTpq&lW*P3zouu&+#c1Tv@~~3>gulArpt!<*Dt@ecg6laJq2TnuECC#*dLq4 z2RGaNJ^)JBEYbZMDA}QDE!3iFVTGufsMr0ecW}K+gBurJe=6%)sfh`u{DMvcdB5f7 z<}}Idpk7cd4AOQhNSdF!#y1K}0i%UC@7$K3y=vL=Q0*CCJ8y>9Hnv)(2^u(T_TvrW z1buek#%z;3IJscM3)squHzJh=FHf+e+657Zj_;Kf=_>jh8L>~CV7tVYSOE6*v)-tN ziX}&W&Vil`?gF-!*6?4j&r+yrwbU0rh~_tOvxvq(0S!}Q7@v2l<@+jKY3|^x_{Q^& zRQA=%PQy2?mul9-%7BgGg@b5xEi7Op=d^86N0=i*?U+^I3pD89md5kwGc%eB zONXlA0_rC+P}iaVs^zLp?j6Ohz{OYHf=jL}X|$PACo~Z_qM*b26ob4mGzs6)(T@no zXXl#Apdy_C=sb4+z#i4kownN=`7S1G*VVCCql26 zwk%V*T#4>{r%yEVc}$#wqPO@#2<)7h_Vz@YW59(8Q(4eDjwRGZkh9mFd=ov(2-1bb zvNOflL+L{=GPK5Ea3za9#Xm~ELE#obcUE}~>bJTMh~P<7p$7_&vPRJiZP~MtjxLKm zsp{nTn7#aZursOcH*fSO4IpCb!^iS@m@Eh!z;CAV?E*PXd@8T8w^^-UkxKlChKV0Y zp)e@l#^cuax4Y+tZV&!ju+yp%{fWbmS7uU$?-#zX!mE6IoCr`*NHkI-2iYEY*17|h z(~uUoY3J1UYeX9LK@>e|F3QjlEo`ZcCB2g<6Z*)D4pLYQv_p+T zNlBuk+=g6X%b?!PbP&yrihg}5d|}PKV(XStJLrWJrVSO1?GF)KM$TbBC!c0iAKSpI z{%7=X)G$ugl(u%Hk3>hoyo?0y)dkAb{?`5X3w7<(Iuq80?1+W-H*_q+YXh0}jQ z&4>B+r3wo%py;FX5d*u%5haovi-mr+9+9!fDYXHNINlkBE{zsJW=Sk$9v3~Es}J+F zC^o*GCUYJ6*15#L$${}F-x4R#4Onw`rDcceME%j;DPrO-ma)hBTDz7pRGMyF6o!Y$ zORxZ#AsegXOrR5NXlLp$D^j9fEPfHg0QKyyr%M^5UUU{&BHMzj^CMB(u!mn4vaRJ; zF3Pr`S}~j1mhhueok^}(G?P~XfKh7Spv5_$`|v=qQADre3B0}1`U_As-=Ey7dDzUj+BB?}q#JPj>bZVaCW zXrtHD3&D~N5ho!Ghnj$4HR{cKDj^3S4@JvJU&nE{#{_XNnPQi5?g-`S6FL|}tyZeU z?yP~8O6j+|^b>3>664n^Ldd~}y2eJ)tFa*xo#pB@S^;xBaAN!`NHQj3Jr6G+hO9m# zhQJAtz4+B+3q&a5;`%uDec8N0-sDS}M3wr(cqb4M-9(RvAH3CY+z0B6-k3>_ffm|V zlKE0aJUAP|7@|wj)yX!5C=k{M7M04=xI<|XAo=sOjSwHZj9M}|)_%Ig2dI_&>H5Uv zvF|;2!b}+cb{BM~5l@=eF5 z_=zbr#=8^IP+?{2`U)SK)nYIj*u$k;k_1I=3|_F*nZ{$bd_%Nxadg^P&xuOGBHvJdbqSQsmOevaP;nk`NNlL6-x%D0noxCjk>LXo;$l^HgT`r3&nSJYEsFIA9 zib#5edd9NMKq77K?-kB&iDeIPoDyk3eeif<5SON4EIK9xf_O1|XBGz5#$Xu7NzXWU z3=+kKZ6LLob7BNUcdcun3hSr_F;F|+oJa7GukmgRL1dGi2^&w!0UeyMP!1oW zSCnUUh!5MR{i{K8&D;8iwX{c9zfXq>U>`X;S%G6Mu7c|rRM|4C5HG-YV+lfYq$6^@ zplg9u1BKmR=k+$9v?ch@A{<5n1bOgR7j(s#!-7TPOcwbPDe!Q**gc3clRzF|*N@Fq zRAM&6;JC!tm1!dJfJmY6FSJTOm^Sky5j0j{y&@j#cU($TH7Y(tF@<+Y7qt#PiYYsb zXPDWn78p$c99=eVT*_AoV`kaxLeE1u7SK=8YOf^@}#euAs)~s6Uz|0dpIq&MxG%qw9^O6hNb{Zf`1`EpNf+hMReq z@tns9`nMmTF0d1pqi<$YcNU~zQp6+1{2HrOsSiE5rQ|7? z9oHPWoL*^|;lQiu1*8>~O-oR%sajAmYz2{Rblp_E>4vV0pO7AI;E8TYK3^jY3_S2@ z21IM%^dT}0KXe0SRHCjc66_s6PlJ`FE=bv4)z?De$yubUt3w)wx)^lPzf|c?#S-F6 zjWL``cPXP&8vJvgaHHKpV{ul_PjZs{akMQ+;5{T%?0yAr@sB+Z_@>0~s3lt0Vds zDo`R%$%J(ZGw+Wy_TvmirkAoPoIHK;M@n1GfqS`N=EeA?;=4}iB2%JXyT}=?W6Jy% z#itKNR-OBpwx=RN@Kj0`gSkN|YNz%$y{5$AY!vm zI0@6LcdI2LQWhFqJy);Mu0%@~>pP+~W8lA&t0g#sr^uSAI+hK zO-bS6o@s>!{?uNkz)RU1w}*I|h(KTU7BuwnL8_Q3VW^{qMO_@3>Oj?S5lew#N`nOj zZ(0oY-M)nyMYU2=CKycARvPg-SBP<J3Ad%#M} z69B)G{iJZB6S^| zL)Qag$RlPbqIPB>hz8ioNt2c^B3lB#_$s=vQ;hti;cRh*Z8u{C0{fI>n<0u*vSc0V zq&y77e!vomLNX|XIUF&M z*8;lIx0qTV3qu_uiHz<_)KL18e~DJdfZ9S^A7fRt95s{zESr9dG^sLSI?tS4XoZ@R z4>QHb?Bq|iliyt;Mk{47(iE%1bJh-SC?+p5qW}3%0p%*`r?q~i_C&oM3K2C@A><2z zn*(enpsF?;vodI)iq}u_XsMdYILN06 z3)#fF$8gry3$YmFyggAiMyB(F-CzW7Y?8E>#T7%n7OHz& zw9O1-?At}w1bV+=D+Fy(VQd=NeF8RSt=P~RCP%`;cZ2LU0j@eFnWw#R-Fm4 z7+h+^liEbyiuo$3uciB=6B`1K?Y6!qUM}m_&ks}VoJADmO2CRAFhI!zvNh+TSL?V9~su*66-XOxuS-SifK$b*=iUMMa z3KHSvdSArZ0XRlfN5k4wcYJI;$CIc|j9mWHa6z~=cqy@4bemjb7u5*Xv6&|OFy~?R z)n?n0_o!J(lXcr>!)ILa9GPL#v^{i0A1M|lX=Zq#7_A1q7NT{VSvWi%17nR;pagDn zy>FE@$G_~|Ys&&Mp%u^a0m()(x ze#So@%EuXsJ1P))v@c$PM+M5gY2I>at_WfmOG5Bz_wB6g>=J2;m8qhR)+u{@I*y!C zF`bKhrC!BL4U|aY zuhCuViM>=vsY?s_J7sHXU?kN5a#zf2Y_Eb2YBELoq_MeN7PC@gG3}!=Svr+<&^!k} z_9E|GOAdL+*s{jFDpjXq!%cSZOHjS$=~w5pf)3t7*Z7LNMGR8n8fq178#Ig7qNYs! zRT^7$1*f4d%F@`z)tfS~y)8~t91(sTNv=4Q2>Q_r#Ejv>+IiV^NJ7}~iF=VgaDuaL zBA9yz&JpOXS|5Wj>13h z{c?>oaP%=7D`%7<1V}=QNzI7fXW7IKFaWl*oH^eU(;BZB!G$e6sEoB_21~>k&)ViGK0nlCb0;f*7}4mr*C{Pb{xarh z-1YV}nn3rIBGk?ZaeX~6l~(fG5Ma8F@}ZMfeKAt9)#R*fEUAWSM4~i{6ke1QWwlp- zbQ*d!%syXe12PRuML;xkxi@X!O{ZL=%SjWIyQB{0#y4bVNXZ!4{Y!et76If|^Jtyx+LX9e=Q;VPU)3sigEq$7jwmR%1E zSxtB21bCR#6j@kGZq!LpQ)IRx(&YiN_#wn2s$O%!F>boT_&7w9iXgP6z)F$K3TOHL zF$E;C4?!5|0)DzggGA0!%N21=Lt8p0E{{sil*?JzRj-h#&v8sQMQGYESRq&#ZV0RG zv0gZV7UGVi!>kd^h?P;anGba+3a%Kiv^*d12}X}v(O0%!kUj`s4h-IQ5|9u?@6di7 zak~^RhDqFlZg&CGvXEriRa#{|tQPsTI}8hTtO^0OOm*`WJg~2M%NE@)Dd;jcmks0w zp9fg0*EYmvDr_o4Z(^UOkSHwrigZY6#dNAdn%*ssXH6?QV>8sASvE@iQFYi-Vf z`HPu}RH#N4;wNi3z7r!G-@P?9(c3%BFx>+hDdYyBjgNeg<$dnHfO=c(PdO=fRi)VA zBO#MV5U1s$vS`X7wz-EOT_(ZIF))^^Y8n$iJ|HCdEh__~ECat;+=Vn|Oe(>>Tv6S{ zO(D=Yc0eB|KAob6GjJR zy>))!w_Gswt7#L225(Z7#KUY)oRd5*eA5aSBX7ZPUC4EE9J6CJf|r+7JI;x^kP9qImf@GprM*x+Imudp$Xc_==Z z*Q<}6sPps{y0DXVO89!#&%x38S=IeY5&&_lijb)y`v8ntuaduBUDnvMwx1Oa?RHOD z1BQDs(2zz9CEKRu$~dPQxSK~KX`|1|V}bGzSJD;y>*NWQV*WDjnkWv7x3s^;hgQm5YxY0tv$S{Dm&6Az zHjY+pxwx+xcTXVO*tv~9iv*iWa<#uiJuh<0lu*2RP?z&#?~2mL+)@|IiAg~mm0@0X zu{#?UxS!~Lb*PC_k0CtsmvAv`ZGkJ1a$iQ*MOq`wQFeOy)0Lf^m(-LnhU{R~&e*=y zrU>numN9*fE+Ddwi9u_s{Y7=0qEnj>MI~{z_T4lI9g#LvIMbS+ABO6I->MrjM0e|R z$_x81qSfa!r{*U?7A(bdG|(<_*xG$t+h$oGWl?L=1108UwFJhQz<>8FoTSQ_>madH zt1FCE8qCa~C#p(9R4hm0A`4*sg9veEMTXB%MXzOZSW{|aw+d56(o`!}4Lo}T%&9j= zCC=#>EsKt)vm?L35(|jN^hGZked?~h(JyvS+$~Bs`j>4gH%j~tSW9L-qNTpq;pynt;ttUC7PeX1l&yp90(M z-=(z{`e(EtQS|8xXZ8Ju@QV$;JyD)Q{t@v|Z3H?`8@&9Y@ z+;*%wk~F-o=P3%!g+ao&u{3i*ds=b>c9(<=a$(=X2Fk82g9}v^v~7mFd4_(#evXJ@hhz`fn}rRAfW28vn*(~ND60U`(0c47`zak} zj&6bg=fh|;XUAKT#%x_KdgB#T(V0Y0%C-;~zp6kdg2P>Ck4crCJtOB&+Y0pkX1m*N zYc*O!Lm1dY&E$xA^ggaMA$qQlkBd?e@A_QzaBs)|M#yCv|LE?}L)b*(0Nrya^V?rp?3afARbu*cOC1^kl6caYC4QlmJjfx(x1PqhqORvH)iNg5&e zo;IxMX&uxZnA@aIb0f%QD;( zqfG-JWbb4>ososYZn0&g)|~Ao9Sk6zcbF87?Ki#M)Yj zj`_KxJ)#x(+?58 zWKE{Nz?k$aomlUwpV#ffXeVue)i>L$>UY$}#2EAEO9}F7bIu{YSE-oW*EZh{UXV5< z1&Y-n?OEjsi7xfX8jHc8Euqoji7@KgX-0pb;>7Cr-|<;Nd!U9I5wf2%cXRKHXD5F_ z=;|6GBrjxv6L?lk_{Qm0qkp{(gVVLqmhgO_n4ULwgzl%mrt4-p5Vcj*0>eiY6U{?; zLTojIpzKz`6j(upB^tCb%JX|OeWA$)b6CmFTs8^asfBPHZAxPz}HZ`^h zE|SWPSZUh|*A*yHz0|DwVm~nIr~S_!dc*S&1|wlVeI(;A7a|lWY4(|X;1gNlwOFu} zUsNvh`>md?s4O}vRKW#O18#k=0l7Nur^9|EMvY6+@%5F}q`x?K z{fG8htUYDFqRUgu(ZR=gIBNl?eGCGH<8!*~aE3HVvLDDt76^w59%hX%o(Rr#-`&gr|-tUm$0>QTBYfU~mgqa*ksn=G_p37#?FGky5 z471E%gMGE0WC26b>So|Fu1!EcfW3s;^>H;O3@Nr{Sz_D$X)tDU(8gr@)6RHz{RY(= zYt*M5qU{Y$?Z)sp(Y-Uj-sbyFM$|fu!cM1frTXj`Xp+nAaIRHA`$|Sl#O9cy4AG1s zejH}B68Qfnbd!S{39j`6SA;Tujw?c7mpT3(KV)`M5-^o4%01j4mHeXZ@yGFNix$DW zi(0qgSIqBXtx(RuBZqhRHF-tr;BK$&&C`Vd=2`PO#m<^8QSCUx=J((L%o_HiI{$qj z#M%3c#NFRui#mZbrCr_h-^cYnmp$~4%==a7w94E_8Hj(f<>(P81@#qaiXIj;GxyY& zo(|=R5?egprj?CKUD;>dy~R#%WSyl5N?KT}pefo*<`T{S>gphTCFKHV?)lF|J;Sm> zYgVP3>CrqoHlp!SH8V?I-{c$Mh3KaDz>2vMnZ>x*b5h5DA0sC)ShFC#CoN+tlsW4j zvhvO;0(}tqe5~=J_qTKBkTk)Vw&s+*SRI7MxuIbF`~bP~{OC>}oWN3o;FQs`nm+M0 z9KQYH6XB@BfTS7rYBiCUtV&6Qep=8qS{#79BOaCtuYbodqYm!$SZa!RGt?4E43LC! za;B;=TW}jJ1BPD^4fgJ~5u^&Vx<}?KEEz0-sp>LnfnB5TY&CtA>0J{1S`4e!O|G`5 zkD_`{j0G&9%xfI6j28wN?DS|o<;`w@c__fq|F!|rDazK{K+ZrK?-rK)N9dRpwPym5Shem1iRs|T z{)?oKTd4PrmtI93@Y*mPgb2iBcA}ePQ(b0!?T`@hDB|dSaJJ$juMY(VZ&HY&MMq8# zNfaldWQHfQPYiR@x7=TaO*dDttARQEBF=E~%uwj=SAa8f;B>HWxIJGUKT|Y|reb$l zR#Xu-!dF2PR@}xVjvY#-OJfcudQQKj3Wi8(aC`!A&;>!x*3lqr-Dto2v5F zE#K3X7URwKf(vBLAMGd`$w91$GAwFX_RCXnksM<=#dW^NG<3zavrl7vi@?r>c*qrv zR;Kl_hcu{94mr$IP68#kutABARj<$v5W19WohsHO;qG7HsZd!41~9S~mD0@d``>)I z|KQ2rD2n^!`-A)6-N4;1GXJ;R}b?0ubaGG*epJ^gwbN4y=d-oeX(= zOQX|t5i~ljOiRT)xZCdCtJSYh{=R;3cJzMl*S#bEd33n`>FDe|cNP44_|o#R`ltb{ z3nCJ7s{2dUw)P-S7!Jx)X@&}zVO>+Rks5Az#b+!slc`LGmBo|OH!8^or%fHEPA`LO zE*ZOhu=6+uRSqJZoN4})^zpHfIlA$K&x{m>A>&#Q5`cG7TpPJLm(;QSd0KgNox*6a z*G7ZxaaOR%j6*HFC2`sbi(+=~9iEgQZ}~2zYYp&nUKL`jcQFwfk|~N!oD7eV)~{E; zNd`Y5vf$|W1y?(*xJd3T_3>BFUgEf!Jw1Iteyd=}{xuNFK{e5yfGiSEhx6@EXrrIs z{!gxEV$<2=7qI!EdMl{|PJyuQw?8L|rb-Tp?xBMiH`xI6f{X{bU(CUgc4JKTd3`i< z5dwjcwN7!&c2|92#2O6^P_~E<tye`c)$3Js@8MG;X<>tkv7Tb!j@(XCF?Hp zp)kVzrVO=~OR;Nkmd=H+QObCe5_&s3CPjJW@F->aqG5gDC)}+3eHo2$*!+E$`e@1s zNgZTw#nhZL$4zR8dL3J>FWBr4`;zS(53}kOP~TzqcFc$B#p1ge5`X!I@?4=fDrNsd zVl?M>6yzmdzJPLrnzm`lqB;Cj=mRsn=K&Q6ENGD=fzJs^6l&FM5(O>kUL7@+%rE0c z5^5zMK!4NaTDM=cJxITLEN~-wwB|PAV(<&I`~lxGOY6QBM9()F>4n7p2J{(S4t@UK zAx?4Kp6qCK8B~IoI|m#*M1?zRmU!plO|j7dbNUuRjz*(E$c$RI680QJlz0@TA?>U5 z^jmx;6Ep?@yUy|S(9uVrpwh>Njj)lU{S+=?CkoX9vCjO`-qG3F>+7dC?tJ!H*T9Bl z2op&g5{8$S9ETvhNus%_#?oG}uq8?uy1%$lykTdN1n#AicEI`)%K8jWL9eH$RNg>% zmB)gxKuKc0DzzHdK?>|#SuJ6AET;Tw$4Qn=wQm5DmbrQfMPT|eT$4-zDXc&mp}N|4 zg=|4yyo+~&tqcL00pL+C*x@&Y(YY5Sa@T7J zF^G|Mu4&Z?K_1H-Py5WT)efdEna|(x-+lpKyH&Wb7AhD&)C_E2b-0(^ zS*`TW1!O}v+uzZ~94ne$#pS@|2E$P2psgn@835wq6Ray>{Hl*DwZ|!vTuZdeoiw10hsRkhY#K+lQ6@v!QmYklE}aV z(CawnggkHcK=CrWvuoQWk=pmVE6Rb>!^!sF{^SPzIhrHy!Q>^mo`X)I%C;;MmN!VK z_jTi?bKvCE>I~g9_PcMqn)|M%1NaI@2PV+qp6#FJXp!v2D3215lTCrS61ycA(#)|O zC@R6GLh6_eKq&WBTRYfIg{noGlqC}fV9*$(+}6RnYP%H|*G8oAbf7M&zN5bFLxBc@ z%?GeRYcTOa)cgo(ci~&A;p67UVU#J zu`y(Ebe1yR?~c!LEa?vK-R6)t2KOkn&6=~=&6dhAdngYmz|UouHUq>(C57>lL~F?C z1W^`_o7mSxBgGz@O2Ik>2)7{YHt_{9{~T&}`PV)mAuQZ~dSGQi=&H#Tl7i;y}MUTe{G+QxaL z-BUE~r%lRodti=JjEt4aaRja^FH!u=G><{auQ0vF3Wl&K&S#HHXfKFYYzWVxWYs7b ze#n3@ySO?_Sph%re^7^jB}ped2B=CeNW+4goj@c#A|bcQ{Lb zW2gPp8Wy}Gt`x*e@ag^|n8xrBhbgm6eJ5BPDbt84 zbZ^Co(5B3ZThn(@;-R>l%!RsN1rJXN)bBE+cg?3S3Wd7L8wFEvkfPq-7*lnXj+k!t zA;@bO_+^J1$9$=e#c*yyAzcfB9kLe;C)n=cO7y{0gILn*l&`Np%b4A^vf8-?^#;1? zTUxw%IllIs0O1^?x*DeXf7)}`tv3CiPc?)d*KBRe8L_cv@Vr?>yH}tsrMPDnZJVve zoL7xe!Q{2b`xe6Da?0_5Gmoc6{Du__(}N@An+|7Aoty%|%4^y6{N?AxhN&zV_-1AQqA%Xq(dR-8%SEl> z7^%X>%xicb^7*pnFB~v-mseqcZx+W%@Xx}^6^C1FGF!|K`c7|D=%>vDwBl~ZUpT|I z&Fw5+&}8t+%{St*9So$k5sY>5I5dl+TyYAun~XKJyDNOt@aI*iJh=%n_`;#J ziCsj_!9OH+DK#XH4qE6$5R?GCW~)yv>&d#dW;f8S#O#$CH|{L%(!%)Jy`{q&E*c?N zM3lUZqzhvvU7Se*OG&LymmIiTSj_96A7^8cKeT9l{id42dv zq4o{dZSG9SmP@i4Y!d?f&fU$0&d=o(HIDOG&qAMFMY*7Nzj)Ole=IWE9{3+Uk97CP zYW%Spk+ryeQqE^~JK4rTxfIX_2aiF9pbemJS52p{<%O(5`GZdaD^7uM@*8S2I1kU( z*Dm!o{?^{0qkIJ^+ZPZhgu)N)*O8~uxqNVBdCjE={mxC=pqIM*(GHMaC~w#AqjM?H zIUtP{_l2&s9#mz(O-wEdXcq|Z8v=hYO$DJeY zB0=j)>F=TCU}=Q=Pd|{XrNxe6K1aQH0h z+}-~wVWJ92_GwNBZ=xJ-59&p$FT4jyil<;J{POowCg(^ppUeEb6Rbl7>DQFus?yM{&eN*TOtQ4;o|9VNRW|iEa zZnE5rcoq%HFwGMJFLgPO0&NOGkqtK=${oDSLe{->o8#OX8B6Yn0G+Y;dg1w(|9;`G zcV>kMnD&@e+hDbD*%lHW%QsaQOsD6HDCS0QpR5(Jz+zNZi-!74p@%Kha=&{`Y}FZGq%*VhhFLvMXKb=JiAo9a57(PHZw zGJz57VnOwMG&}8$h6S7TufSbI*{jzk_Sy>_8{NQATMd(!yi+!bf^!I0#3%TmN&{)_ zAcUbtZZ*^l`ljhUgEGQTax8eC49%C{Kesu z(>KproaE{BIFiW42Qt*y?Iqb15nFPFGq0mRM#tWhza5vOGypy$zUt6bxa)e^8OkED z?CTe#o~dmdDv1#Oy~8!D;l=9binoQX8M5ZfpS!vD_RTR*(?ccsjg;-pJazXyJ$4P# z^1DSv)A?WHxgLCNS^Sil)b3~@ldU{%Nk=>`-)S+}iKj1Io(fTuG3`a@@?UluOusSW z)AzRZ39#fHV)qw_6=rLlXVEWgn#c~x#!zJcV>5snKB8#D7Lw1N!k-l;eFm3_t&J>? zN*&RrK^803$Wut33a|p;L-}&pWW){J&jH;dP(M6gP+*H$c4PgL;K*GGGAV2Z0Rd7_ z6m;8@j@1b|m;e^Rb$PN9WheTnH@o8d-Cw=Eoc&I7NirYXw|7^pxoCrT3xZt3dT{=M0W+V?KMzwYKLfW zgryH>sF}4fwjK4M-I6$F;14~ZpH*JtFep?Jhr=ixjVvxWk=cX@lJ%>vXD-La0qO-+ zHlu94&skHXE1z9mY=C$jehzjCT(hYDg6gwc`*E}j5_d?QVRq%a66se>$c-L2E1`kU zy0KM3NRqS;9Ll=C#HkmmLE0AE{@Xr*?Sng8qZ}dil~VJ|e&LN;&(qYlwXj_Q-23PM z{3EqWOBLyr_b#gv_HOQ&Sw_X*h{{cSXr()6Mfr|e(QI9^O%kT@l*P6oW(#d+4(>#^ z8njN-PNr$gH~80cyC2Av!3IkA4VS8-0ZI2zF8*2-xxCUz#ZPC}}E5T3U?$t>qAl$+TgTmPm6WWSDHEeRRpla6&?nU-<0J zZ`W@~F-fu(-*m9@=`&^Jpu*7l?6=p4*HH$rbw~+Ow(@=}&sW+|nz`m4N=m9j125)+ zj5WvArS34VU@UNaI1Lfql=yL4(^9jHwywn>U{cqF`1mgy_QM(wfQwVP_u4gg#Hx#2 zm*&odSv*y_G4aitwdi8|q%{X*M3YpejTll0M<%Cb^jLT94kIOEOMEhm#@*bDbo}{mz4G!{ z%ck0FkCE%5tSd-ulJTG6>}gbMN(hX@x6tXrW-Tp?70zqhFQZ3C;l~kLn?2(AVX0QRGA zfct~Xz?;DyaBpzpah`8K@FeO#7(9gZ^WUE&YU1VKJHY$FC+Ndpfc#6=oZ#hs0i?;v zO9B57@aWmzuM5EUs2s2eZUx^3?sH<2TtK9D3dDf!h&NpdE5)SM*wHFzob zC|Ef;NnS_3BjzRvS(6#_ydM{V>i6FBlVm^eb)e|!}Y&|bHNWT@bW(OLC4#{L&$e8sCIk_yc7HiDEgK@ zlq9bQ+dz%;TJTKD`4p&e{^98y;BN2%(qCGbBvZkzMM-iV^xh0HzQ_IFEoRI}|A!^e z3_SfT+5&dd$aBG+=g@xgAMg?S!1YJZOOnUImp_&yU*q`)KF-*3-LniDgEuuL$u!ch zS`KpkB>3-K4>j{F*WYbPk_D7^^ok_8h3ikQ^7g&;f+XoA{lyEDl7!>_J5z;RY*H?iwCAkh1fBpj0 zxX$SI{HK97zTiaC&jJ6Ee9OUC(a!f=oFomTPg#>BlfiRA@nau21AG9S4t^ihc)WhC zw|{@|Fs^5Vdaejg1+NSDpAP9i0%wsv@e?j5^TBs=-4yVXpq}3ZN>2U?d@K0hp!jgV zOPp?#!8dW;4NC5>0M*Y8p!nx=pvrv&RDZt?GUUlWfoFizFLk-N9Gu7XPVmj(UY8+D z;M+k|Pcj#LBX|y|`zt_-NY;W!fd2u$8a(KeN%98p5Kww!8mRp9L5=6RpxSW(Xzd2o z-YY=qn>#`E@AKjQmqPk?0uF*2uU~`j04H4T?K>DOa6KKI0)7~r30?|nydDneKL%Cr z>(@EG4h9e9`fyO~KNZydg`nDdKB)T2;rbJx_-_NKetrhj^Y?(F_m@EN!#6?o^Lyay zz+Ir)^$Sq<59;-D4+mA>G*Iau05#61fui^Mpy<~Is=muX)pLEgz5^_9y$#g!UjZc# z-vY%C{|Ku5AA%Z>pMxsr)qP&hTR_!U0QKB4pq`rrs{WHf(c!}Zn?dF80X6RHL55?;+ua1)&2?nUjJJ`wPy;b`?J6U!7~D`3ita!J$DnR_S^?bjvfNVm)`?b z-`-dF^*h1ixLyFhAM69w{^vop|7!t%0IIz|2lae%rT6FUpxQGPRJ|vGqSq2o?QI2B z&RS6Ut^?KX%>kbQmG9f&q2K_ha`wK;`QSiMd~_IiGS~>t1TO+Lo?F0Uz(+xqKMbm! zzXLU{ufN*IZGTYwbQpLDI1SYO4}&wnkAmX64WQa_D|iz445;?~7pQ(ryvFs}!QkFp z&jpqKL2w`NW8u04s=U?UWUv=}AGjU74;%pZ0k6H*>2(u$G}qg}SA#zQH7*0-@!-Mh zy`ATRui<(C5+W$1T5d125 zF?hfRYzue;sP_CG6kojRdTa^!X7IJ(M?le`8B{qJfEtfWLACD-pxXO=P~$QHD&NbX z+PU|qoDWX~r*VA&sBydlTmbF>PXzxHRDJKe!N+qBsD3R1j|G>54d6!bz2IMiuL6Gu zsvZ9Wz5$$cqua$}L0vBf-vu^-qW|Tf%6%L>68!6cKLh10zM6j{%^j;`FsJWd=*f9b1$g+w}GnfDez6;S3%YDJ+J`o2B(6r zz18y{3%;J~`QX9eVo>xcgX;gMK(*@ua9{8dP|tr6d>i;PQ1!g}HkYIQ!MAdK2B>nI z!PkMEpvu1#JP6zf9s@oBif?}!@K>Pd@jLK+;G1rDemfOBn(H1==?{YQz@LDk(~%p| zG2jP5)wc;$JGOzM&kLZ&@h?Hu_cx&G`3@-h>;^@@Ux)Np-{I{)5LCb41M2?!K$U+= zxW72uUk0lDPVhi*ZAkwN_;#+hfa0^~LD6M5I1&60aDPzFwaR@PD7qdB9ss@{+z(s~ zDt`+o`7DEaZY`*G-4O2I1xhX+01M#vK*{Crz~jKfH+gyIgOZan*aF@FP61yA4+h`; zS?|vYpz5CwHiGAX$AVXZbHNutl{?`smy21T_@xh2`>qAm-p!!udjQmUeI?+(f|B1i zZT9qIK+*49P~+VNsy+9E>i?I(^T2O_OTeSLK0LGi)IK#lW7 zpvu1-)Oc(JXMkT0_#06AX!5QLo$>7A#xjsD_Y~Z>DRQ)%BDt{-a z=Y9%m9Nx0U%RK>{$@NN5_1^)Cj(-!3Vsiq10K4~uUo*`Tz?)s3H(0+k9xq<+rasx zKM2kRe*vBh9{r$~vl^Vo^)uj!;2*$~z}efqou32`P|tlCRC(V9_Xd9hs-J%V)vm^eJpH18Yru)5Uk<9g^`PYZ zE^r_4VQ@e2Y0&g2D7pL|sPXtE*Z>xGpku)^z<%(+hkd+13u+v`3{D0oJmUR73ef@=S7K=t>~C!DSez`eNs2q?OI9DFml0aQCSgX+g~pq~2? zD1Lg)lirV0K=tc%P~(0MsCIlDRR30k`-AbqhEXJn%UmuhT)5*9j{9G4Mm+5O^#&^LekQ6;wU9 zg5sMmf~s#%NPo)I3sB{LBV7Lm zd==MwebI3r@CL45555W91Re~29u(hy1^gTE-^2Z#f8l)a4e(17u=Ak$bN`oIKm7|h zgX{Nv8GfLmbHO!S-}aKH@B0;K!u84E67aErulcIC^E~kVr1yi@gD-&7!4G{6+50p6 z6!2@*d-LDAo@@F>l3d9Bt>DK=fAillXXg5%Z*p*b_P3Z5bN$k{@hQRmzTLkAtrTyTbLQ;D@=s5p1DdKLN{JpZZVa=lUs7aiOn$ z&&#>tpB*=WbIJDrsB!u?kgUnepvL8If8g@)P4Hl@{~0`x@_q{{|66{<^OXAza31L& z|1q|l>(31!D_l1W(nqe}vfH0KVh=pS^#^{6ZvbxkS9BV9*w2tFD*WlsnbUIptAB?d zd4Aw!d}Zp{_c#9B0Jw_ulYZ;{ec*S{p8UT9o4^}?4=;27mw%vtly~@q3CZzX&)921 zaxmDw_k`pN;QD<-p%0Q;D3Pc1>dpn1f$Ct zp!&ZUoCbab)c9NrYP@a@_qT#KaQzVY1L~O#F_iD1w@k2co&@g8^*r!x;8|c7?P>#8 zfc>z> z|23$52OQ>j1gQKo!}U^7`HP^QzX+6GxdJ=|ygS?<4)`1J?WDivaDVRIpy)9T)N}Jg zdJ(kp0$u?s-)*4A;~`M(`W7hq{1CKuhxA{E^j96>d_NHsoelz3?h&A#J1*b{K$U+A zD1Q4GsCq65csD41{xYa~egUez$$R{{gF&MUsOOi4>q@wPOTg`*p8F!GcKjfu|03Yt zEIO!N2ZQ3X!$6JmM+5eO^SFKxJQ@5sD1AJ0lDFduP;z?*sP;b=(*Frmy*~@r6DNCn z3!vJ2a=0#nqCfXvn+dA@rv+RDF6H`cQ1xsF)xNKS zvQGn`#%1bJPS;~WJ%0+QdLDl~x*aUthTu)&!XA;-5!6LWUYEbmLK3snRl$^W-%Afr$I0U}G(Vs6&^Y$JIsvqwI#gFU2^TF%E z72r?7Q^3X3{ke_cFsOR4@!~63wP;`C)RQtaRs(t?n9tFN}<^=O!XMu0! zx(VzDd%)G;Z@~`mqW5}zKLSO^VXzHMj&^#tgQCM~Q1tmEsD6GL6rX=H-2ZP-{d(0g zo^M}J`3?g`uV!#Acnzp}{swFT2SM@02ak0+b%E+vAEBD~kB`1f!->+AK%Ks4fA#gZc zzjv0~opwP$2%XK2CBTZpvG$_D1UmN6Pz!P1yxTwsPTUU6n)<~+uOB2sD2z3 z@c4iq0@dF0K;?fhq(2(2zZmc(Q2qNxxIYMrp8o-gPxd>}$7wn!`pyPb-r1n++WDaJ z-vZtYJ_@S6r+mQscP*%XKMQKS{|i)ouQ|!b{hgrNKRsNZ1nT)E;B4^Lkp3M|&kuvs zz?VVs$>DRnyak}{F9X${Hc;hU6YhTvH2ng~4|*9?e*+ez8LUp0skJK$X`Ja8|%m11=3%4A=pxf0u;o+d#Er3n=~c6ev3E z4(WdYm4CleJYNH7{tBpZSPiQGo5KC)Kt2C;P|xiG)!yV(Pd^ZpK9~lIejf!Tmp6l= z+YqSy$Dii;mV%dYeL1Lle-G;Z(F>ez3qg&~Qc&{qaqtvy1Nim{_#dF^`{@T=j^6em zf36!;zb^^bp8};1ZVC7lsPeuWu3vMy-=7@tL!jiW9TZum#k3tOLbIkAkY_XQ0}3=$THxGeODO`f&YKQ2f8w zhyD3e!K1le1FF7U$Lr|@*KoZRYy;nYuHyz! zbp9>a3buY^g6*IAHmK{xADxi&fX{=jOSEA-Nj78T=%8@cCZuouK$~ zpN~799Pm<5a`q%B`urvMCh%pj3EXR$^Hm8HU$uqn%R$M(RiOCm-jMz!a52|k12sQ+ zSCf~wHsH0O^uk6^<8^mP{{bj||2I%_@SA}97QLRypy)Rr)N{9ip9Q}I_JUo@eVktg zo47u-+2yw%6o1?c>bdWR>$kOdxeGz@M=PlQ-v(-&Ujiln{|!pc4l4QeDWJ+Lf#-pn zK-tIt1V!I@E1XY137*6C7eVQb16O*#r-7pPv7qQT7gT?jfy%cA6n#Dwu5SUwr`y3d zf-i#|;Hy?Sy}Ce^b15jkxE)k`-q`Bx_$VlO_$;XY{{U3}cU%zK0gA43L5=S%pz?16 zB@eqn_4f@Idb#sJweLny{kSdQ7Et*g1;s!A0IHrLQ04wvo6FVyp!j7rsCt%xDrYlT z0zVI`zi)2${O5t{Pd_L+eIumr2Iq0TZ->`=7O4B50GETG0T+V51~m@z%1)0>p!~2O zg0sQHI=%lzQ0;jPl)V26RKHKVXhQNdcsZ!_PIPk;Wp1vMb{=Wu~2mdpqAKfz{nZUJvZ{twxrW;h=?}Qs|q+Q4Lc8>UaBHVjN zK-fF!jW+{|eg~0$I|w^l{6n{%*MI!97qFXSBF7;d@i&>g@%Pu9f1ZoA9Q%j#W60ac z`Hwi>5S}}N^O@nHA_y5R9;c*zIM4q+&Gr9~@ZTJN%Q21PUpP*ntOvOFi(LM{;ryIX z$JykW%+bZMgf!824u|a04>`7w_wPVdqWN%~+VAx6{9;f%`6S0z$#Xv_+5H<1@$RFf z>31>50UQnF{{i?0j@sWlLjr0)*_(VH=eV4-TRFbX@gV6R17AnFe%h;ct)C|IxhGwt z-v>Cy6;6NqhO^g__D#;;#B;}nwC{t`1;62#$o(>SawvZq*T-^x2FGU7^?M)ZN0a^r zj`%yA^Z(%ZR7iUoJc4|v&twsJKln?IJsih#tmF7M9&QW;NcZY@i$iiQIF~$khU?=f zLwZxc{~`Ua!7p=YZh%TjPUpCZ1NC6PrR3LdHHd4Ke24Qp!4ttF!@c(@1HTV&UEYI&Kby<7k@L5bPj>Y+9D9-HXs-2J!ugfqnZE+x$1zBH zh2vM8V|FZFsl56T#!V_b`yAM;1b&!yi#30O^D{Y)k{%%Pv+ zjVFbC7lTas?6(*HKhOC;bG(P+nULP#x09cO8#pi#_S+6l;Q4>x3iqSxH!pWRkh^m| z=gT=ZbH6Q@uG4Sko>|2C^&GcyT+O{c@aG}_@4+u{eJXYT7QB$_pMei?T*q-R*E7I> z<0x=0JwC|!5U8K*+XuOR7so$Z3jQqkR<8BC9K74k{J$>(xJSt{>XR+|PtG@iPjmbQ z$D2vFAK1aMj*CM%&a*_ulC*`Ke~IV*jzhmDj`wn23fF%Ta1D4S$0VN7Z$5aEo%#CN z1L6E1$#VqfL*cnU19x-%p>X|Q;5R~E!Eqt|AkGzM*Y6sRPuZFOcS*?8!lm}YPUpCW zv_rW5Ie2xr|8{VnP)0N=3rKqh`OYH!CGf+b;_v@T`g)GnlD3fRl^`b5em4YsBPd%I zf3p9pIZozyFVARS@C?phMZTYb|IG0@4*fQe_7y)(c7Q+TxP`P|gP6wjH_Z8A;p)|t zcO&O-BCVI>Z5-d`(67YtB4uXw}Ml^zXyNI@huMh_Hf)t{$n_rI35enYVGN3mIJ#5mPtQ=w9kWk zf$!(o#`!TJ5AJ!@?`-aCec^MY_keRauHgKuRk_gXT<;)#f9_8O-^}p{XjvAr|`^$9Lq@i2-nYn z+rSy5Y3=AgIPc;3G3iUepMcMDT+7kP^dpXzdwYfU3re`33*VF`MH@9FLIq4;=Bgij!AyoJQJFJo_2&FS$OS^N)g; zaU4wAi(orx{hWWCbNw#myp`i3j?=l`4}93}BuRnuN5i>5>%H;!8BPul*Y6H^Ciqt& z!-3#dp4ab}9CvYk7Wf_|@N3PL^*XL+as6)c%;9)7*H>}u%lW>fp8>vxL%;LE6Z|xJ z0$j#%8^`|%_os6HayaKSDf9ee;JM(xkp78q??KWQbFMY#7nG6TG|uk>FXi}v68OEv z!Tx`o{7b|0uP5(X&ff)U-S}qCcarN6a5u*m&d&wo?@OHgrSfpRJtV$5cR%L)Y)CsL zCV;fc^70Ex&E1v8!qQc(mGp_uuJXmLEu~6fMNda_cWb$$*w)&;)(UEC zt#nh))IwK@f=Up3#}d9rIlU9ZfaZI+P$hU z?}B2-%5q`x{3S~Zr*swDORLLW7ap0lt-aK|s@Tz5X|EJiMNfqXi=DK%v#XU-3Y8Mr z*7}K37tN>VEv+k7l)6eC-34ewSLo|0t!>@pqFv3!&f@Y`I@hXFx=Mx6^Oi#Qs;+X+ z%2i+~G|8Vjx!8PRsiUPanX|my1F0*?oR*ft;_~VwrEDcRS&vfT3aTkgYVBxl>#4L} zT$&tjEHBZrQuUoKdXvmuyii9anOm%s8d^IlrH%@XyO?hEEU!Rt+FU6WyP8+go33)D zQdrf)&@O}iEyd++rDd%xQw!y;mQvR;dLm}1G=`JL4rn>mXf{fQ&SF=0M^F3mQWw=T zC}qZ1Es3XvC2c(`(}cCgW>i+Fketjdx3?D?DkTcxftG^!q)=W_SkYQ)YpE2v%Y{n0 ztGlp#Z6j=2TG6`3N4u$^$w#SFX@;!yudz^=IAzM5wzl%>Qp>CJ+7Nb85kR zp(>{qjO|L?Y%ep)tvZ7Vn(3v8S#GCM9V=SZwvKKFUxPJ|syj5+DX&*a$NY<1mzOFH zU8OebM7gu1dW~t8!U%r*Y~*SQa@E{cWB^(_R>4c%Fk4r-y|Azh&&Len&%jXiLNjNJ#ot>hoars&Z)7qTles3PxmcvRdDom{0 z+|!kl1xVOa=`OdoenQMspz8M4N=5y3MjfBjCLDl9nu5{g%-70sWqflQGmts_1#st$YHU-vM zY^73o<|pg!ElioRWGzFzX3CUVg(hWRCU%+KUg};|ZfURw&O2V|Geg=;Pn>!FPu6X1 zN()(N`77|=q?Xc(Vow{R3j;T`Hj9yv%BDi=iUMTohSMigRjc*1X=5kFOa2ndXSebfU8R+!HTFPy*4C|SbedqLU99wr){d-KuJF6p zb~2tK&?-$@?(!iJwW-h7N6cwDXu6PFOyj6XhzPAp}UH!3pTJSZT^~KduLmzGK+JF z-d66KZ36=LwLlw4j$N3&vb$l%bh}(Zi+Z|BmD#Nw4d)%Y8Xa=z)I*nJ7rV=}`_S{1 zX=0O_fxI<$wRTDu%ua{4p?K=qt6JvHxM2CrH5WGJ7}{Bx0qyRo6ecx~uFH|B=2eq( zPfCU`c4omdDF~^h_F`*Wo${=YnD~5I)`VbEm-nn)*4^4(Dx5GInla=HmMkh9ckJ{T z1&lQYy1f)zQ1_`5M}6wlQkj8}ekgTymAhsYE-77>oF=t~-f^x+?e-uq(jT&6QNJ{% z*_w;Z=%q~4l1tXDf`d`CqNPP~W6Y26%(S}b=A&4sbe5V;_ZKcKtu+m*{$QH38dkQI zmlxZj-Mpv=jaEWW#dhYZj(Q)Ko0BS=;38Rtt*%A!H`-d8%`(WG1!sxIU=^@=bIx3V z%5Lc_BMzoHBoSlkZW^>xBiBM#U0~!%4Urom6&Q@ zuExwM#@YrWi~VjZt!b5&%&0`4QYy)+m|tCi-&LUKoH3_Ag#I$`(fBls4x_c!z1YlC zjiW3dw#t0Fr%+g4QVp1EQM!aPIyNsa=`J^4=z|{USXo;^>1WS{VR4TcVm6m>1E@l> zhjwj+VRVTe4t@?kE%uM3GZ*2f$Hzx0P^4H#bgt^idZZr0c9$}@KL1|i>WC0bTyZhrKh8KF(M$xDeJcC&O`%0 z5z58Zmzy=WY6(i0QPdP; ze8X2=R{cRNcNJGcxK|uSalrrQ(Q7NOgrQ&~jHXF|<_gOt(ujohU(-HZFPtKu8&uOW zjGYl$gAfK>d{kOv^5lA#VmmYv>EM}f&vZ}zNMttW9GgGN;a7QiHjrM|#1@~f&H$G& z>!)dUSXdl=?*;Rc1)7ZFJE1%(n%DbKmRiyq80iKve3sBd~K2m5d!wjt*JTW;ry>xM@Ejhj10sGkPbE|GIR1kuGjIHxq+bvT)jh~ENg6Pu} z6nT>-g{8JsQMkhMFh`Be7-cSqOxgrmUae>*ZlH!%gebGgQB#{ecKOToE^i>1Hgp#| zP^>=CYZy7^#Wrbds+w1t$BV}Y>Dt>VAu0)v!AK+5hD_A&eAr|~44W7iDw49Ir_H>Q ztZlTyIiXVU>5=RH%vwr^nhkb+rWqk#kIBS{d1A3S8jR>cttgdRWb9nuhoTzO@l%UK zRZ=tbDV+=>dJJKEd9FPClxR@i<1rT(yIRXQ9P+Wkyg4gYelkikR4rW>2eHb_LWLks ztt)YUq~ZwzX%=A3U^dLz$Z}FU9}A>GMI>((PUos3mZ}rGuu3y+8(vAKCW_gd73n1e zl9jH(MRrA2C}9yQ>PS#~LiP9I*0ynAT428Jdol`KT1`PmtZ7A`nr&e8=7m*G(r+KIv7 z(jo7PR>6rlbY~E^NEXS;$``jN$ckAZ6jmqXCx%^S)5EF882I!y`K%iwi_^gvCaaFf z9ocZCjkIRG!FQijY9uUoWJ7%L$jOb#nM6xFx)Vgzl!Q%K^B0QRSYVJuk0pIWXGD&F|r1T?j&IbEKqwE|vO^M#U4 zDu^ncp-@Dod6f)7l~*2YKFr`6sj)yzn10B8U16KHO6jmDVPUOYSj6cfn>>QH2y+aL-X3@;W*(sLt)tmUx9w6gs#cZ$5DJkU&Eu$jG;itCb&ec^h#N9Z6TEL*J2Cy=Sw_*? z1O#=LHk5N%F^qq1H6mjxx4hZxFPJqO1Wl_;G88$L)ZomQQh+Lh0oL@iwo_H^h6ru; zpw{JZ8*m{U!O*D_>ENaPFZiU|}mAh85;`E8Eja?%+(^{7rMQQ%g;zb!-i&&{eGR?PEtP*N-e`F2L3#;kC zDydjpC}Ms^xQki2Q(9$2`lO_dAzM|BXr=Cj;@XhHV=3m=5xQs6W|ar;1|c+Kl`({@ zl=q$h7L)m|f)Sj4r(q`<_AJ~7%f#rKY%ZFGS-n)PPY27SFofQ78oXV`?Eiy{13GiEHpVm|n z&)YtP*?RPIx{_ zS+u3xtV{_{PWO!P{qtG~^$2k~6+VG}^nx*GiWqsndNvSeTFM7A;&9l)Gh}sbXbfW| z+LT_|)LI2cI*Y80i-_W>tf?%@(}0>eW%Z)HmL=0Jw70IYX^A%=xFo5w5}m13$f}i< zDIB-eiYKh`#^bf+Q&Sk1D7U=Rvf94=|)rsa~+gytwHl^g5@%S+yQdOgC zMb{N6Cu=$^T1L71ggs4ztZjA?>qd=gMwp*9N&n(CVVKthn^?o0QO}s5W)c&_XOTh2 zFpjWmeuf%I79t~Rd8h*UcVSbTqi>aM)^NVmJ#UKfid2jT^mGGuYWJ{S$|G6X8YA3Q zEem&q%CPL6g%vVw%K?;8vH>Y1-qg{`oGX< zax~J_g)A_`s<~G6rOZOD^<*~cmuvywnk3f9nIqAdz=RxA7QCvww8*2jB9%&-HWm2l zTQs~=qvOR0$j1ti;W)jlW8IL=?tbMxIqJ;z(IoX(MJr-8-g69`a0#eJ}tDBWs--w*^XxT~P7-19d2 z;IfhDLg}Mcf`T5z3zXBGjJ(oAZl>!+Z$kzdq$0B!6%qBWuRO88hNzuJDNX^@hDi3Y zM#eWvK)Jjlr+!C*AyKK>6HC~7AA*U4sdWX+eaz`S&2vQ5vLRgSgf<6D224xDu$XyQ z=9XoHN~`jwOZA3{S>_Z<+c@WlfKdb{72Bl;B&`__urDPxTdA#OE$n48K>3yIw!?Ah zSW8y-t88-yy|cP279z>}uGQ9*0SW7%KBEv3+`l(Iz%FP%3hr@O8`H#wfw#b+*n-%e z){7W>2!cO>{;nCc)cjHp^HYtG#4q|G&i(iWVl){C>WX}2@~?CY)fA3QA3D;r1Ui1}^YI8Z%X6Dy>Qx{7^%Fk~0=p4R4C<05(!_hH-5D%%HWVuo53 zB}Dv`-(-vl4#i>-5SeXfBdT)$bi_!w;-vp<@o7^q+oMCFZSZq$`kFJWQ8^d!cSA$E zO6^p_MfPlN{#Cyi8<{#qw6jmF6{j#Qi@_sui+ZlMyjYkP1{dWe>t{Pqc?jA{Zq$~% zB6i`yO_I;l#%>Eeo1bXdgepW5Wji3Jtt&Vs&-S`f=O@mAsx5?6ZoblJ)tsMeDmP{e zA}$@|O=7g&6;NbcT|<*;SfUaLP4g+JEG|6hSzH`dQYOwYNY{nLJxtX&v&R8qVrKh} zNwu}JtO>!qgf$I?^Vu#HmtnFgPU<;{5p!ZGEf_U;rHAEjDQ=B*a39=x2v#Uk-Ax>} zva6**e$U!CLbYQa!AfoZoTv*vp3C_0{F_1p+n zKb2Ry%myUD+GT{i+NNn6G#`;bXE{|^04-%8oB4=~`FY&a2;^)6oS?NiChlQcPcLKW zTPvU~MV5=TaI%`IJsieu%@r6|i(fl$$6XU1gRAaBy_jQM#i^o~2O`tJc~$$ z?hYqG&*CQrb*vOE-b&RvV4hj*!W2J$&Q3BH5#M z2w{MeY~fG*sG$oa5oc)Euf(NVPps(aBA*3EEd0Q82oVZ^J)$C-GngAgTkj1Lkq#aY z$ma@#@u{)cwhLA-Hfy>{KgfiovduH5$85Nar@1wPlcLV18QzJJ8&P2LC>kT}a_Y-L z4G)&feXQQL-&&%(QB6}z=IqCwN!{w@8jp3G>p_r{C|hhEFOp~%LoPqoIqU(N8iI1> zW8<1?S`egMHs5#-j}{M@m54aBsW)V~)j0D$c`oBIcnXp!g{q9m+B8nY!S|EHRb5@h zz+A4<0((bI#^^>@Ra};C(F_vgiz0PK#li#yg3HYihV}I*t2x<;5%JWY_Ze}GvCH?y z=T5#mB^$Lgph7GRh2{RQ)?Ty?pPr-Ueenw;9G2{JgW$Z!ZbhQx?k)wwM+2YP{6=3d z_N@rDgNeDb38+nJgU=Bsgu%&z+Rpc|k|}plG;Ju9jva_DoxSR%{Vwx~#MnA_wT8=B zA-;Pi;>DIkdGMiN>u{-gZL_vg=Au+--W)}ojkQvj_kuHeyNoYVhBLj>fip8_Fh}(K zS=;JG{K{_W8I7Gu@fvz)gd2!F7qtLl8brEktPP=e3@4WG_Ld&UxN*Op3wgPA_R!|?KtCJ-kI?L;;=0c}`rn5xWdV%aT z{!Qpe5g^{kVuz;qT2}8rx>Pz_?`GOe*{f6{dKwpmX{`A_N(t{4i1bB& z$1S)H$&&et3JVEJ7AhUZ&dREC_sA5}Jhqo3f!N6sd(}2TVbX$m>A+jGLrTmHh0D+6 zWQpE{U1DZDVbQ6QEJaCQXm8VLItS<4B9*C%p2{JGbJ(^mw+p8p7pTQD+RYFxRa9|e zVT_+jrIK`-l=5?&^HrN^AdH)Zd;EQNj{HBMk%VU4l@FU|nrA!p2*&3MsE zK@|k&!lzW`d**|!7W}lgw(-YG(1Z;QwcDa>gIF*}S;PY6q}Q6d2pb2Tg-nIF%-lqZ z!Ru|;)3j9!kd28U_G_B5U)3!I(V9?K*Wr;48E#As(`klhf(8}X@hkO}u)cw_!rmCCN@%hh-!wjxmw~8StGOahEYUUE44kzl^|E{vq>JJ>q}m&G z<*S6^sc2VxQ2Y%RK8&E)MY`jtrz4kcMEBN*KB*WnUDVLIU@zqaZcX3#Gbi0eAo3Jh z*iaDzEP1iy~V7umhH@8>y_G;rbK_{Atcj7BBBc#gdXo0QdoK?KI%sj|u zx@#w~e_t_s-eqP(_KZkHQI;9l@ddYuOQ9bRS6ma0;R-AX5C{QQB}78&0?5qKzO z6Ulu4x7h(>Zf*9iqM_PUWPcMo!hND@(yP~y*cBOkdKUNeP8&P4U3Y}^L~f+s?dHUE zK-_CyVmeFJO)wAopA+MqQqw5;$d)n~t)Q%nwWM6(`yRF`dBh}i@N%{p*bDc|I@@}> zifxlCiJrr^k1va&qvKoDfnt)UK>o2Z2kq>Zd5l6szCiC#VjPQf6cADyfOHRmHhisS zes1ptT1+cE8Xl2465oemvrg6AiW%h5`5!swO;v=V;PDk@T`Phbky#Za z7Kic@ZKXR+RtUH1A{8VzU8Sygw`64@pQ&htZW7+jExTs#-f~+r*p@<5$hb@&5@|Bs z(Uiptni^Gu%FU52QW%vMRo?%yxJdI?F43Daf`e$%xXY*@#w`eBH!rc;-f?NW1lOU^ z)yj8iDx;1zL#Ca$Xp1y2MkS`P0J&C+y|w_8#I-pH)6P3oc&e79msPZR#a_o}WTY(J z2qkOP9oc`R)Q`6s_12(@PzU+cP-H&Ir$0%`M%kIiN^7sf@@Q=`)x-d- zJD{jT3zO#3>t5#`98om)s@GuoOpa}|CFEUu%Vo8PsdJcK7lPp8U94o{W=>p^%>m<{ ztLQEV(#Wpa>^EVCW^c!`$cH>2^yo9zRd)sg~zCC&_^M(oGd32K9b?YL~*4$absiu6Z;HXC_NSZof@)` zqDXi+t+a~~Z9Ai$YA>?q=%CB&ZX!py&a{$jzjMTwocIC0)y(g&|v ze7b9bk(L;iRk_J5hpYqu`D_CxF}j~SwH@X0dTn}A)!S&TL;tET3q4(J*<(hMGy_|; zvRm3rn7h)nBeK%+l9rC7)f0Q?fVU44EjlIIH9!PK*eUxOO-#J5T7^t=`GhUz@g{`= zI#G_)V8s#s8>S@(K2J1ssc zn%aa&>sVSOm60@;81-=ec@Oqy&GR6Y@0rh1gFcH7;$uX;l;+8$1szu>chFwh9ru{B z>y*Jg2}TSbr1Gd<)GPLww2Bs0(#3(gnRBcYCbV8>v=4L`spgi6Owv*szxNtf;Vq~A{G?{=bTNV4H8EYC3s|0l$bL5yOEi0E67^+V0z);zpFu3}# zAXEq%vYu3BkEA?D5<8-?hH8V(aPByjGk};f1xTaa3`i;g3~TlVjK(qDHlZmIJ}pHM zxnX^VA~Kf)j`Q`}uxnqoh5d|rqeTq}>j>JBUv*K)xg!<@>XveJvTFmQZ^tF-&Qo!7 zWXhIGvsY#aCEGh~N??(-nKq_x%*eaRuGVt?N?&w~ix6ZDi!|u@Yy#)P8kJH_Bjb8P z!kc5ZRnWg)*kB)!3wsOL$j5fV_QZ6x#hHok@%akbJfy2TeM1_5P0@V5U4v7}TyIqw zZ^P!$?j?BvX=*|!MGV9iUUp`g1-0)~6DL;$knRC8^ZKlR_{{mGl;8ydfY@l+{3asN#t@oeAHBbgd9_V!HE;6XP^SU`z+! z*Q*K2G1}U&81}_48Zs5e2;-I_oOwDD$D5WD%o5|6veF!4}@8GSU>Kv|NW)Z>}JAU#-qo3G! zg*Fi2;i`D=D5M+mp{Q>3xxkf4?zZ3`wfL zc@{&8;zrxORR~`XMFQk9Q;O|(tR(3xUfz$?3$S!XCDn={t1Y|a5?Ar+Vj1tzKIDDFc*jNV<6B?Ywe^r{kYv_9;a3F2Jp`z3*W0cst!n+qHuUZ#?p9}0BOP9Ed z-J?#L6&^{aEAto5S#bKY)A%UXva^=VUp$$e(f_}zRa^br4_2FA4o&=ZuVNdtV}&DJ zwxCY=oUFp~tbXIZy=MhGTzK&lMav7oa{p7+WD3;nzO4|H zx~PWfOV|mgHzO^C+J(7`}zkg)9o}!aXbz*xq1i z6NRPl0!5ZtElSy2jhS3OKrB^H3irSO5!b6pn!mP>J zJ)1wa@v8Vpn$9qq&X}I~Z5e&cgnc{K?cG$C6iz_5>){g$Gp6f<1@>{-S%qVG2v0^~ zgJ3%F(Xyndh22f&i=wuX7zSdKF^x+fP4n5vzjD4&bJ*l#)VpCWqM-RGEs4(2s2PkO z#=cv}ryuo!$e+R09;H<=7n1u*C5?4IOq0gWVu7>K$Yb98sL%UkYSi1AcQUe@$dAHG znv7VqH5&)%q$~iX4`w7ICbgujX>IRmFN8O&Opm$4m!O2~TMmh~p^cU&-oopSMVS-q zD~^HuBd5zIY^h#rOl;YdxA{4dvsrB8qywR5+H782Vp6F8JX|2f66j$j7?qMTarYxJZI63%4YEGVymoznBfw8I(`@5R)a1x za{0`zs%!?sp7p3yxCjN9DX)F7s#wu74I^7YnSYV7YN#UuAGdNsC;=Zyu1hcma9EtL z`jQsTuI!6!Ucv?>c}=MVgjh;QPUA-5+7?J@UQ9RNnk~pEhy1r2RHNJ7SbluaCIV@q zh@^}7!gu~Wv;J|wl#vC0n8f!ED}EEFO7-s9TA>8XXjsP}P@T<3ldxV6rV+Y0+pL$C zaxqrk=cYmBK^ghP5Voc6b5e<-e7f)*x>iwcZbC=8ZsfDw#>(DOd!w1Q^vw!46 zQS~Rx*!59A3Kc&T!eYKr$@m(AIn9=>>f%pA6dH)2blWCvoSN{*C~6Cdg?j<+n}&M$ z2A6%;Bx5q^3MYhfrn(LX!sfP{tN6=rE@zQmrUnf-_v;*wT+*FQXvUdqpp zdF4683!K$33krABJ0mSzd zF~pg*#{-nGncF&xkEYTPPo%KSUro}KXbRF@TA^{(y3NJNC%Ha%ogrhRd5?t+^apW> z*>x4BYpx}&%M`6K(VJbibmMUQd@vsV%5_--)%SHcM4wtEw1zXRIAo zq4!k})zmc&?;vzhA~nL8TKm!w8AFank(*rERn7Qc6bT30sH(lSWyao(CGpJYlZLIO_1J&?}dmy3eniHPsHUoYnQjIP=wU zhsV*u$da#INz7?Z&L2@SKGOJd#~J0gn&K|QI12Wa(pN6i;{f9*FqO4BWrjCj;`<~X zcVMy4H`lDiMbtYdik+BElW2_cNT7C|Cw#YCUV3Y$dN`E!2@|b{@yXt>kkeHf>%l+a z5f`CxKj@M)?(C6djWVlDR)wIL1}Z|Gp*T5S=kv zG7d=^ssM#?ya<6po{mR}{*z%NUoOy;2c2LH<*jYWz|-Ml;4E zlw&+Twv2jcEbM&>qlYtWd+_W}&#<*aF)*KYh3$!HJk39EXJOpsTGqD}Nll^}lTq_z zTlzegeP+SqNEW%$8_5-Y;7#*Si{6DloN3#S(@z{kFSRxyi(?umvt6U4cQ%)^V0fXX zt`#jrFy)WmM+oI;Y8xiDxlLPX;h}w6I;h#Ar;Unc=TeSbhS+*(P!HDX#;k?G6)~xl%RvX#sqL;Q+iI_OPv5x&y_AyI0 z#+@~4SL!uBtiyOyVst6jhB51_(>@P^s11lt^`?9ax7SFS<#WpsUs>Y=qk1`*m>`|6 z`HDc?PRZgEjHo*N*=Rk|c&0B9MUJwZ9tQK$eO)EptmpB^EI>p6ybx*O`w3N5u7IFm zf|S%g9;)*=b-GR#!db?nF6WZ^wN;soxh;oJ$Fh04WlOb6)ID0js7KKeA-lS*NGBLf zN6dHeN@}BFb)R**+k0K2OmU9~>09ir90Qt@*+SBS;kYBr3ZZox!CW= zM;=j*+8tX>v@DYdCnjJ~INGVWuvJ(q5s42|j=r4i|2r$^&(o!J8`p3r9|;b$wKb2B zC)*F2Q`WhAG5i^qxiy3-Kcp-d0{FH)*VsAzPE!GL%Ubc_a{Z}7-vyn7{7^4FQ$W@p z)%ft&F<5wvOAOdJ|0_`T*HFTezTSSWl-u+IT(&@oFhcG$h81p%;T{Ewyy9HWKh91U z^m37QWYDRwqe}MKc*B>=)12eV#Y+>~16ZfD$m#S>f3JWlV06o?ZRnZ42t7!8+-Zue z!ZoYC`VV&}`}1kFOkA}|-Evp&sjwtTFgiTM-=jxqh1dR3v(PSE?leb71!R9EBDcbm zW+~t(cv*DCm(1h7z;x@Mwh1Fjyad2sljgG_`aGHl5cE|!!gY$AE(L#8Pfx(@lK-kPt{r2!|Q)> zT&p^`H7u04?w1agTqd>IrPYig=@y~zNxT?FW}<=bYJ;Xd4x_!dVJsV^p)pC>FP?}s zVfFO#l6Yp6$nP47H}YO;OoP~6yvi2$0|ZkT40D`Tv(eM{3tSd*n^x2-eZFXBdb5%D z2PaL=wuUOtB)tcr*ZC&vg$2gV`YR=GFB@v{81?5{sM7T_{E9+xC7;FB98B*JtuC;k ztB03g(h_W6lZxnEwYH+a;}Ipow^nDLgp0mL+OO&&qKjriRpp;C%*;Dti>*F$%e3_= zY>BkZFhO>^VpjEyN@=?9Q_UKNes}v43XM7KPj>`?ma2gvvMpG$-}+`$ZSh(D+})O8D?fk|`AbMuYTKz7i2v>PC0{%?{tmoQ_iHxKVBepSbqF=AC=p zepdEAiPR0>;p9&U5)(tC=}*MxuB+a0%uy$@pJHc5x-el6T_ns`VtuwH-|SSGDcsiH z$s0BH;34@u)oXf~f6Y77D#j*aOWCMvtbkgL-|%5<<2D)NXqT2otJR#iNG*L1+};q? z-!;^JJpXiw_bv>o{RKt&58|Up11l@ex9l?zw$U!UE2iAC3)w&f#-Ej3Vw0qmRc|$4 zR=8Aq*z5%Y{!D55Hq5A*y?tT2WedZvkTu&5H(LF4Hu#EhyT&DAlgpSkm2zKUFeVJ| zgPd@Qt+!uxVp2CNTFQ5@pXqx}8WyxPoXz${ma%6Q=AXUbD~CZ4&dVR1>{i(`>u9uD`c!p!M2k7<}bqv5^N3)9~_Yv%io zVlVpiiKk=l8kWj~#7iu9QTVBg78f{9KI@D{XBSSGyXcIibLK8R>6Eh;&nIQU;>Nj) z7M{ps{-v>orMyu-t8nt-1xpt!Iju1Nj8jh+zS3i}3KtX`F6f-NaKXa)S-)n`ow@o( zRQMa(v+QMxX-qs?JC3(k)^Pe~pSARqhU2n)YC3J$d29E?Gwq8g z4X3bAsxqt4;U7q;%$|8X^B8?AW%i_w!XdK@GbSHDF_|><(C3EleRiOC`#|r*KY#w( z-Jg45@H4&k4XQcO(4B36Bw(QL!GZo;2l}2K=(~TQ@8N;|YXeshVFcP=+;Mc>)Q2uHg2K5p$9ha z?tg*i4&89$t{3kd=)J8l(EFmdDF2P-Q_>G;*KH)l4BbyRw+%n>=-`cX>Xw1N4b(Gy z%OeB54~hbP_lh!oPYv|nKhXaeMBUT-z~D7k+g%dLbMHX^0|R|q2Kt_)IlEriInaAW z+LVEQ3jEwa|Mr2toytrJeUF5;_dXoHCVh&%EO9a))59(lC}hvNJLu3r@7CBkYgO!C zvg`RfhPS*pw6$;d*4||IJsWsp_s$mv*WaBCK6=;Cy8Dyek3Bzl<$XgN`-V1cPIf(a z-{7^^({N9}8nzjxuNyG_sgckN+o3NSGjuC$=7TTD`i5pfcjX^aw zN=1x*SNk)4H#GGQZn=Nx)~g2}x^3{08~lVW3~qRK@S6Lqc@ILuJ^kATuemB@yXLl` zEt`fPzc(4^+dj~L)j;3lM$G4HuL}eH>j(Ppu@QT^_NFAj24*vIG0^vn^|qh!@Qn2P zE^EWp1AXghB`RESx!pWZ&ldbD36edoYvU}U3gEu@pYs!@HmwKZe zawDz3gM?|e7xtN$M;}%bMf+|ns-vacPG{%||BUg}x!(1Ix7+|l)wDiN?o9meg%|eR zdhecfpQGJFpSd1UqrKymeMW1?9m6j^VEqVESM^88={)KLv3Ler7Z&n@Ok4bhm#TSk ze8f;E?-tkJG8PaBY;>`0K z8ylM-jY^a5c)_TCEmAmXcoUWYws8HsIm$PUygCjO`T*)8@vY{zF{^5tOaq!)OKWg7 zo2C|;(vvI)scCM`TPq#B8?3xc$-27rXQEf>ip}5oORPh7D}TW(ptQywNYC1=YIdh8 zd8J*f^o!PxrbfEz)E>O+x?RuRjutYir5{eWs6zThbu4RMwXwCo)HJQhUa4(5o|~VA zgHjHRGMrx~phM4Bu8HbK zOSaj0cFH0R#Z%8-)iQU+1-$ zd7ZLj9FjiJU-iU%iIwyjI&9p{?SF2J<__-IFnHxQxs6vpt|l@iUZ#+A;e^?YpZw7U zOBNN5J9aucXUEWO_rc?ML#Fq3L^@)e>-c72^r3fJ=85&oq(Hc6Xanx?mhqNpt~PcB zg%3G!G_ZB@2+jIQ=c73;DP5L~wAoSJ@Yvn-X%EivPIT2xgI90OymfKOhO05nsm2=U zdq`Em$!JJ?R34TkWq43p_rrmffmXOt!o$bCN4H_-u+KYkHe&ri-xa&JJ!FMrOECSI zKMK#DO)auqQYms*$C;$}G73}=%hY%#&(eiJ($PA4R{{G zLdIJ=!W>R+#{-nPd*{s|kNk;@!BSsq@R}zFUo?ge9uvBP8Bp*oVWhG6V(^x$nBf|W z<5G;x2w9ZmL|vlwm#`TbqsLQ_+guZE_9o+f2&4nsJ8)(uFb==S;OQ!5!#j^1>tyAK|*f znS3(?p{`+FI-%K`Y(0iyN7M$}&_uhpp%;;l>L)Ullrak2w{@ToHH54DglPd&0ix?Y z3XJ%KtM}<~7B|rukItC~EZtx_@1d$d3_AX^8#NDs9(^d;&uc8uH?&uNJ+=oys&0W_ zN=uPpM~EE|8+ZU3q0IyR$9!tT?yc9Eo9=|8t}B8=7xV(oF}8tO-G;$y9OCyNR14L| z1S_>0St+$d9b;VA_2yzYwN-n)M(^qxJt$>@a_&Oorb0ft2k+f3VeMZ>^P-{5nit)- zsGZ#F7I)&`G9%I`6NW>RpihvyXkNsjl!(E`^0+0H5{QhPRWM$zin2yjf`NQ`O!gY3 zO@9=h1$O*@$ykxEUV*KKH$Jy#!xwDk3z-mKB$fW+%fr4wfyS7aS$^oN46bl*N@puc zCiN+Q23G(>7G|BVAp7fj;hB+4Wo9uO!`ckJ+j+`_Y)6h`VFdnN6?~E4*WEVIAK6d- zUM^rDMUK8ALQ-Q=`|lJB^xs__5+K~$cin<{$>6%{2o<9p}1~M^30tKKlSk7vs;;&d}Q$1`-iq|^ce=+xDnP*hM(BrchAk;9n1Fb z@U{)#{M=wav8_5LBXf(Q2Bd+t7O2p~%7k_YG!+K=aWxoNs8!#Shy@zYr15WQ=Me8g zp$CdddePBP0jYi^FCp)>Ie$sj@s#PjylMAvUG%Ne(Wz=!jE9NsYa;jcT-L!WAGN4+ z7Ff5yQ5sjfo*VWiMoy2B{!B1YP^o^%%^)LJ#R5X`-h9wZ%Z=2d zF@M^v(UfR(U^Mc(zwr58&pl_cwmu1Sti0O5L;`3$!}?&P^f;93$oWoMOGbdy>3Z1O zuo<@UC7H;K_-S}zkl*9$L}ETovr~b{MyXbD#28{~iR&&0z#7j##Z0(r>N~V)-Jb2Y z!;?dIKc8^1>xEB+i!&B2TyVymr3)4=V|rr?4EWecL}0V%go?z2JFjH1u!h7xf4(;% z@IHM1BZ*e$>21B`K5ako?*o!S7XWc-K8V3dSdHQ=E=O@1BWIlYnv|R)sdFOxNHh}+ z223jpzH~sKXygjokqt+}(l#%`P`C|EU9I4}rR!&S6U1eSogLW_>pl{{LJ_FlTOSOX z(H6k7weT>)=}I6gWsCHleeeS?Z$9OAC&vEIv}Imj)#NmKSIdrvT#4{?5}c^~tQQaV>2*U_F!A&lCiWNk*G8o@R6lsdgM(LIgQeT` z0-JCMs3{y?)!LeAW(=-pK4)0ssZ|-dmP6KS20R+-4ARfMf)T2-hLW#3^e9K`p<5oe z5V$H%s&mEr{d~^%jtM;tJQMx~0w5 znd4h+Q1c|#Sk|$`wPTroBpA2{2OqkT=Iz>vQ&|)3R&~3cvkenf55gZiyxHl4zQAYF z&E4AmkI+R@i5lQsu}-46>1zjub@)zpI#8Nq$hI7yv{UzXy^ZB#ySLuDd+Qx>4AO~o zDoN4r&xd-dO-hbG9%gPo`1I4(u<gyAovG|8C8g*^ZKH0Lm%KWG0HnS`2GkJkh*#fT@F)_$?Bo zA=v4n=n_a+DTp5h+BP|94s8Dq|8NvC_Fijws$YImp%1$H)P!tFVF2NwE8&+u2x$Fo@?;ic9u93d01NkOwXb zduBesCf;a2?R#e zBsZt?-NkrCy(*;|#WvGCG%MIYa z^yststtVqJU>drKYXX?A&uOYD`M{@R26PQw@Cbx-iKaz38BBeNgrTJ*MzQ?9!M=^! z|63h~jImaDAt-C)owfFdUDb}I8Hje-cKl$SMhr;^KP=^=26_7}?*D(G(ubeGobOC` z0tY%o&oMUbrs&mfj~xm|J$Ba^R4(UL^_YPwQvC9;xzPJ5f)dr;=;r875 z9R7rq1?4|a^R8fH_29GHgRY{Ry%k+vAwxF0Z9^d93 zPncZzq>(nK+wx(BuuPaA`_wpEQ&Ty>54K^vY1i|QBh;xC*!_hEcI~9m-g>+?iyfIP z*Kq5IiI5rWss$ptin|Z35gh`hl;&c@lKVzWgn~QLmPBb)>&IwD>~K&}k*sz5oTGIu zXN75-*FO9y#67o%LoDJl!3fcKhLHH$W3)D1kBqIgdGiBbu+=2BAyN`GgJprSSXs!o zZ7d%`%_uPXw9!zju4x3CQ{p zrygshB+CU4GiC|%hipLd4kYV8!;fP^Hw-26 zk>k^}0qEke*G;?`S4s62n<+psV{~?WvV=pnwyMgHLZ5+QdtPIT1CAYB9Rj4G%`MYUV7b7AGdB(WSPr^|a}aoBZ2c*j5En zwUP--)!^h+OjIj7!t4zD8(xewuFSpBHPVa9-n?<`Y}B{t$o4qbgQw{A`dDVTbaJIz zF>6cCjLDW;6?>3UN5`*|%8c{#yzylPYS(itb&fH?j**XiQR9mTp3Unqd_+?ctMC%K1bFEXF>#`@!pd7iv%q65u@5u0yJ$2d6=Z z!=6fS>TuMvstSkT&0w&Y;KYy#>Y%RnQRd)Gg#|);qf~-c>s=F}G7Z(&hYm6yHfPc3 zg8X*(RjpOQ!NlU{yN3UNg;-3lpW$O!2}nR6GK5#4crjH+hf)1Cty~q)NTMmIw#wDw z6TLRN!R(HBlsg}UkLrkOlJ3zzwX4k6S?aDL)N?V$ReIF~CHVAi+ub#=WdmseR0&;T zn+2~a<=%&m7N@q6HR}iQUCwN|FiK`!AI<8*gw?v8kY5{@6s;pBwMC=x^g2n8Mh5Gs z>3(%f^8Jg;%iDN$VECb%rHFGcstj%0IP~nTRqqYl`pnQ{aC5y$n)~w}r-DD^3*{cSnj&dMo(cqs1DT;o&{99K`=7d>ZiR%4d5Jm zg#90kRTt-g9ZlYT)UQZ~4|67zHmzwM2?@fsHV zY;Z*fRo3K+T;_cYFcYE~9x@2l4}=%+>EcfD|f9+WuQ1W-Pd z0&XMyrol~*XelyfhxqPOC?QQx9XA`~;LFkg(H&N%S5$;dF{h(0GzW1Jw@{x^Kdq_$ z^@r3C&RnfgheXp`|86NK&HR06!2fKAuJspFx|Edv%e~p3?6t2<=`(iSJuM|gB~UR$ zzzC*!YiY2D#jZCh$x=D>;`W6Hoe1?;B*qh$8-+5iMRFveW}{Xbr9;>-!s}iC7yNx% ze@d1D>rKv}o#O^de+1>umLB?dU9bea!oOwH&}NtokD0j^y&p|JZEDAOj?mhH7ie(0 zu0@nFA4N`QOzEPYNvZowNCHYF8rpO(RLWXRrOiLFXcq1Yvii)>?X;3`0llJGCJd5q zbzP2&ztEHh`|C`B+@7dbm@mJqk!k{{3pYGg&$^|qr%%8_3*rP!rNw3K5ds$7gt$UL zK&zVGkV-Oxc6B2=@)HJ8Gb7vfb&hmhA~qm|QL5(FH6hmAx-r!;+2a*-)f>e-L{l|f z=4C`GhrzFQQvH*`JRV+H=gj`VHyGY!=d9S(Rg^4-Z^qet8Fz9=HW8u)3^nu4`rMw) zh1G~YS_X{}O1VIB#(974eY-#=UobLbyCF9XMFenoQ{G7#7abMKy)MksN3*F|o*et^ z-hQ2S^7UP@=gRAOEjZ`|jij?A4)0E#6O75dAe#vc>Fe$o-h5w8h8R5z6G{t%(&%6$ zQwC4hS4Za zWy4_WHcrFToMHU@i$h~N4udyt&?bLIEeovRznDIeAMk{E@C+7W!9PY_AA5>0h07?hm2Rfxf;` z9hY2pj6HIEu`R5V*pW9zU<=Qyej>N+b+T zrFnyxkx+{?m8Pmx)R~vTNepobiN|)@rWqt(xHwKI6atwLAP&$Z#9*flmy{6rE_IGC zujVVvZ{42D-uu|clwm5=_?)x%b6uDJx;*R2tJgf{=$5^JFF)P5ef#CD3sQ8by+8?n zHMHhW?aKGZr8xIby>fR((5gd?4rB2verflEm=E15v?P*Cz`VlV5=3SQoG0jNs20Jc z%&JBr``aV~i`*rBr@cqsILR9?e!TM*>d5rF`a1-|@EW!&J+- z|0VA-3k;=NE3gj&_tf9&OA&*S?4su2eLtlgRJNb1W;vax+eEq`q5=jIt*Nugny)}j z0EyUYZhKqsK{vd*p7|GOUie1!gnDnWTOLP6!h#Z+mc#=5Y|v~2D7-6q6kT5 z+DWMNF$G>JpetQ;P`YbSn}TmplXH`?RZmS;ZM_byW~j*svr9&1SDUfrB4~P#l!QBb zE|ADgk2{O-ytn!(dSaEL18Z;qRqhl^-y_HqtxLMbGM<_&*$0p|}>= zEgH|zOgq&t^XmetHFIF_>KA$}R(RF32Uz`zarw+FZ}m3jFAUbc*}M(7Ft`lGFh#hX zRRgR!cIBu~Xp06`GUNE{uGN@XPOOIecmAL>M%=_W8RWF0qJ#0Xrl?2~lv*}g|Eb51 z9;NOycae7NM;65@J3_Fuy|qa>gpSka=N7#2ak%V{)x$d}GPil}*Kpb@yRXs$KXeoKt57l$+aGg9Sl& zh8eosbn`z_dyVngoxz7^u_$y;oA&iE$}vu=CpKgzNlkhHkNzwih~DCS!Z|!M262K| z6Aq3ls-2Dvjy;eI?7l%u+^DGqY?0+c*6z>$&EhrVuZ=lUCRwQ8}KpcWySnM6au{$9j5QA6|?Cm>zgcEr2Axd3Wp0 zOZV@5!t=30anRPNC2ZWpnjtGH)@-5>cl0)SNl{_0NmEgIqYP0>DrgaLDbB7XZ%&8Q z)EG+2_wwl>s|08WsfDjYfPqTibC%EII8h?D?`Q!m?71%DLr}KQ?N+&kixlL&asS>M zDF4AN%?_q&5sG?Y;h>&kT?;gZ`bLj~^7+pZzd-?$`g1a7cB`X^C$UtoHCp7&MA^VZ zO-aI5A{vy5ps*wW9}px(;!uzRD|4|a2oB$yf-uC(SwErqAP zMQ4dZQ?DgOl^qP5kSdT3OOqdh!SY-(%_SnMi*nXeNb9qA`@3?6%wzE7;^2>1uCCgU zCYPvTu3Bwv^9FV6KN?C<_rF{s?QruBy#7sZ>xHYEZ+(JF9lUgjgt+ay?{8C10Zb+} zByhOGOd9zD%5A=fC6fAczecx>X?W9X7e&`%vZL*MmNo+77Y_=bPR78R)e~21#iZS(kpNQGiOERH^LFQ z`g)^p7X3mHTF5Y@Y1#>z3ty z_=nQv6}JFHWZ>2YhOC&37dy^o;eY7(mN}r4H6#`h27ihuS^KZlM$Z;8M31Jo`G>Gu zlVN&MI9`UeWWoja)L{8?&%9k|A*Ri=_vIigM#nku5UrxL86I#1R=Eup3mOwl*rG9U^udrY z@_EZ0Wwr&7Ng9s?LQVgdM8!#b}gK zll1`4i=+{AIX~Uwtd8E10sy+&+gZFfxFe1_AT3f3d5<~1>X(W*eGII>X*H>!$*Al!?x(Z*5%ZxNpaA zCTWUMB#@WLw9(TrYERP;7w<+FwZ{{S)p2)Wzx|evUc)(k?H;f0WuVf?2 z728F2RL^w}0YFE-zu>x^`3ph&HY~E6IztTY16hS1h|z`NrECD1q$AEm%yHGqQE49f zGu7aMsz}=sYf6W>Fpz5KIwjbh<^SHi0-|b!%L{y3yo2XzyFA#YR~`95GFXCpsI+i| zR=dHG1dhAKZAuKm)G@Ao)E^4s8-snj{6GLeo+3oDpL=cEvFcuXyp{!Hv$xGH*m5r1 z9Ywwd1fj506%M{ZFw%;`B;qr|rOkJGPsshElSiK9LeeA0`eXf_PhJGo!aPaSk}-x9 z?fp=%TGSg3ffgROz>#LGfoY+RGpO7|_1zET?xuxhk%e9WUZtM63R4;%oZpNdmN#(V(f%pOVU3drQWx`puu5kWP|mgvd|2b?DhU`IYVfXPm&Yh1uITO)>XF<9{{#mzv? z(@X7!I0s=oNXUI8X#ko*j=`Ve8b~3g5Z~$}fb1+u%w_}M2m_DQde!J~&t>kWxnd@8 z3|qs%*=H$^0E`)9wz-5GMAzyKH<)8$wAdk<9xnRrrH>i3z9q?Ge^xOOaIy$jK4^us zSq-bVeSo*hBtzR#4|b&N4YjOP03r8^$^pEL=0!Fz*1AgustHRe_MlV%HNlz)FbS^I z4Vi?I8C+MayJT?@5s*MLVSWr-M2(zU<-)%(W>Dis5y*vfjSS+5mBRqYVOrO0u8>9Q z@+OuL?OtRS`9oUXfyV^EbEP49USRvq(hDi+MdapS&(l{QU8s{oA2`&`$^#!lnMXNC46O(OpwECXKR3?3n--=2AH z{C9_bJ9%{W*z^70^^fVtV-u6l9GiWH(V0pNPu>?Kc|XWENocVZ3rPTE*p%b zQ~0oQzFd@wahgsxeu?S~W4gRSrqyuK?%@dM3#{mgfU1rn)rN#jj?lC5+n?X2(CMe* zdh_@>5`E#XJ?*_ z_|)XsVe`GW&!lU<54j3GWcLUPzQMO5hWVNL7k=2KcbOVPToFM^0AX=SVI6#;Zgl+? z!{4KU%$&i3XP_m6%i!i)CSrR*20UH>^?AU4u_p}AH^=RbHBlo1(O>=AAJje>5<+)H zma^-?3WTg0!Z(TRN!jz-u2;rF*J$bTU;RwiU+0qqI`Gd<-!?H%LaXX;?}hI!A^<3Y zKbRI!`42J@0V9#T=95Th;lD+}9_|8@R|q#~ZlWvMv+18mAhkvu^1^zE38?EPqDa9y0I4d&2n9X;VRpM8I>g8 zXb2sd+xl)s5qP!3RoUKSqw(gThVHcb+}vFNGT-k4RRVj&_gR#9ZT}rA<-)(&6lFX1 zJ?z|ypiwyDx-i9v4KaTAkOVL8w%S4hil_r zN$9#yWuCfJ$qQ57Z$KIWAJg3j4M8n{m8?pNF)}vf9tHx3)2^xRN|FeqvZ74AW3#hU z56&ET^pQtUl4@LYHsYKe4U$kcW~yES-ZUZ0>zIVLZJ3r{2-bBplS-V*xCoQpDgv z5i-QHrm1uhbID_}UOnPsAEMm=*xjBwX|LTsbHWhaSpj?nthHrNoM*Rv^aih9q_-65 z$t%uA)k|H$&+|F`S}Ye{gWfnLvMc}xLKEzRD?n13(#_Ly`$q`XZ2HT$O;W3Bl>^

6f)O&WE!=DT}y%ygVL*`8+Fh-D_JMC>=d|xj{ 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�*#1 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 L!969YAL{-JTz)5D diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo deleted file mode 100644 index c7f28b3b4326338ad39e9f66b9bb58ad9f8a3cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89957 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 diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo deleted file mode 100644 index a5c26fa443cfb0901d21d86dad381c825b169b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87589 zcmce<2b>&7nf~9xHW*k{rMo?dB#X+JdT|2%)$Tryl+)?&uox5KKI{`T2FU%b%nRy zdf&I+3iIuw4}D(7-@bcf*@MAv9+PEP9+G7*U8K+~`{n8^I~M#ExNBaP-Sf;WJDlgC zv$E`7U;~^F?gdW(9}Aucz63lBd?!e9+55ml!4HDBfFA|*-G;NX?Ec_Z@HlW6_*`%j zyeByS9FKPtcp>>e7+gU3bq~uj74cT^f#B=FcT$Isfc(q$o#*Mj9i+(FKL`ACz}0KL zUc155l@3?|Ukg42JpBADyP5nJfm^`aF32*9l>O$yEV}}H=(;TXJ$MuNHn6om%kD$G z(>7!oQL~jBy&l(ts`ouNW!X{SeL&IaB=7;?S>V0FEuiReHF!MO4;}{I04n}tK(fkS z1b&cwz5!mv^Ghz~8=ij+ZU8Uc?CCw@QpXp93yAkBQ04e2_!97wpy*q@EX$4n$3V67 z6nF*cJOflaf9G;8@WCAB>z!}z z1l6A31&;zxXlB`iz@?!0^&(L8xfEOsJ{%PNZV2JGhUX`M6eW8qDE|BX8=E5SR!72r2OwZ{=tUjF02Q+Qqr z>bnZK418*Me`g5)F1Uv9`8Rk!*#w@%b6>z)Kz;vGQ2pfN;IZJJK=I*GH#*&xfJgG& z2G#E$52~I|1I0hD29@qxLDlzPL7F`KD!3I~ag+CpTfvPye-JzxJoIMz5_mj_=*c#K z_XDp6^?nE>iEIiy4g4K=82F%Dvh2R#0#I^eIjH!XK(*&Jpvtiuv~q(g@8dzqo0ov9 z-y6gGkB0Dn3-|+2?e%-`f#AGby?hS_bDmd#OTmYOtH7H;wbxrh_`ie7_lU**W=D!&}mcV~k7ZVjmX*Mp+N!vhY0ia!ae-Jb%g-QEhS9X}l2 ze-#wp{0vn2=RMBzKNeJZmV$b}20Rhm8gL}Me=Ml)o(-xzw}I+MZvw@aUk8=nJs&i|K$Z6wpuW%k-s^KbsPZfWmG6b1=(Ph>d2683nF1B> zsi4aJih%C{74M7SLhyT_(z)jooDWU}#Yd-r>%m@d6?i?U_IwR^Cipf`>Hi2+IqwG5 zu17r4+wC||{B#Pq09+30{lmeP;3Glt-P1so7hD4V9e6hQ2JklUd*I>Vlb`JLdN#P4=i9-P1eM>}&-C_O2dZA%z_Y-9um^k*cn0_h@DT8B zQ04dwcwcbwvs^Ep1?qV__zHvWbh17{Ivtr_j|yTz!!ol$GgBB{1W(3@b}=M;KJuP-4=mr zw}*k^pPk|PI`Cqi_l58e1^gsf7 zsP^3j_JTv8%Ktp@5#XJm=zsL{oXzceAA`%l zdq3afp9LPl^Cs}Y;C4{-X@IK#GeDK=4)FfqTS0yQVekRq&q3vL*bBTL9S0uE^Hxyl z4uJOoCqSit6ZjzTMc|p>J3;a7e+K*wD0((eL*m{IC~$`A-B@@6$oOKO0o~ z7lrrR!~0#J(w_iN1gApybHL+yehnx-dp{_;{1}`M{ti42lyR+e9{`H33&9h>hk-|d z+d;)21l2zqpuU>|Rjy}-_b&(4FYW+y@av%Z<=x;p;HfY5^sWQdPa5DL_)Ksq_*?M7 z;K?uZ`kV(U|4m>ocr|zy_ylkR_yJJq&U?A{i#4G5<*}g3_heAzeFdoe?f}(ZpA7g@ zQ2qDFS9tiDpy+oEsP=AxD$nac)&Ha5wcuyL9pFR%!TI1;P;%^}p!oBCuk`w#3yKdO z1*)B|2bKP9xZuQu+swG1S;2Q9=;1Y2Dt6iS1277oO1eO1@ zL8bpeP~ZJ0sCGE!HJ83BgUfl|2P(bW!HdDKgX_SBxBK%TxR&QPf)|263HZ=E zJbVn?MEL8$4d5@q_2BB)dpdi;jXb{xJRkfscpX%;!)gHeBd%*n7$XIYI_&D&yw|INM3{*RO3|s=v zd#l&~p`gAS1DAm>22Te+0WJoA4(hw(-{y4M0g66P0+)hs22TRN1}*~s0A2u|{C02O zU7*r^9(XGF5%4_lN1*C^>OVT&mV@`<`Aks#VI3&?T?;-4ycIkGdix9|!LZ z{vH&+X7BKH9|oSl<3?~Zcpa#EzYbLSKM$(>e*jhAh3|B_ZUztK`4OP#@@VjA@M)mR z@d{A&cps?mz6*+v(bvdYZzZz6I9u2B~d%@$t$AOCXBJd&LYrqBIeo*!L z0eCO)xOd~f0Z#(e&MyHK?^B@o`KO@xW96OBk842j>t^s6a10cE9s{aAPXX1QcY^9) zzXipQXT8VUX$llwUJHs|p9fcicZ2GGE8gq%u7l#Q=Ygxh6W{0UbvdZ?CP0P%BX}A3 zL+~tc)%!i48mN4p4~lO-3@X3>2;s+kz}xwJa9|#N4m^SPANnWkQ=Y#DioO?r$oXO` zD0*HCD&7!yJa{Xp`o91?1bk({+d!574p86qeAwIh98lk12EGX#1oi&tk9hl?1Xkuz zR#5Hn)csD!_ks&~{uB6#d%*u6bvpd$<*niHl zI(RXta=Z(CIr)7S90Kc~az6jkr?Gu`f4|Sr{)Ar-l2vxYzrde7ulrY*gF~OC?u5S{ z6ko6Zoac8jsD5xAsC*s=9uB?~RDEv?;co>c*FG7ZKMRWQehhw-e0o0b_Tc<4(zkdX z1Ro6^@g=AG=$Ad+NpJ<<-2$o{Zvo!`z9YQv`--YRhB&qeCMyTY?OEx{T7>r z=ePf!u@1QYkN8aqKb=CUyzl!Hwm$fhKf51lbvDoV{#Niz@_ikscK8-}I{16=5b&gV z^Nd~#z(qWt4yrx2f}+dLfY*Z8@Z1j$DnC$iB|pT!zW|i{*$CbryaN0w@hadN%DMHh zdDcEpzSlhC%lCq36Ym$`8Q>zAY&m!>C_Z^AsP=p=C_ereD1Q2H@GLOD_dK&Vt_Ial z9tU0uz8zc${!hSs{ygjV8^DJVJ`QdIUk57Q&jQ~6KJ!eDoB@hIZUyfJz5o>6UI88f z-WlG13{*M41&)G01b2bkkCa7;r!M0PriIE+Bf&q0@WYSv?@k7l-wN=4;N>CwTJR{I z$3Uff3#j&dGI%0*JE-qI0;)XU1|>i4eShbt^FYzP393A=1jR4!1l3OO2UV`SK&AIn zQ1!eg%&qVTfqFg-RQ_u~m2VTc0Nfd#_kfE3_W_>?iqBpIO5fZDD&H@HO6Tj~(clk2 zwa*_xwdcH}J^d3w#aj%j{%3&q1vdrU0g5jwpybHoLD)BYGAMp{8mRQ23+lVqflB9{ zpy>YzP;~nWsB--VR673+D&Ai}(d(#Vyj-V&lFw^F(QOB)^rt|@dm5;A{s&O?cy|c@ zEGYVYFTDR_cs}yjc{Ywc6%^es02S{M0qdaX`8aS1_;gV6;oYF}{~0JbaLjS@Opl)n zUdZ!aQ0;RksCs+?RKNHdDE|C4sCpdo0MGA4P|v-f;%@|1udBlQ8mRAX3E|HKmENmB z)$@HJ{EJ}D^AE%Gy^i;GcwoSV;8xx*1s@7df#Q$bz*XSeK(*8NLDBKop!nk6CwTrx zgR0jlU@y1|)cXo3d9fQ*zkdxV`n(Oi1pEr9`s62iJDmZlpIi)zzD-c|xCvA}p9`K0 z-WHxe28z$V44wu47x)Tr#RHvhJ_m|!UjfxV{}IAZe$YI#t4;?u6Fvf-4Za;zxqkwx zU;GACc^5EQB)VJ-ZUS4N`13uW+UHB4=<=Un4&LJ==bux+lXyNKybgR6I0(KMycRt9 zAugY81jS!}2VMp~A5{JC0>%G74ex&gir)@D+2#2vQ2l8bRKIC};`dv@4d8P?mHR88 z^ui&z)B6nYQl2jYH-i5URK33ps-3?Bs$M?>&jAlv;Bxmou%G7%Q2Bll)cbFMk_X2w z^!7O!RCz7{b8s6d`c8o2&)dNj;D-bL8dNz?ImPwrHc))92UNLV8J<56DxE)pYM<2@ zQNn&uba_^Ies6gGF?c%RM`J7~-orrUGYp;qJ_nRs`2;9F`3$J``Zg$f{0US$A9lLy zqXnSq*#h&SmN<71=SxP1*$*Q zK+{{G%71%!zdwY34ix=<5#FD))cNcjP<(bdsPCQysvK_sRlfIwO7|0B4*n2S``zoI zPQMERUIMBf4+kYb20*p{v%$6C2f*{eyFvAjHOstSPXI6G`7NOG`va)32C4@f(RDE6uD*hcI{9T~>*+)U8|5Z@!d>5$n z{{pHUNB272R)9+9(V)_4fTGt;pz?nKcnWwMC^_;;Q0adcRK0!+O1}ODR5|ar-1Auk zD*rX02z+q}{|G2P_#LQnJ!HkaYy>X{CD({~_^^^Oq zbh)<<6#btFZU(;yUJahK%DZKW#At{(d)Fc zykA@cF5&qppuT$tsQ2Fu&&QmN{mt_Q;8O4gQ2E^kieJAJo)108zh4cCo_(O+KN(cM zcY@M~KLFL=Pkz|EY&&=jcsck6@ZsPe!ArnP*918Zir!xd&kN4==PIc0-U6-z{}jT{ zKhNJk30zP37r=|a%IMN1Vx`$f#Tm!gW{7ff#SPAfKLPu-{9|`1*$*1 z7(5JoGbnlS4p9B(y^^H@;)@BvWe z{3)pZb=)Pchc|<3d42{ce)$Y2KKn0F{btE#*9TXCm-74sQ1L$xt^|*~)cJ26sCF9% zj{rXas{Wq>RsYX}Irt4w>HY~k6+GoKmq(X?l22EG>W|lh>PK$|#c%Hd4+jsq-061& zD1JH>R69QwRK4B@t_FVrN*d~;b51rNKz^Vtb1y*^Ow*8)YSmx7}6yFsPUd zh1)&eBf*_KzZTT{yTQkUi*~picq5qe{7Y~Lc+^h+z6y%|F9T&i+zpCqQy0r2nQ z%Yc`G4EB-AZZv6WM_iyB3itD%#ekO5yx&JQLeZzN{ zYes*4SK*rA`O{qbJ3OF2Ve|6*7asn^^)FoNXW!;JkF@UK-7ib=Kg0diA&;wwBU(1O zb`U0hU&l4X^&PI)5chN7wcvBX_;-2uemf{0dKcHHi1Rv7yz&{YBe~v2nEv)~oxs&Y z{BMEkAKiZ^g#el{yC?A;&2=kb&*%Cg*Xs#?6nG!P^{2IJPxjjk(Pe!~kBIXO6_NfV zgY|cB!affk$#-X22r>h_AJ-qa=JUP*t`F%i=lLw|w{pFLaQ&Ul{c6JR%N74l<^FeE z&j?|6f~OI$AKV7M4*V6@e{iAFvd3`!jE^Nd_4hJ|?0EsN0TKDO)=)v`kcRZM{{BMv zC%}(!ZQ|O^GvX+FHrFVZ{&o^ye|tehclK}GzXUuVTom4^pX%=do~v9(ab3!_nlRL8 z$KL}8|8odA7Cb4ue{U()i?~0Qcr{S6^-$uh=2?GqZ(B#G`;T*vd6E5q`xe)4xUX<6 z32_zY>w3rY`@jJO@OL$Fz7O8Obp@B?@1w#u|H(W3y^`x{u3vL)=h9!3I2VR^dq7Me z`#Y5X-_QLwxlZSLPYCbv*V%u9PvaU6;co!v@%@(xL%ekSZ7e;1uk_~W-1l?6g7;&k zaNT~s^bKM;dpg(ixt_?o$AZ5I@&5;WJI@!B_kV$-JpUYg6W3F@q!(6#KjX@|-^ld? z?tcjCug-NT&kVJ*uULq$2|Si({oM-wgWdUm9|j&lnEcfb=l+k}zZATa>myu86K;QC zo$E0?EabY@0%=Raws8MZzWW@P{`$Di;JzB3KN4^sh)T&8^Ns#Cffw4H&!629?!Q8u z)42a(`0gIyk9oc-#}Z?rC0w$CBN`#Jbcu2*yE?`ed6(r>djga6L;Ji>ktw!rxJBkoTL4~LQ7v$#K! zu)pJa0M{3}^jGD27x!PYCu9uwTewaL?|1X<;k>&i&u`(%dDh<%;r+t{{+6)E+Z$wm z2zwB5-%Z$B@U`Gl@Jrx-aeaYHfB(VtEaIQZ)yMUZ;oIYh`)P}T-U1thYhL7y;Gy8d zxNhfOwuk;66~6N)`X}#)xn529B)E?2@!WqZMhLhSd^6$4@qQV2G}l`R`y}|#Qrs`_ ztiN}IH;4PLf~&Z`!?l9zM6M5T-A%kU_-yb`;6HPHolAdT2LBa&9M`{uuqS{o4fl@@ z_)zc^$~3@rgg)f&AzbJ4tiOwS|4OdMa^C}0Y&ZCFu8a6ab49xddj!w# z18)ac5_T@v@3^1j`gg*2f_H)M<$5yL1ka~{U*dW(*ErWb_~s<8x&H1$ygw3QO^CFI z=fzwf;yRA7g?#@Z@HU?3as3b1k9fYG@KIbw4{?2r=SPC$DF)-XaQ_={8&^N?AHj7#aj)n37OsEgzRC4#F8%!h zd@=Y{t~K2MH+U4+KCX+o^tUj?eLMH(a(#{GQ^8|GIJf4{`UjpbBfoob@z4IgLD+}6 zUdZ(Vu0>p*-^L5-m z61S|b@;$Zc-d44p4>g+kc%@z$uGNS0 zb?tVu)<4;JtmcjW-PM71t2f^{Qfs9zCYp^swZUpDADXNWv}=ueWvteovV_KJ ztv2Z_%bQgas_wD-fo8Shp_3DX;jU62%m=GuRfW%*>*jV|tGBDe%}Sfx_SV`X`NrLq z`fwxPzG=tK{Gw)Myt=p199>kDZM-@#QmNNkm-Ot$#2GC_$anl)0%TUBtZc0;vE z@u~S>ZD^?4tk&B(G@>fh^`hEXn^=@)kr3H>C$|1Qk5cAUM|bM7Rqv2ZfsZO<#>ZuuIUaY z7@(FSW@DT})rV>-TfI%=tFbncbzN$vi z`qd8l)xcPV2B_6X;H5Uq)@+RDTN?0uj3E9D3^h|%f{h2q)S`hgy=_vKd7~aO%;8>R z(cauT4D6)N*_xb~5KWECryxvipv3)NJfii(N`p#FtUNH;EcFFQIN549#%ni-d2+HI zueDmLuQLi!VI>ujJjN?9Q?{{DZPgdGbM;Egx!$PvwAz)SA$7$jF}$D9(z%Hx=TJ!M z9O~SeBcQtD8CSaODqc0}$SA~@x=SUBE@Oh_drW{$RBB`j&)oHxSLI8W?wF#f_bpwz zCht@9U1FED<_hiQ7aet?WqacQv|wn$F{9GLLYim$0yWhhahD; zU)*ZsQ;kVvV?Cb`hpQ{MmJiktCQHbm-JGoUE$lVnA!t%pU=TCGA&lx0KzS*sBbQ2xs8m-ndny-SH8Qwi+O_d&e%@MWMw4&eu`NI6tQ9MBlr;)^yc$a|<5%a;`qjnN1`Q$kP;E9F%{BRr z)tj?RB-W5S&h?1hN&1WAhjdt!FTE++KxF{AR7hH4NxQW$Fe;X`q$p;L*%2O@QdeAk zRPxqDb--kQK3bhJ399;_nu{EU#~S^Wv8Xq%pG2ZnkyEjprL3dehvn8KVG~Rw%dqBB z6nkT=Hei}T>MR&b6b7w;&RciIW<>VjM1$^Nl0)61DGg*6PLZ@K5=<{wCT6BVI~8&Y zy3&uLt>O|nS~r%r<<(tI;z@U^Q3iujkoajf#`4A<%n@k;BOnIcWV0@%87ZFflJE|M z9f%qnDO{L*Sat})F?usewqWvBjgIH-P^-JLpsNsV0z#-PLH{(XRIOENoSCT)P0f(E+LZp9XsYHVfMupR2#Erq^MgI|W#Ww8p`1vdeiWEbYJ(8PZ zS^93ZAG5aFJKvfx4l<%9a%-{L#Of`72??wDSc7f{+r@eyVzGJ#YfVNmjpme+*Edu_ z;~MNGe~!6Z8VJC8LuS)t9p*>NU9xlM75VBFt6hpoCpIf+ECvA$GD7i@r6r51XiPQ- zs){mMuk4`<$Z#sEt-On_ft?6xS`*k)5P%MZgrM5vm5I>lQ_Ta(>G?__kQ08bBGN-( z#~8;`30b8)qKJ^tA(;(ydo0JEol_Ild<1Dq?^h|V*>ZVTi5q+CsB7=1YM;T{aIKBV zMEfJr_`flrvDIJ@y0oH(7zfvUooUV7h>d1t7{VQ}6~zJn$E`Qk7>1!>Bb27~0F4#; z)urhYR(}oqFugE}d~DE3%g}a4Xf;A;aPd)fpYljy>#f!xU>Bh%NAqoli!AK%^yG&H? zvfE@Rx=oA=y14PH5#mJaXAzXiLdZ)4?v!G$O?6u|6?voLCu%3L{!j zL)Ge_l%31_kW_DKKb1ISB{4&t(qNdbM-z@WHps$HM1%6~kJ(dc)*2Wbva!Orxky%a zGD0(CEm;>EvBSzjgwUO8!x%pj@i>7r3b0}@8s=_#I!VvR1SwF3o;QNgIZ{DWO`sP> zG}5-_RnOEwu^6+`dvSpjsjG46yCN%;Fb@@ag*Z-{F%!2Tv&h6Ib)Cs7R>mGgvsc62 zBdR5QV}1$hKs7NiWk5tDj`XXz!>mJNc6b*N`Q7j=XlIsbYA*968Z&Kh$uKpmizG&f zJ`gVq6c38fO(JY9niASNyVA33rSZNw8doPGaA6AL1duX^1hQ=$EZ9$~@-PUbe zHg8?GbMuy6SXB8qJ{U|o`n$YUa3TiXR{R#(HfdSe;^qYzS`%DhGr0W3u)Az{xXc&> zo8AVWGy2Hla4@>bIz4iWdKOtrYs4FD_r=v-+;WS0;)jct^k!G!Ev>gRx~d5Y8?cri zzcTu>H!7W$hu(bq`jQ1qJm34|ODO{B9jI z>C}=eFT`4o)ip4xzDWjA#M2b=$PA1~5p-DPLFdB^E|Ge3e8SX2`gLpy{n3^jid0DU zVKC+;rc!4}!VAIQQS>AUvxiSsM5U>0d(|zbXfD{uDvFTGAm%xOLsrKG3e~wi>JrZo zib4msmH($D`uS=!;3=2M7}i#$u_~ zl6j#3o+qU1rG9vW@PNz4k0S?lR~u%hZ!e1CzH=(W<&KNB*({FkPs^G<&2y9(MBGqF znqYm~+=N>P+VQjarVq5xS2 z1+3v|ccnVa4H4S(LAS}_I$#uzpy^bJ)Oe}>xepqx<)VKg$hg!}GM3lN`5wm5QFDdy zX4(9*;u{Cj0q|X^iS=P=AYD=i*x*XG+(PoX`)mL!ywqJphOtfY}l z@=b|VLT+x43}f|7B)zC%pZY8xj?~bam>djFac$v~9gq#vn+Kh#`K<9uuuVGR8c`v3 zYos<2{DbDBjYTms1+RxB9TPf~t%sb(#QiAf__2$Wpx~o18RmN=)UYe@`9ldc>z-O` zl9F~(ZdtyU3XDj^VnX5btH521%AL|mBhn|4Ho9z;IbAE67xHUE3iqX$S%>SML7QbB ztQ$I^DXW4Zq@}#}IItMZH*+I6^-gXlDfYtM2g^k7nshFbg;Bjktq%tqgwTX;Ez+7W zkF#heZ$gjQCg!pz3M9tGJu)_C)G+I=+#|+nqsUqtAT7(=IL9>Ghj4KYE{V(z-Xfy9 zH4c7@?8BN40-9o+_KlgivTQI;?0c$~`jrvZ$X^?pD%sg|pQKz%eOXzPl6gWk>{OYU zVn&m}F?vPMS0>G#A>6ZgkTKF~t%)&sSQPB4+F)Z~Qc|&k%LmsFJvV0x*P6W&%hFLn zSS8lLjqtLUvSL%YMVjh7CD}90_Ag5z#3RI+koyGsQ489fA!6kH&e1>|X(=Aeh{0hK z&ydxnp)ri5XhV8MQ)%TKnW!)~E+UGjilQkKp-+s0Znu?Z!Q zjKz-vk*JzoD!QyloUGxnXc_z64fZt!va;Dj%o{PP5n*}MB>9Wggks(obYd5GMmb|0 zwdgU?eHIyX4&?~DmPe?8WWh6{l7}ql|K8bD=4e|Li#41t_0Ef8ydn|f4n4hqoyOg* zmw2Q|TWy57s%hbRhzxJXep%L+44#T!FZ!56z?N3PqCU+QyoXwQfxAeH8rs!;K7B2w z_S(%t$_^10rH+aOErJ+v*F^xk~$KNaZJcCWx}h&N{c*d zGg7IiX;FdCzD32mEE-<4fNZSb8IHrt8MGUHvz_}o5?Bom(lD?zO%^5VWLpbwOm&n5 zVX&`p4?$$qu$3zk!?OVFQ-BlR`}H_0-$hP{XdH!d-{ zcoy;<_?S{<9kL-a7J2ur4JQTcNdvCiaRE zpzKOk+hMrWr-FHTk0S z(ISr)D7(l~UPS%l5T>7H6;Ni{_%<#a=p3zy6%wP4u+9&LY%=bt4Rk9P(Hp-H%YH^| z9iVkH#HuJE;wOHSGR8R+lcj@5Z95y0mD{J&TEYb<^=FCCn4H<}9SUWGpG(8nl46a* zxq`hL3ev2OlL-&Sx25sd%*j~G%#g%5>%?jpg()o>56>;)xl{9^VFqbjgqO6Rtw7}? zXsdpsvXlj}cOJ|n*-T@sw$QibfrbsJf+tbB19IBDf>ZJ;&np=}aSYU{AtZ9knMSSV z{M?nfF3l0jZ1TH8$ldB#;WB$=8e3V~2GAA(Bb!jm4wyQ5Mnx-$&Y9L4WpqQ;p$ zHV^|dTX#&T&7BoR2<=a;Z2CQw(vEf{m;zVG4@;%n-?Bl@~13obUNQ1W+PLQUiy zFR^;51v|eg3tdJ7>cCoMM1QqK)7EI-B7x2_s?Y$M%AjwSJuYVF@lGvJ(g|>a=H?i< zhhaUnjIM9ZfDTreF4n}!UWWE?7_T)}pk2*>?YtdVO}G!PvkEi$9OEob2ff@8nH=XG zYFH%YdLwyu(_o@=*_evb znae@2Na*j0HLS%VaiUjKi%P83OAMgS5Sc(SC?w?Vj#_kq;rhi01b0RPsTbMAmDL3C zTTTonFzEwvqVNg6j%f~W7g=GvBCexfl|6ig7adhvt&F4bV52bW26?^A$x{dq*+A5*UZQMozVf`g-$NDNcf;u~Cd9-UnJ4j>^E>yBC z`3q-)92`tL%3d+2qe!kMA27>M>t7mmo@9zOF%?AvN|R`_cq}af(W@~Etra0lTzmM! zb$PO9tq`37PO^zV@uQk9kVKrJRln*kopNGmvPnF1j+py_@90Db0M>|#XwG1+3~jzQ z^oZ1Wd?1@E5XOhbV%sLHUK!AEm3j~fO=XK`OpaM|8BghcbgV!$>1?Z)*1K%N6Jzt- zof58Kg}C=j#ET_~{lS}prNh;MsR1peEP1I?+!95cjWttOwt@?KdmrDX2v>Ne17{Y- zV2SAE!KqCRxu|CWh@4n3Z5+>)8#)pojwj;MAL`cSmF4uoVgx3`tmPUcZ1tS6LhA6l3?7R_2(Yh0vCK4E7? zcR9(=e7CYk*i4GN4xOjF-Du*j<%T}c;)~f;Z({SzLD$&Sme^!z%x(CJ^uERl64 zM|Sdm<2sTDh#gt1&=j9boK&Ts-L^#T#roxGk-HDK>q`My#*qD z#rL=c(;?fjXgt68=!vkRjh6KK#P+RNZAl~-|o zKF6O@C6hEvO8gwhe4Q#;(UbR~Z=LJ=zGA=2PUsgx;{etL)+`I~;s_8Pa>ndhj2EpG zL_shvd`M-sXW7|m&QII5jXhR{CM;;^UKV8w#DY31JQfHiZEI@cHV!h2J{5MExr!8n z&$L`m!&Xf|_GVH!fyts~f$uU~(|DycaB*jAEVD?Q4tic4y`6{}i*7{- zw`^_sZP1g{AF+!a*4NW(?xQe{n*_zXP zS|@2JcW4pjH!xOM8{J;=#sOSbON`g9e-w|dl!g2MHCiP zL`OM|nvQDd=%HyYBsjLa_Pe>hnrW>zRugohm{=!112e5xIUUWhm0dl;#%0DqHqxD1 z%=&%#?AgoAg6x%%ilQtduq7GGOSGK^{T;Tl7gJTqV7JtX8IM2k+#=(_O!7=+hs=x&tyhwZ#Oq41L9iq zD#KZ_?t^)d|J)ewRQqO$N3_IXl!CPOXiB-o`5rbadD>!Ra6iioY{UJoiLuFMWo$_+ z(|6eRakD5gI_{zl6jOf+@+4D%JHWN+A0XE-9A8>En*KklPMMky#u^U`7s0zFhX$r<%m!CahAQ)5w_3{wNu5$|58Mj}JBUEDvf#Mpckl9Lgrz zRyzgDh1>CvI+CldYBRpAT3Yna)U`r2aqpIP&lK9nA+};{Q5#pd68j>sr`S2%8Y*gI2ueAF)OpkU4lTCEMx&ewfG&gA} ze8%U}htrbgUFRGu$K=>TTU_4Vue`5LGIS2Z>pXN^tczg=Zf3+~#TYQIxr*j;AdU2z zjeavmXtq0+Nj}W+^ZJ|T??i5%w%DhLdau~N?b1yfcJA7`Zp)@6^jv0fIzQ1DYPSE) z7ZgUDzD)(C#G}_W$fMv|&ie6$PiHtWQJksHT-n(F_&&oDN)JVTCq))Q4>$>vz`nUN$#V5wH|N{b0gPa1Ya zR_d>6>PS*OvpomwKFBoblxfuf9u(n(^lMZx@wsCbGR5)%Ta4pH3JFY%$kYlaUST&@ z`N*cTGCx>~7IPj*kFhdEgs7K`kUATbQqhoph^k7iK-2Cs>Fktz6g1rdk=8M_NGc;~ zDKN_6^7roSFN)_*Dqk~Sga&yQKg7m}aw)|rg#{TmL+l{EiZ^aC70-#mJqSh&2U59L zFUl4BOj1RYDrs_H#>ges2?JWsGwKH_Ot0pZb(w6idhph3oQ=b0V#`q&OocUvW~PK@ z2&#s1B=!g&N|1$5HC#{e;|MV=Vd2}*0?9CR&P$J_q~!&Lr4r|*IFWt20|NU@3l{s7 z10(x%hDik!(K^^CMeHg(tP;d+j8S5qlvXJ$Fw_jO149*WLgVUSL8uTUI8>$St!?@#C#sJ-vAwcqW(;%q_(5%G{7`0rno=QiEeQcf~aAV20330;JmX&q108#IG>QQbIg_s`ssx|c7R-1 zTfjm-mJ^O=CacZQjDL^gE2Q)2UG20(8hcINe9o@HsAQ}+(!koVF|=DroW|*^nJ>1o)vf8o1cTv@G?yc#{XU z)Jm_oV~2n&QDy^Wp^7Ksa3-7y=~5xYM0J-LC;DlOz^D$+*Xwf1^m-1neAlbP>H1*Q zf$FZ{2H?CpUt{3YJt+r5r5Sx*r5NjoqL`K8<8w>tO;o0&gG=dQgX6qz1@{68vQwmO zhs9Va@yo&O9QP>OKQgSZ;GH?tIb6-mB!n||Jn}`YpV_%`nYv-u!Gr9C)4&5_2cMv^ zCH>fJI?WhpU;V*+80E#ZZ#lQmO)Q_m(6I_|kk-A3i4Y8w%DQV5e?I>;mX%k=n8$Zb zUM!GVR;-R8qMSO>VKKu@ipMC{)st+n2C1`u{pxmDSIFu-vpcH1q9Vl`&|?3`ckzM4WP*tlaXTddzE#E;ABQl?2c;5=~6 zM^`P>F(Q3(h!rku{6x^Q0a)gL5=|yRUGLirLA6OX3}3=ZIPHwI09zrQ#IZSkZEs3A zX~nvyZH}U2+nxmHCb_A_C_bHDq=b1C_l0SPs(0?RfJI{^;+l3TB%AG+P|QNL+=!EO zs8_zHn^SyZpc-6f#WaFw4YTJcq7bmlr@U@TZU~7XVRrC~_FSK2@o7Ha&l)H~-a6_Pw28BTM z)|=%sYX^xx=k>{tQ2oE^*ITqu~eCVu;Zok|VH0 z(8fA*GKh{$Ul9!Y@IF1wcgC8P1()Qjf~C87&mn~ zHN$4J;xg-n`p?}35?qn>?Oh7?L3BsVFjTFx8sA4E8oEiq*eC)arX$t`e$YS;qge9>dsIU_}N=P!i zjTzX?X0YvIsVsvS;YRy9o{Mj@K{p$@d}P;=HjQE5x>qVZgak~LcYoNCtZ13s$d*uH zUlgnw@`%9UR!#^7U?a(N3CaKti{n+F(!$u4ev!`0Sb!v}DfNKhO9{crZxo(wf|TOL zaI>vhf{bt|pWUDwUGK*9R3j@859E9*?2Sy^W|Xj(8bZ_Oks(O(egev4I&T9$R>ucgEM|7ktoWiiSJOgmSXb~ zI#MN{YS&CHoQ+KSt4=NKD)laN9KG!x>z5u1UdUk`+z}=S)={4us8ZC8L;eJn<6V<)-!d#Fn`G6YUWmHNz|k z%}MMj%=AZ$5T~@#TR(UpJ<86Hab-Eg2aMG)3JP!2o9P-ZeuKDVqO5{Z9lx1geP5^# zaar{dJ2_)k9p}{4#$T=0vDJb~LxXo)il~R^zb$S{lwy`rDpZsB6 z)AhxRuzaeB8WJ-vu|?AzYO0tYD?%gP!v+K;V*HE$4~Aw1oSz3|Ya~r+$L>Z%t2usa*51j?E<=?r+H=qe(H( ziF>VQ^A#)@^yQS@-v-oJ}_=zK*7$ znNV^pPylU@1ICzF(8?)!2a8Myl^2Hh>^|3AP9$KOwY4wicprsziZbJDa%UYrZg3>h=I}vOFtX%3)ENNHF!a8PW_pU*die_d77z=ZkBmFcG!qM7|T#Y3drYd=jWV!xz5Vt=xONhI$y3 zc7%!M!#J`xOyo4HbA9-~_{6)=L4W8y>7b)Wk{x_yQolOrJiL1ybo9;+@K=APe(=|R zgq?#d)mDB6z2){~l&YW6gMp^ED&>q_>95Hz^r(aW#5-0vZ1bSM3f=6W=NDQW z5J;jv_rLBO2bIp>UXp|8I&+ldAbQdqUmsk@nj?XO>t}N$a1h;Yj<5fUUU(3x9I#W) zoyI}+vjZhz1LXfLQyqLSoTC^A(<$fpeC|H#uCcK8DYPEOu&u$fpPpf9hkRf@>Q-fY%5#gaacWydVIAIUsd+L7GS0dE?An)fdJaHcIkPDdO> zE44eI@M9V$vs|O9J)8YZ7>;V_+R{V>L;iR^LP$qL+c2;#E!s+nhw^FaplgYekG8#` z@$A}+zwQ8qE;M?${p&}K{Ibv~I8KCKG`*p{{Fh@sN)qSms)QhPZewD)F;}9+u zi6c+h4xIKTMo+fUA+U~S+0zMLB%!lm1SFiXJ5Z;uaK3CwqZT1OD2NziOCXLz=sO|o9H3ajC4y|cv(Oa zT&wvhah1!&=o0qw?u7|pa(7hN21ef>V{1-SxH%V)@U=00yTY#v>ywy^%~|WmR(o0M zqD|Y%L`)oatfT)Fea_U4ao5aRm6-}3=3%@j(YsVC!<_leP(F8ps0?(S&PDm=Ztv=4 z7SAj3f7eu)wl`Q*&3O@vv%viHp48U%HflEHj{j7Z(JXR-QCIQcpvYDDp2KL(Cq8IF zvTzsWV09P2hE~WU4j5uGATFdS86kJ_VTBiS zm`8yk2OP`!;p|jFn~Ss}gGz-JRnpJK8$Mm0Vjfg1Hce;^;0&onPN#PIy#lg;(Jii) zp%?NZ)F7L5qbafq&&>AfKg^xt=hM2GxMPvJ#qL~FVL|G_$nfBQj~1mR-un^SCZBE&bCnVY(8V0Qfa&jt$ZAXd+0gybC@TTjJEr zWlI2?jpKyUV!}DTFjFSTp`1Dm>8D-;iSRiv+0A1Ee z)c#4Fg*CkXi{qNr!K`7T#AUx^sQP8r9bHn*D3X>4g(LBz8<~LywyQOo);P?zZ^KwN z_J-apv0uCqYr^X3@y2*(lqjzni7(1lY7B$eO}4Vd^#DN?2E`nQ)hzV%^#V7C*d`UV zrOzkLOm6nFe{k`VVri)2EY>~f z!L)~HZ_a|QNjATv6l`6Sl9(8oYUy`8Vvq2p)y0u;(bh=y>P#Y@%8~aYrn% znlSdRof#`uL;PsUC^&VM~$;6hEUu@~WJPh%0fUx4yH(S2Cwo3KciX4ROS^ z|C)DcyZxGCKZ(Q*=Wy~9g80OcX!?ox(sRci#}aiS`^k4^qzeP~P(|E)Rpw_0%f(K@ zOzyVv33k-jhYQMaI_LCI{~C9uEaoQSV8f_utbkaJXZX;zahZ&9wD*=?%himyNG%-) zZaYNvyM|hi=SP=#?Lwp4FDS}>5FbSvSXyzsWye6+Lc6e6OtGaGiiQY`zb3oU21&ym zyP9v#Z_*kz+d#n2l&0M3?CqBu^eu;{HbiP72|S^8^tC!Gi<7sPGK-6 z4EsUOyV2&`Z$3YpF)C8ZSFm5CwZ?Edt zOM14nhHHa8>nDd>Jv$p~^7&V6>)Bq_d2viqY{cMRldoE_>dc-MD|^mZk*_#o&8o8> z%3Aal^Djr=_3V@diIv!BlK92jw&z^yuiU!rs{FhS+qUjpw_)dn7hSo16Cs z<$ON#lg4^>vZH)WzJB}Wott-Dl5g62@#Vq;eYOV9>!~;9Z`r(MQ&F##RA+Yw~mYYwh`0*oi1T7qL#N zMQ(mTN^9+^a~a3ztdzBj>-mDU`N}2d&d(Ot_un~H8Ew~wm-sK(jJEv*s!h0xYAv1X zs9~R!0i9Cca+f6dc>WG|4XrkO)JN zHg7am+kcx)x-*=fm{`Vdh(iq4Y)oLLl9b({t2LbBH!E6fBP0EFQ5VmUeXw@;0L_FV zEFZ>vQ9LPIBLF}Cyl1>R$`9|gB-qHHzd1R|-2}!b@>h%S?D(LT7=>_^chZ)h#WRys z>5JINz+2IbbBEZ@qP?0qKRwew)yju=S2;FkJd{IGtIhSCiAVCi*|zb#!3idpSBEji zYn+`?8O%1ZqpLMqK_F$9?cRUq1m~GhXZ^NBeRPcV2YdJt?C@e}|D7=$;&Ob@mMZJF zIOM6CvC`A79sBPb4GAE=0~N=id4FRR-OdKpe1fMoHyAd1{P>|=af1{K`?P+B#N*=A zR&Nk*41>X|vW8KWJg?X_0BE-aMbb zbm>mKL<|epEL|FY_jb>uD$Dz2_zU;c*(1tvdj&gka4^ZhnHqW3*wjU%Q5sB-?6UaF zy3|OrnGU6<-DtlMDBgkHr}eCn{kPQzDLomA`2HK+;qXRkMK|EMHuV>=S;sGU_l#ns z!lU@=j3muUzJ)C&WAPL${lJSD5Nb{Da$VULysR!z%F|dQ6slS`wpJIHWd|!lC^c1k z|DEcSBC{Wq+~W5GW54lU;brA`Uz(Gq6vMF$FNa2xYVUN0UKN5W^dnW$-$LZkW)hAJY!|nX*K(>3PUdP*m+K}?n#%`kQd?|m=wmH>>%bwDLdc1 zjf^B}$BS|aM(b0^OosVXcU`o(lC=i~Y}RqqHI#n(z%`CKgk+vd#xE%JK#A%ET8OS@ z@>%|0I(>4im~H(VnO zv)Cvy2D zH`Ul~={@>%i>^azRrDuR3d8MSRrAd-Zd!`37*<)$NAoM?rFNUGdCV#sZQE=n{MX$w zDD4tWY0ud#1G%DQ{gi4s6M-3{*;)2GE5nH&+%yRG04+TR$v95AgJM$sfm5ZeQ_Iu3 zxB~K#-I`p50x}Ou91U&FaPD`*S#|=Ya(PiSrer@|3nh+gI`TxY+)JiMGIz*=E;iYg zrr^})gCR4MGpK8IyIMHvS_{fc?Nc z6>RPA=}2hqEW!~Yp`!wI7!#fx?49rJ9!)@qDjG>Y+PDkF4`uxTk{&25qD$!1m=YHg zSt}s#YclCZsWp=W#HqGH0sm<$j6pIV;pTd z$RMvtS*MXBs&Erbr9Kx1qB=zrhhVf*J+oGkekpNfrBlu&UNlOPavfq^pO=UCR^e;5 zT;5R)4h@mRS<1o&*Zd!SnSmJADzr#h9uuojcL!?du_`5!=QAa3JI6)n8JZm?7l$&s ziY+b$Ful!DMm02cNo|xE6t!i=>d=5;%uhxH)S-jWMVFFTRp%_V zA3P`#Pw+4)*e>8OYNNe+)aF6HAuQB8#JaF+U z4ZwKa2NiI(R6T>9eDlU^a~NI8Dar0#z4WF=#{@agFeJs|EDMJH#Ta`N1)~UiGHy2d zNf_CBOvOP>0?KpE=?ugK|mu_10PJbHR&h!b0zQV7@GU=0UkB|B&&d??H-21 zWj-w@3&X6SlB22zKh?Op>?qX~qv@x_^n>EErb>n6R~d?dxQ`H>G0EH{3$8sr zsRY%NZ_Hh4s$9~|oyM_idOQ5AyEtm6)Y9FYLLR7hTm^xS#2uoF=4(_(m!zAaifYrC zrNl(ZVo6ycOz~SFlg&rxvY{je%9f2_-V$Skog=Oz5`ofaZbVEs2$;O2pqLK(dTrZudlE-crv?@jE)CZCZ9komH zJzJ-fRmPa*7_4#JgqaXtE{JMFTb0J;4q8F>S4(S4m{AEnYf2Tfr;kzOG)B@mqH~O- zMro9C8f5L3l6SqTY0{X1RVzt5^Io*j14v&C3OPJnng_WVzwg6@VwD!2(VjS-nl72F zSg90{Ov88PD`^Zy)|Qpp4T6`s&3L9%(Tl=K{GCJV(g3~`w`2}<$iiu9l&v79*W>}6 zK>$VtP9Y;d&>U#c{kO?uA$JYo(|Zfe!^R3Y35^P6dN>Rx4ot=i85q-BMAw(=GBi`fp{ z9;u>JIMM1w=_HjSxjSgwx~&l`2jPdG&SmqCS@FlA(X~OHUlsc z&!JH?Ps^v+jJwfaWKbqmbQ~6*t)QHGQ0Y226|M?XbkXE03D;z9VT0Q7R-!hYUo&6S zqbwOvu^5|!{LBi~p|171+)Yl4SfHZjQ3!T0^N7c9(} z2f1s^A`?usAd$Lsor)y#OR5EOm;Aq)D)ot$XxD@^;s`Q0;%p8k`Kmb^-KJSfJS+Od zW;8ZP#j3;f?1V9Yv<+g)eMF@50VqtbJsq(Uk+bpBB|+THbGY%{mk>xNDHVt^oxI6t zCWnG;Qxd9RNJi=hx_bw-R-kSsgxphK8qObZ06|vfH)r`Gwd;|d)JcU9hq96^eBy*> zU8lJWqJj~DXQ=vMV{}qIr_!{kmM#$!DsQEl&RL;eKA`E4Td;3Rmli0en#|fn*s=&i z;7Tb4KbX}hbr`h_x?XhuO%Zp|DOL$}z4qq^uQY$^#16NZ>*kgj2-#Cw}TjV3}_xDtFr(@2^e6DA6x zEna3rQV9$=hgv3kaez(Ih)L+g9YqeFt`0HL!OhdxT#$sgo3@$Yw>~vm7r&vdgLH`I zYKgg0M^Srv_hBkC_Un?8#$xX37(N`Ov0%$&D#@UV?C82KolL~CGf`C)va-<+rgLj3 zkK~V0woA&%xQcSkWq%Y>*6gV^_Ivf3J<{Y+G|7zOWMA^sbbJj3W)_^0Wz3o}k3{E8 z5;TBo`tf##X*RL=-ylhi(#aGkTi?<^P*H0W>4U|}FP9NEVKSc^m?rE)1aBs)VDdbc3v7a$EcN@_)A;-Xm-vWqZ_-R^KC&eQEChJ6XtFRB>TJDv%eg$8Bu z1t~_~(z1NLd>rbMSGdm_HeRB~)PiPRj4<}D4fjtDnR8iVzCuBnt)c-3nu9qaoKP-f zfc~mXt|{{&g>K#1&B{g`C->AQCQajn-etD7C|VmE(X6J-wz7gYBe`U?P2(>aH2UqE z-L4%|r!{%eWXnW*nmc~>@|7u)(v9gm$5K$KP5LBRX^b33e4dpNCY7OZX_oBkvi1mM z)Fd2^D3z5(UnIILCm;@I<_XlzH7PYLx` zo3w)ZMTNGYDTLU z_b77Be3Ms&QnS!ft1%?O3Jy>?%396xlANU?+$Zxh=33(L#mxINK^OXAXj;};rIMoN z7;!3nI3Vh0H(>L{wjzyTSKazmSaBrUS_GRUCI4wkFY30=#l>OD-HampKDB}B2j8KY zfkNu|AcG(Da4n}e=EOxt>$d>RQzWsi29>a!m>8NGn`v~BRJm4u4AzX9F+UQ=&TXD} z^_(=#d|~>k+FmG{sm!MH7Fyy9I~TaP7)dsu{3h^BTK3X8?krE1B_TBfe|qz@^8I&W zX)_xyYeuaSZ0Zgfn6#}&rZ2?4qyf211yAw1LumGN-uf_a2fH?ZZWYKF8_ z*61pG3qPmX;wsq?OK@ngREjW^EPoby?@XWh!p-!t4MW8tGf>Iq+R+due&xz=#mrJt zn{4XtZkSzGu<~c7f$>_QAIwtmwNiL>DtmhKtLV~=W-^?tQ4T!BFJ~LOTi_yDeiQ+6 z!AV|l=e-~xO5qYVZaOfLAqjwGr_ofBtyb423E46ySzbEB!B>cx*b1UxTnCNnQ#CA7 zC)7fHu|#AkcbOGF%i2*6DF%Y6snm$lG@VD#Y>b#4a zjme3U-}sVZQDT|Z%Pi3OZCT(KUQl`q&4pm~1{WR6o?^K{yX-3@BW;WFQPoNohge86 zy)c(jvAKMBATCoTeVmM%Sk#~^F3*ve39EDDm*P9k4Vv)jEWMU>awy{d+opBQ1Jls# zx?*;^yF#-ItAk&c=vj1ns9mb2X^J=#nw9`qEun=-z)TUkS7TszdU^+fz@jK7JLkfe z)>(Gt);*v*Fhzo>DVKK!*MICeCFij9+BCOns<+^uY7}ASJ-6{xG-~4-Pi9NV2y;dp z$dDtk5izA0n1U&{78I4|vDGfT)vgcNt4H;Ve>Pup1 zmuOl-yY6)tuKl8-&@Nl6YDq7ZC663E?0PZBzVyQ|E_`M-_yu3B?rLDsbL4~#!YIvH zgMC0zGA(8l%UY%$@koDK^|Zt_S{k=|o!m%Koz#CQw4`#Xo{!jV0+?bKGap_PRuy`$ zi-O4JnPl?Ex!_>@;vbwq#bRC;hELIDTvw%86_?9u$UvWH>baDduC6q5i%>wvQ6Bix z+>X|mk?&1LOyjk(89Mt)tAjKy3fmNgs^)@}#!qGr;8=_WGf%14(M=W_k)o%G_$bU_ zDO+5_cOD!2G5R)S_ytEM>q=!ll%15-|a!v`A2MPE^gCD}Dg)>^YpOZgCV0)8W5`uBFaY9xWmAI@e_B z*CzKcWvrc=-EG`y*s3_C?G;7CIsM%FFEvqb=OT-l?A}r{*+{L~T9-dN+tT#zWnPB~ z)7}`4PfG*U4pB+_NMR)opl;TUU5O>*swmy8`NEsQAK7a0c8EDFC-2;#dS(Z)L4E&i z=GvR3yriI|r@=8MPGxcMn6|M@b3?%lRh-INitauuC8?>jKsM`Hf}{vGK|jP|6ZB z$Mys<2gvaTItW2Z&@!d|+B+M(2ECaM6yL&Xl^#v>u#IPQv}Kcmv%WC$*^Cp?zM9b- zna&-s|MJC~Hzqcaffl5q+Q+AxmSlDmK(@nwL5JxSST@^P8TH>*#Ocb`-G2E?8rY95 z&WO6IX8b?QVm+Fb_OaQ6aqY&e&Us`M&75uQmVJ!BNvzk^1O1Xa;c^5+V$Qu`J^#0{$r53BmqJ7BjWML`(}v&E@Qa zAzAn=D)%!Qogr;?qDv(VVB3}AlVf7*FrdDH3@J=kjUiK7*j(C52R+lKsg@S3nlF*% zCJ4BmP*k5)DGj*Tb!(e{*V|ClHv;>;d_%tVH;d;OsADGa)a6vRE>yA-dh@IKEogNsm|`2?oWa#Jm>l}JmBM5gM(y&a9+ z#dw91cD^hWL`TDScIr~IchS=5f=@`E1#P?tE!R;Y*1j~WWuI5ak|Xa)-Q3hwYEPn= zk)X-o<76(DTQiPXrcF=8rZt6U-}h@Hqd7n{Ue&asI3R6z<2hK@)`3+;q$8upxP7tk z*%wjiam*3o%O~YBt(j-wfSet$sHdsHtkgyDx=r6ztDMq=S4n)ie?L^l2Wv(w-!@TZ z2kef@xcPOZ`>@t1rR{A~c;s#Ct43apsoCC#8Yx@@b>Q!*U29uf-B3ChcI^j#pI#=6#jSYx&S4pw(X zqFY^LUdrgL))$n%vE7U|!m(awJ1vbHG@&sFRT%p$$S!USvgx_r&Mv{3q8Tz8g5hjf zKW5o*kjUU*U*NPpKR~T-LH7q9)t8+ul(bQ2T^PPvXfkKvf^40({?HdOiSSOGwwU{V zChqN&l3jk#)RNMPMieFvDK&YTRwf&bonpzcQ!fren)Ndjl^GiCgNqvlUuX1ETgC`( z%-MlLp?S6OKMV%;U@{x^S(d@C4_zLQYod3A@4MUpe^nG#aWG9;6hxC?Wvx+4%w)A4 zf+d@W<|z$wjiSa)F{yTzbVjF?>HLt!RF))YU-yL1)57Lb{(nn-OY?Da+GzT%`gyNSil#ACH6peqM-a$CO&!&M@r60_J06UBqY^ju7~Zss^CjdGb)0L| z^CE%O>v>Vg1G;s`AqFszG+Z_Bvrh)v{?l8M&wYjaq+ado?Z~T4=KtIDL&KNYt-A{7 zj~VOGQR10c`2TC~>~^F$&M@4^xr!lC6p#!ymXZVFL|TloErS=az$xBk26mNYadrlh z72zz`5akAP4>|Xp=Pt_F4vrzFH0_L19>|j>z|3@->6bDp z;@xK1k)DbCBF@VEtn1Z4FNAG^QhwqgvMW(_YQ}Llby!TidtNM^BEJySG5QGTMnfy1 zn}E8WR;-yHs|wuhou40GbWez?j!52MLrwiPy{pP)0<@kLWusAEyS)-C-2Vy-{P^z- z4;Vi_?;m)nLHFSta}@Rdoga+;L=&uEm+C4FvMrGZEk2>bPiO|(#=*vRdxJ2A0jVGp zvsg{gFiba)8x3}BLsjS{E#OaT6@SoE;2_Hi8T`}&hVjc1bbLaj6|SkDU#CPC$(Mto zoi~;@br%SA(I>imc69#Rc)O|drM);p-PCG63S3)JdyJsi_=EejEO$=VU{AWW1hcx&4_{C|_3MxKySoHj!j^rEpC4kAQdR#jZ+OKT6Yvulmi$QRssh7z zkcL%@A>Y)zpTiHGYIJIs0;VtaSU!p@zRm6~k z3&*hq(`b9%-6i{|yL-`n^$r|AJnIe!^i$nPu%w*$H?8BmZID`a)5RzD1Zn!^o3ji9 zUO|FL(~Lo>IjK0Mjxwn8?tt&;96WQ|eD$1`qpipZ;;{ulS>Y@o(2#h-QvqZ0OVK z?um!lI;nb_YzC-<*wr98JE#WtB57K10X9&B_m#9Lh5nj16iDwissc~Uzx2(H zqYj#)HT#Gc3og^}F$OqL0a-yy;9UOM!mJu#vRDJ!+A}BE50wwnL>eC$f?e~Oh^@A) zvG%kKiKr>wVt}iSnsxN;3hva&RcLD3j9{;hSlb5VO^mUuo3Q~KC;B`PS}ddi>fdvy z6EX$tv&;e>gE-_*@>54<)mSE`8pW7#XEt9Tg?$6+s7b&nlNov=wEf=G}J=CAx_LVF%|8WI)&G z!BxwYJ|JE|jzXwg{J_w2n!=L+wAVSR4Fc!YVE*6sb*0X`F9^9^oxC{U5`-7Wvztmw z1H|$KfcCj!oVuT8;YGM)1QefzSpt&^j7xmea-@Akgd>4RA|D(knc6lI# zNec)7NqAZl04~0LUq!&e#`7l0KO$7hT4B#uZAINa@bF}LdO-=nWtX+a2;e}bK&jJO z@NP(WZMY04Fn%DwQ$#AH2Ek?heN54wTd}^-1|b%TMoEg(6_Jrg{SmM)+6Vs8d{CUT z099GLiqwXGj&8Q#P_$SyJFBOCNADMl=SPQxq`X*smz#{yu=HAHy(>cYS_L!qT%_N& zpkK%N=V;#_UTCHLXrj$zv#=ajVq2-+OhgtlKgr^+kQxEDNFj&-{`DtD*@OavTOvpt zMZDs3D}D?D%_y!xMazsfQ(-Nl zh5B%_?mqa!fQ_YT!pn#CQXxnx#!!lAax_XIV{fd5_MW=#%hNXi2(d~k-&gI=20Xsy zrxq`3DQ_K26zPMo9&(;oaJw&^!z~O8rr*A{v0#@iEdjEA^;(N+Lt z{H&@FbIUiaqyq9$ZQw#O!&lquE5k9CIlHvN!?9r%eBGuP*XUJzkWGsLcUh#lfQl`r z=-_iyGaWeSoL&dA@F|Z>W;wkNOc^^bn4nW2O5E1&8c^L zCP%RHQ;t|*>`-|7R2lQ={p-U&KL5kXe0BU`_Q%<=|2$rhK(zWW`<_z8z{#~3OW`T; ztFJf5UZlhWIPGB@f}xZ4ZLz7mkYfvK1A4RjTo(=cJY}A8TRa_N%I0XPx!R1L89AzNCw&%mvO#H@<*ahtsSJD3_gtNG zD)C`PE>n|nr8Y%Fr-}AqG00Ssg+GSnkS!98Ah! zP$50;54IktLk89piOkp@(tF)t?`?KOveXb1Cl3e%U?fqfBf$Otyw;d;Fqoc4(+vD?wZ_$s4&pH#T=LlrgcL zJM7Tb+S%npR>fewX)<1N?Y(ZmVjvq{I@{fcHdL=UO?Fsh;#AP?ODEJ4pY`RAkF((G zMyji2x?yzMoT^Ylh@E`gm`#7f^M*6j57m4m|Mco5RCUuX(3IRg1 zYqCSQagsn_tRkuQpp9AJyYKdHweFa=$B9B#BNXJ z46Z1jvL#G_T?wxlwh`gpS>{c!xp+YQPUGS+06gehw>H6}< zosU139G1sdYX9*B{-mdMH)01%b=+1PMkew1 zH5D1>j>c;^GmkAY6SGETjA!`1$?I<{6TyetE!9FIL&q6yi+Sla6cHq`mh;fgH|h_@ zg}AZ;QR+-LrQoY_#Q2)9#nuR_Wrz*C*4=6~591)QXAddsODrFkXYWh(JX&Dpr}hBq zwrwh44DaILSLI1z`|5%{DuRt|3W!QEe7CrZOa+k|^;x>%Y*W2!$xUe>%sZ? zV`;$5>E|$(q~d%+=fBpikFSjfzQcqtLV@`20=$EA7|Y@ERlH$(JH|zhTr~GLHD+~4l-n=@)p3;Y=o~$Rgq3PQGch_ z%M_O62=T?iY?u_`nfGesW%JWt3HU9%1Dn?3RI&?e#CKBTUxf>dBR@MqoNWV7ue#i2 zhV~cNm?L{10xwP%2f~~S*F}0YT43z@lMtj{%0!XaYe4e0FDII7-q@DCLn;u=uaPx8ddErZ*1a)AoORE_S;!&`I?O^f%L9xB-zjItgX42< z;KEub!bfRLpbyRV^es9Rn|p0-tPsV{X5W?TK_lGY7M>rH_nAUaC&=4u>+>I@ zWb;y-6yw{gOZOv_6oU7Kf)Y{u!GZle0L8PYmK!hfn>I$F{bN`M4tHbkU+@ybh8iD| zXoQ6d9)mkJOq2dpX_M-SkV*@T$I3s$f=?O3{uy3xrSH#|$~X{5fs_uNp)m{mO-0Ws zQs!BmB8DXkT!IS-CI781ASZyhR_yI4L3xNw90SBjbeM!(+PY03xTs=JE&C>_J226( zOpUK2;9)U1R4MC`DJAUM(9$Y#P{;u}sL4Js$pDaPWYt}Ycf=RtLmv343$Cdq2bUCV zf2)+nZ6QQ#7U4qn#D8b7-4IiBP9%*j%_dYP!=fF;wQ?iS zvL|G^Jxi{B?WE%}AhpukgEf|@9gMy=zkbx@%y*Bej4qRSR15*-`$BlanR?Qqnh;Nk z19_?Cm~DC_!)$P4sA?3v1haZt!;a`1V#yvbhzvbiAzGNLE5>AFV}?q7<{#NI%CZTFh&T>-)gQqnc)I~j!DU<%j;v@E)Bn=&&HBgF-yHT=W;>4g%N^M==H{3` zRcS-e*jauY7SbHyOn*3Lv+^0sLd|J?zW?}uQ^crECh{S8C%qGoOI0~TruEyNq`1O2eB9uBi!IK2w)l=*i~&A2+pdxn=0O<{Vn){#}|E5yzJQ z&C{vFm-f4iZDZOl4I9JFmgaR!w!`n^;#)Oo8YKftZZ2nxaxx=n@Fw00m$-%v)x1M! z{zT70NQqS&bUct8nbXtIJuTNUh=}v` z^HMqZZAaDXZRRXc1En;Wrcaz$;}X@TjM$+T4IDxfpk-+u*RD-5Ze zq-d57Kn4&?-vflJ!|z05h6gz@`oB2&OUE6Ni8|{bJe$wxssmTDu@!=PSf1E|(NuRF zu@WJV=<|{hPQpk_A4eo<7N=y4L~v~7EoRYT z^O@1FE8mLou^6tNuF|4iX}4pU!l;)a*j)Lwwb{JHYSZul>m~LB?6tNMgJyZxpA9A% z@sz164;0md#cx^kq45JVt(bAI8Y@cSG}11ps6&}Dq=yWO0H{TBiErtQihH7TV`I*q zLWA8Io7pVlP+)h~&}*rr?{qC zH?{i`b5D0*e-kGEQ^H`m7jnl4!)JM8T{W0y^wJY)HF_BNI*7vs!&vM?<^J%f!eyuC z%se(|WO4O~v8tn!`8j(7X_lQ42uNwtrx$D$dA2|_FuzTl=?M(E`4@-07z`e&tdo<0;|nW}M=nt&zXfxuf*@^hY&|@z{5! za=^lN87{NtG~2#i`-h#qj(iZXDwvR%bcd4T`?SGVyW$W(C2Ho?&Ed7J$7A{wC|eDH zcoPVPAo0Q}w@jY><46O*28U}ydjw6lHumfzX5N6PE!L`?@f5S=v|!Hg4+O2 zu}hQCNNn=OmJ#xVp3+)n;I4 zqo`rqDYgzvHxQ=T(ALMu*^KD1`Y+A}iEOymt;B@%T+#DIr0iYT@#!Uq4rvbX)EB33 z=Zojdw@2CPWU;*I7(J+|)^+%fmh(9%ULqpP2z}I_lL*&xpW0o~d;l@JibsQ9@=tp~St6fBpBJ~+}ReSQJQ7|^sfmO>?*l0X~^bJ4v8P?ZMY3Wz_| zWpy^KX@7m9q&d2rp8tq1aMRqn$bvd%uS5=qcj~@@c~t}UZ0`@ z-qXmnAiqj+5J)rn>QZ-r>H0r69uTF(A1UbJXdZODdLKBVJoS?w(&<(yLXuF<&^=^e zYKcmLn?Svmr06`8Zsb4y8XM1nLAVrGGl5{E?5DdXJgi&c?1OPm7%BQUz6vsF-GNWw zg+>M_{z*e_KiM2MJd3>>IvZFNDnm8F>9S~Iu35;}@bXX+w7{rwD6J6e6cO(KD{if& zi0yAlh2qp9g*p@Ca?~wRu>|&yKmR4gI#YQGcGFVPkRXL9 zMg}atR0k$9w)hA@N(_Q-S{F866fNY#)f8o}(^U%JxHq4=5o<7Zjd;IEI4b+J@(3w|1{7sr`(`Yd0WQ2*vG%dZ>kx?bC)tz-N6zsT@ssbu2xnI^AKn$murj?+7OpIJ##$YfBqKAgiU0C~uU3mS5 zu;mqzkn0O!nKEQplCA*dmAB3* zE~z*+lWA5)#8y|fhD{>ZTovh?3O^LJmKf#uXMyZ+zvNBtWkJ(psGvg10?RT*ubyC@ z&7JQ3L`{?rvp k4-`5fGP40JD(pEUX5Cgd{+KkeCG!#B_CcrBmtZuBNJsPB)^6 z;=YVHs0i*GxQ*+GBd#Rw%eX6!`#z4_xQ>p_|NFe}Ip^N0?hbM0^ZPg4Ja;+w+;iUZ zZs$Gkz4h%Q_P-_LZ`b{@>|x-)9hqfY_sg=|=j&{i{rc1_docJLaNC?LJMgqDyFbU< zPtUT0zy>%MoB)pjZv>A8Zvzhi-vd%z_I_}G@I&B}z}=wkTYW~BJqWxMJPOE#Xw&*k|K1CQtY)sN0HHSx*dL%}zK@1YML1^GYQb+*^{PLL*Np9uK3fTynX ze(eMwrFy^$_y+J1;Qi0Zvg>)?d~iMZ`p0A$P0D_IZkBBXPhOQ}e*m8dz5{HXmt}`g z?xfXOM$v598t=z7p!$8_+AKR9JOmV-9u7VPJRLk3Tn~yKmxD)x{on!M6sYnyfIKR@ z75os-`6hT7$G2U;JskfhxEj1@o!9sLiyU7H9#6T~fNIBX@HX(1py*q@ILjUY)1BFaWB{ZvWYR{{8u+aGw_nFv;`ce zkyn5px}5e?{+P$n2ad12D$Cvt{_gQv_G#|F^9hVC$L(#<7`(YJ%a(Bd>HQ$b{|x>o z$3Gt6UXH&pm}Tpz@6_#Cb_>T(+Trbc@Xjn7rp|xyJeC zE>Pq7UGQ-5m}Zt82QC7|ujhlJ&qd$@@UfuiHxP; z@i-{Ce;TNMJ{J`KycSfwZwJ-i&w&hi_I2=5aOo3WE}jgo;rK(~5#avUBTL}XAgU)@ z4IT8%scyUkhqHuK?AKouIWFRC}KWO5fZD zs()_@*LR2WUk>;qP~-In@S)(GCwu!I2Id?u1s8#j1($zjgVXC_ z;5?2`1l9fvKwV!Cs=Zf(dR`+OPl4jU=Ys0zi$LA~YEbmv4T>MW0IHw&f`@=V1l6uz zgSvj)Q@q|2K|OB?sPm5jHO?1;qW9IH=vN2zyeETt&hx_Y%fOuDJ3!t4Nl^0eMNs_k zHBj|`2h@1{3RFD@-01Zj3F>({sQXR>b>9k5&p!_o9UdES095%lsBwQbsBwEcsB!#A zxc+reeDe!X?Vs~hfBu6(wPz8i>np%x!Ak?~2-j}}b>GdP+Vgr)a`aYEe0eXZ=NY;Xa1GpPQ&AAA(}El|(d|2eJ?&IU!#Eui>s2+YAJg3<#o2i5+&!1ds# zz-z%{o{Mb(UjV8-e+9)C`#ld^0v-V#3_cDN9R@(vvlG;KJP}m;-U+I`-vl)-KLAzk zcc9vN;Pagi&jFWkyc5(oz6@Lkz70GF{1d3>o$&%6&sCuMwE;XG><4?mTftMnkAwSx ze*x8w{{bHeF8Bwxi>HG+-UL1Z>;pyrCxfc@-Qaxi;{ksKiq1#B(CxybK^OAM}szmz@ZTE-OKu zzZlf`ZUcM4?V#F!3-~zjE>QG8;uh!gb)d?%K=I9MKt2BsP|tfWco_I8P|vv+%)y_6 zi@}3m?B!1fAHeZi@L}L4Q1oel>i_dWwd+psLEzg#-Tx8rA>c1TJ?DUzxEvh?KA7W6 zLDf3|9s-Vms{e`Lap0}sY2bT6@$Jt8{uUHH{sNu>9`;h_w+p~iIc|eG|0Zw^_IsdehP|ye+cIfc$v5VSWx|b6sYTG zfU5ueaD7v_z716UW8ksiWH|pK@Mw--2a3<`21S>jf^)&&gGYgKu2t_tK+$y`cntVx z@NjSwsPcoLfM!f z@IOGw?_sa>^QVEL-xZ+7y9ug2Zv@r<-QZQ==fTb3$**!gcrqwGwi^_G9{OtU|5>2; z;PIfw`5I95KN-|`+zKuO_XPYSD1Ef>HNj5{_(V|W-w3V%KMyVh=f2kU>8W53$Ah4r ze>151KLqN&pMx5QBVXtBo((SNcnH+ z{>h-~dp0OJe+77d@SniL!Mi}yqoCySUQpxl8?Xn=--eC_F9n|p9{W!|-Y*9=4tv0b z;GDO6|4#;WUmaWwz6^X6_;GLn_)Adt9sLfc(`Hcgc_z3Bd>i<1@EhQK@Q>hQz(>B* z$9Eg3dT#+w1V0L%4gLgFe@}du(`^ZO2*;;^l805G=yw%(9Qb7L0pM+*o_7bh1pF9y zF!%>h{F=Sn>wPqM42NsLb>P*Y`u#>w?f(L(_Wu!7f9Ji&>ADWwpX0}YqRSJ&Bf#f^ zYR4-<_2d1Z?)xq%emdx%y&va;>enTp#{F_o?RWyH{!M^Kflmch?pE*-;OoHS!FxdU z>qp>0;8E`-egi%n)HvS;s@$hQ@$-Lx;*Vu_IX|ud#joqYBf&Z-`rH7jKhFj=o_B$g zuit^<$J5{E<1`71E^h!uuP=b7f`0)ee@p+x`#lPZzit7SgU7z#$LkVM^^Ji#|1R)i z@Wh*`;@=_gIPm$P`uQgC5b(X=$>2Sp`1n_##_JE@YVi0kqJw!(72L@2 z#xG+lIDR##@frQ9Kko-$bH4m7xRi4D`?`41i4;p~a_yMv9{_79%DZnK^ zMg}SWp`Sn#j?ega+R5=(evWRU{vZ7U{lxh@ehK|J|D#_yy^s4(_@DDzz=Oe?e+#X_ z+iBDXDfh@fAj2Gg`%maX@Tq^!vX^lF>i@UkqwoHh`ysj|UF|UkHkBw}ShFuL1|a*Mt2$=U|BOV2?e74?Yx> zygUY+4^~0($@9QRfOmn%gI@#1H~$rmS3bbcZvz)_{wbj7@Fws)@O$CM%6I6SC1WM2U3DkHUdbrp35K!gk zhvRcVmD>R7zAC8x?E=-G=YjVJZwHSCUk^SU`~cVseiM8YIQNJ-7ROlzN)HW#;+Hpq z8t;DtRsXNS9&kT|NAz0;>iK7YbHVkXA_Q0<%ZV5iH{fGa@tYfU)b9FDIBRewF4e_}X(Iw-yHVo>+J4qOPn3)J|2E8q`7 z$;;0{wf|S3ZH2|D~Y%*B{O|!H04Dym0%Rasz6TxaNf0_keBi)Z<-l-vnx0-wtXVJ_V}2W9B)X7lL}uQc(0=3!V1H~_M7x?{WgQsvj1j=6B2CBZ@p!CAOgL=-<3+LE8^gK{{<(Z)R z{X9_e{z_2#@@`Oavi)Yy z)%z(>a`a)&IAHs{gZ~a z{2M?${{vtSeg>4B{{mbEK5&WGzX4SLuL5;{Ke!fbfhU6R12vxC2G#x}mb(010_GgQ z5Uhgl1f|E0S?2t95~y)q14>V?10^S$LDByzQ0=RM8n0cT==j`l{&k?*^R95b8x((h z3Do^R3dg?%#U}?Wcl~uJsPUc;itkr~XMm3f^}K%!_*zi(cqb@6`68%s_&zAUIOG(s zZ$2n{e=ex!Tny^@TR_#gX9HTY&w`u5<{=VVucmw+0_H-dWp+d$RxS@3x9D*^uq zs-4H4;pfi{*dOp|py>4mP~-n?P<*)Gnf{!^z>OU51UG~42iJp#J=*oi)!rMKs7Q1@RG@D5OV>^q>w``~k24=)EV=J+OX3-|?4a`33fct7gkR*v5u zjt@N7+j9}PhVw53&j!B=UIZSw%E#vk;N={@8WcVL3)FK~p6BzBXMvCB_!r<+;64*0`>r=RcVp9!k|dqMHn85cOeT?wlHH-H+SJHzq& zK=JkW!Cl~QK=J#|3!QIwfhvCsD0zH6D1Le`cmViqQ1;}9p!##{I`=o*p!jnVRJj|# z`QXz*>ASaqlCw{PvfEz;^_<^;(r0rn^6@?fT*2{W;9I~Kf=%$8i(O9M0gBGw15W@? zy2SZn9jI}C7I-rFE>Lp!9Z>e@fc0}MF18dD|I|QTe`Pqo2h{z43+ESH>d(0p6kpy9 zs$Jgzd%*{9aQRpbsvj=_r3c>_j^6?19Df8wXrMLHhvQu9L)z066;*5NCqT7|A?te9S z4fqyNcIFXVUH@DGO21qWs-91S$AR~P(o=r`Wp{fo^XnIa(uBrrm#{Ku8=yv?$=VWt0{b}6S+>iJWsIp%U7wVjQ4##h1i+}G4 z*B%;h0DMZk7*PE`j`J@C2f-JF^LGbSF5o!ZT(;xc;@?8b#=noVFL|3}J1U%4+^3iQ z@3K8G+=rWK{G$6RY-1dMnoWQA59mk8F311F!GE)TmQD2eHrv_Mbtl(;T`K<>_7#88 z-(_s#ZOQ#+&T0Hsv2ADj4%_P}`>!CRwcJ8>?eCIs|0eJV&ipgmrzrDAP-FHPw!_%o z!8!e1%XSP~59PlFir>5c#N+yd4YLC&_XM^lbNphqFR{Ie^N$A);k^EotM)A4%}~|m zTj>z9V)3+a$z(|T2Xp=lpki;Qhl}3?B@2IKo6GeEcwVS~3CE|ie<|B5Ij_Gn*guu? z4`hpfC$j&0w&#a)cY!BSt{>b0z7hNl+t1j}V!MIu7u+meqQ93rWVZyAEMTfE*HEX< zqz>s-{rwN;KMw9;Tg$eSW7KYTGutqm{90wd zb3?gn!P7(8{ke8G`~SxFD7N>7^F4MKb7t_lY(wGvo54BU|5eVR{yP5Fl#YK;y7D~s z``KQ}^?K>NcE3=%2XmD@kL|^5&*0jP;IBgYzk=`N_yV5&U*IsuzXadP_8d0pyJg@n z*mCxzr+>u$k3s#7vR%aSBiO!XXFMnH!5r)F$>6JO&;R)dfI7~$@w~^f|0niu2k&D0 zDBBU7w?A-{?FJ6!vB{3=ufn(|Ko7q{lK4cd~rDbGx+&XR&ZuGFWa^_)cs8MpRbGI@48TCkYnY-E@gWr z=Z@$2SKu?k^`pW2hdQEBS;x7DQf@2fKLI`#d>Gq*aQ@kB2Xk&c$3x&K$NGCgz(Ya# z`tk2Tb|%=)V>^X=loz~={rxESOYq;=UdyJx=W_0ozMH)b{2tpaocjaV0^{FL*gqj0 z96){l!2V&JdkWh_*uKQ3zbe~5v;Pe{LdUSbp6!@$eJA(cpKAwl{7-B-$NGCfxc=CH zzvJA~>_+;{w4#`Ph#*K)oMu3~!{`=9D4gx;o7*xt^$ zPl6|x%6^e!{k<2wKJ0%TT+a3#wxw*xvVDNAIbkMmo=?}Pus_AItBj!yu;!uB$@5w`nr&%@dF_IC*7 z{zQQlq0qG)FJSvH+fkgG$Ne7$U(fLzw!gCdgyU;C{~Gr7cW~($H*qY#R)70({)d$L zz8_|91)t5fgL4;ww}Nf9I@@bF{vbHP_CEIYcOLs!vi*SVYL34J_EP7eZ11)b$P?$b zv+3`loWGE5kWGIJ9MZo}3guRFeLLG8j;{nqQVHU8VgI+_2DW~#KaTAj%3j0qlh{7T zev|D#+4T2E@MYlF*;cUsXYg>gU2GSy>2F>r`%d=HV*3WiCxS>sq8<2ef>R={TkafY?p9+IQUO?CChU5-x2l&M}~H3 z|3z#khT}&D+z5V57x_Du?G4I9|c=BPp|r?EsFS&h{Yo zAH?}f!GqZJcQtsn?`H1-x3Rs1?cc-o#q9qs?6aFSxc^X4SiENM23I2|Buz%l8`7Po82T*pB{YQX1*#43I4^irP@TY9AWB&>;{_SSx z9+hD`I-ES9bUl`Pc{q1|JOTbi=N43VRR+cv<{O)h!S=v-zIE%mHQB2C+FEs@RUOZ_ zH=6lKWwbI>8y(75jgL2L{q6DUWtDonnm77)RtLsgz4?|MwN|=gtl7A>Hdt-t+uNf9 zwbAkF zP_r`5(K4 zJl3pHOWvx2_1aXmN%QIXU~T*MYO^{zo z%*S^$8||STU^O(!?>etCFkBrS?9Ep7H`P3yI_velJVwWl`Ps*bj3+_iM8-QR-Xw7FHSGzWIj zn`Wcc%6GIG+HKH(u+m?zZmSJ0&Ku3aYI7Ss5i_)U!%pugv|Ma7o29^5r8z#@9_g<( zc|3#CV0_h*xSMaTw};Y+Nnh;D%b#TR^MR~iePEjit7w6s! zJ#ukwY**#tNP|(XX%8kCpqCgu<>AB zBN`af$0j{8Z;XZq=5VjEXm4%;13O7LTkWwi(bTwn62jC5O5E?wqgX$zG^onN$^-3Y zNfsbsyEWbzsZEJ_avnWWYqiv0XB3LUN@^m{7^%Qa*_uYRH9CJhmsHx5M;oI(t?|nC z?GnW%C0tGz>D<(kb0{Qr4t4I#QBd9Gj4NGt6_*;L=qS{e#HA8dmodSTYfXWTRcbsG zp85U_ugMoJ+C0fn?^?8IMc$|4+r%y_N2=pH8iPG{!&PVL{PJ*axu0Bq_4jXhLtm<7 zy_IjldkY4u+biulqYDG~)ds{!NM&DM+nz(VaX5V;kE&Tu`xfVYX{RX5*>oTKwbp36 zURPPD)*Nq1>FEf0DIY@l;!^pbSskkGvK!J~eO$-rG{KM^4EaHAwCI&9{PD>###02k zX!C|kbCf>xsE&+DX17Di@q9t6kxw?-=*H1}OdKvzZY>$Cp-dL?fbnL#+P9={d!^p0 zy72Zl8ue;LOk>I%E?AszuQ%YAv+@R9*PN)es`N_^cH78{^oML%)GxiM*g$0fy;NvgO3Avl za4;%XwX`U1jQJ5>m{wQZd{pw*Sara3e?DBDG!3f$V49034AmR`m3p+B*R;`SRrFMB zXX(*V@56GdlClXdl0C5IS`>eyUK=pWAafR+B^rZOz~-&mxDJ&)IMzTMOmj#qnzBIV z;S^P?Bf<4@V`6R^v{NG|p(}C}eHGWp(Yvu{+q1gcNjce04a#6J3Q|AKMm=v_i#sAK zUYXlkD9mdcRx@Jxg^m(}UE7b{yddRAhpeWfQBPBGRt7+LIhy}GL= zD_Ky9J|!y2s+eEhg5Oo4=v*+T--P}$@6q@)j1HqU>0WH%sm4*358GkB-BZZ>t9k3Pp(+B?^VFitX}C30`E+QjQE-w6q;dA)(y!FI79 zs93z7!CI49Ortre>U9rY(7XnJ$&cgHtqv66XhUvOdlcr!%3Zi+%f|fFrKh?UlTB<^ zuvkn28axQY$0My;Ohu#J9H^>Dd$e*bA|S`9=(e6+hz5Qlq-l-ePeA|#2n|8EM=E1M z=u^)F$&q~35XcF?R#EBUWXBxGYYC4^&xk5QN{4DzBldWXJzFNns`(DIDblZ2T(SO= zt`;{YMlshery8HZ+E8sAm5KF7qw#NJKy$0XpmZ5UO)>Uu_&V#Fc@P`T$`FLR&ruWy z{68MOdSeKNf{iemCIOl&^h=}>3G2V6eYjpYMLsv^q-7X8BeVt~47m8Hy36Fr^)A(p zY9!L&nQzZ@PyR?`Hs>6hKg!`(ePuR~Uf0AHpKgW$ZeZ3g)a)?d6n*b?YqE8kjN&_? zJX)I9`%qQ~(*=xlj~G5o|JJqgRm_{Ot!C`4alXhdLF&d;%Yw({0}Ys=Hp(3fvrDSi zR_oa%jZxUgE??1cdA))V^keTjzcylpX43fC-fIwj`hp_w)1ynH_vw-A{=!;Hhnfv` zeWn>9UXRJdw0UA>AR3J5L2a*A2W9MB--oJt)A*^y;ZagE^eIh-5j}=*q_J8aej*x_ z_jt^;m1eDh!yz9l%$tj90}e(k7zNWHM<1NW3&nmR$;>(}!0g z?;aZNf}x2@W$RICzIW+{_3JKOwPoGLfk94sEO{0+Yn_aDQe_Bqb;P5qqjIxa`RYwu*OaY? zIM*XsQ5O`{4?NUSz45yVXtJp#U0$fQ9ItC&ShC3jqKaoI6p)omzqk#kdzmSzoY3%6K0QXS45@BY*W=ersyu%%qpso z${_AJibGz<7zWk3J=zj~AQXiT?#G)C9Q}CfH+*OgnN>d$>kW1$R?ob4dqoa$=|Kpl zDIYING@~z8MI0b3C>V>SUQ6eN2KX}}T`&D38bkzKK7O1zNL+22o$ft9s{78R4A(oZ z)@JiKx^FF8`n1kbVi0jdp=pBmZEGi{|Hm3ATAP5N?ovb9hZV#4msTSRwsOl`%>IH| zvq8|bx++6aQb|3|e2D@)G8kY@PrEzS;cke~W)Heu4z~fra0ElAPNcz0{m*^UXd@Tn z6G6wNk&?4~o`UaT4jnC5m~WQdFKfPWAOb+_N<*w0OB3mmIlu>3wdD~~%-vT5@Yx#( zYbi#DnDw;DF7QHb3lC_XHrSfe?_iqlll#^yB6 zwALk~D9t}xyr^Jn5i40F(|nU+mGCt8M~3iv#*$ssv`;e2jXP>sOCJ=9)OyxPCHN*CWsRs1yS1Y>7UF{zqm4~5GKHvzG#v{%w5^9H)y4f7=y$iTOhb4ePbFR-2Y~Qf_fRK?in7#o|H{^Q*vJ%*vh8sw2`Tkv4{G^>9Qh zxfhCSLkf?jm|I8ao=KZMJa{(pxCmHr4+y~3V=$dRU znuS@tRIN`38=PSX-CJZdVIF7EPTqtbaZD^^Q8Y-5OL(MSH)@!7SC)u+Z5Ul^6QsrY zIKeTk_Mu#ygG(y2gSRLsu_nN8g?(DnK|nK%)9x`BSDp>diQP}vl3W>Kjr_IklO;bJ z@kz$DB+GgB(^5H@5r@MTo*}DiLt_}L(Wdk&rq(JrGFD-2TtpO46-{MPo(6QyDLWVK zwJe#sFjCuP(-Ln$a7mK05}m0eWSz>&m66O%3U)>b4qOtsTB0}`{ev*7bA_sl6}tS< zpH+xm=SlOiZLY--n^N+^c>EX;sjAtvqU(yp$(jy}mQn7e>~0!lZL@>;Y}BY`gymV2 z^eAu%z078!Ie#u0Wc&rk!&LS#fO5060pUD(v-=vx)Z8qSxx z=1nnPk&5wvo-V*nBOcaEJW|xHF~VKdvhZjq3~xudEZa*aPleQrJ{AzL)CySCm)Sz} zP`MX`iuc|3Vih~8s5dx@nQtzV};0YoLSOz+=i5QCuOC@qgj_Oy{7HhPV#853ufDArjT$VFY=X zzObR|B;;((HDjj$U{}?ehB9sqWpgo>bf549Oj!-nq4<=JCb$|1vL9X461R)wac$WQ zYiO#t4;B-pYZmwoLD1Y?1r_C*x6uceM4n;kqZ&a$58?&NX--C2=^;1MGevJh0U4wU zvl&$p^{%fxkzYg9PNNj30BS=d``$*z6D6Qr*^yJfBf*fUWcI`ow%&(e;$UiB0dpTq zdQZz75w&ax*E*ri!IA;f5-}`h-j%s!#h}uvvgy)u!^Es`3Z-qFb40)>0t+f5(gTv# zf(OV;iOts8T0;wa#SBn>CE0d3E~Aqab-&7zGw7W?yJaDgvhUhyO&O4|4(c-s5yAa? z;{)u1@=n~X8Rp;#>fBD3vm#G~9loi-A#IO#trK6M4N zJvtQH20xdkuO-78m2(AuH#DSK9pNDy6!(_qUo%%@BQrx4BjkzIa0*jh3?7kN)N`lh z#lj3SxF|1KKg&SnCTJ_UQCrH2*o6l-Nj_7ZYzy66o@m&FDnt@xJ0Pd6D>x-D^JgXJ zC(eO7Ere8V`JvIOIX`zj+?XwhxO9*=iP3gfK#_5E4NazDiAo?e&8MKUxbUPGadA{l zg*d|?&0*pmrfQto;{Y)+v%F)@+S*ysgkWC6nufypq)WwRm|}{PJSQsGk!JUU-g(B76#9=F&gFW(lCgTWok9iDRs=~zm^vN|MeBZ?*l-JUGNAXor z7hGULp%m}Dke(B+yw-6&65C8OUZi;$nUt z*E9kpn*b+hZH|e1nAX$F82Z)<=wOBAVlA9ZFtvxnxU9JX<7)A1=k1s^;W4<*F3c2j zjH@^u^zuMt3Y>SeKQ*dTx#<2F+uZ9)QaQ-!W*s(Rf!vbUA;Dz~;ARbAT8gEsAxX;Z zMvCmF$wX(`n3~f0lzm{4An%DaY{VjQVpLN}B{u3M29PjBCXfya75TVh7F}VueK7*T zosmG2B3rn!o}hlqmB9q2eIQO$J|WgIE#U1cE6i8Kb;wmY!dFDmF{RbY2o?`E3af6A z*V~*Th47Fi>!{H_eG{jK^$UBwAPr8Zv|@D!2f4cyb+kF2X?klZNM+ro?nY;W^I>Y> z(X7(EXF8`1RU5qdFh&T}NEV-JG1CzDftW=+P+CW?O6cJ>Z=-^cf63U9U!_1$r;wIs zyQZ{*Mi${hC(D|@2qq}N!LpUSQ8b`6i8c%BDG5ZE z>NHvzAq(Alc;dPu*|T;CVStlt;ZOXip$jAtXDI7e;?k)nwzr#u85SGf4XH1XTa2Zc?X&NU*olP^m z6Vnq>VDcy$)9rHd<)DTK%jG_HrtR0NbT_JLo>Dmbv1d}Zdb!49-R61_&$$2x}`pv565XFfKrsip-%%4PG7=kRFpfLV!%Lz}!IE3L+v_sM+)kHJ%rOlNqM z5m`y&L>xSy9Ik3MD}lLOr3LnmnvBtnuBx~!rDz5T@0xHD9P+0E&YVAd7`1Bk#?~7j;;jm<18U*J(vK5Jv zySo$!9}RqA^Lu^0*i#X@2NQE=6HuGd2A?BN2!oRawVm%_B~$LAXlf{wjva_DoxSR% ze3!LEVr-qeQ^OUk5Z^r$@nTD&Jor$MI$Rx?98fA{DN2>fmMG$Etd+X57hKTWWqgAQ zZ1heC&Mch464A?(Q(GExRZjwlf>~IMovyV)W@;Ns+oKXU0-@5o0JZ zrZ+VtORiE5?V8xTuBoja=r16eFB~VfjBapiVrx1Uq=Nb?2bK25-S&{8p&fS<>3 ztu+f08X6dNVh686!GfU*99oRkSi7IM9|(W2rmJ)=zyw#uA$%Rh; zLT8DrGX=6!{F~5`B0#*6MTVyMTtm>e3u_sd|~-&9s@aKT;>r)3_i^W6l53 znec9bNMG@H+=AV=gk5!=w2@Tz8QI;SU%ux}sKso8PrY2$IptF#v z@RpgINHO?K>3W*BY5}r0lgSB87A*^Wmsw8ZR$1U;&vGoYNSqFOULK>Jg+X>h5HG~L z(jXC>3-5@jB0X9$Rkb%Tfy{r1qnda@u)cw_LT-#xB{bQMZ;H>9Wgx27POgX(OLUErfs588FUv2Ug`X z2iZ(_asm1KirMonGYQ$tA{9khW?&05(o6I@4fZ>{%3ds0C5PQ=r)2#6fj=!WzI!6@ zP%I{rdH%QA0b_0@dw0-KZK{ypL`JwzR84yI8WLHN!KY_&Pw%vmq3yaOoX_M&>fLU3 zOb5hV^D5I>9^D7?p#Rx1-l_J@QjTJY!Dt0_U8^PK7T@=wJw2X`-RwSDZcNBh->Z``oBvUA-t>r26+FJZp<_i*BQmRk z#Ntq1qHT?*(+c5s93(+<(^YN8t5vHD`Anh}x=DDqwCq~Ed&_0bULShWyGC!$G!CLk`&>s0F&;!9$9aj>a>u3ZGF*qe zS>wAjtyxE#AyXzU+9H+3sKj$DKu&70*A`&1xHbo2MtFw`Pt{K8Wfdi_*z5R=jFhDt zVSOyalTU2n&R*s3ovUglRhZR&T4}=*-r#plRGIdNGr2aGva z(OnLtkzKRdZ^jJG-i~FF4|n|R{^mJb(3>YM@Fk+&jhi-Hw08BDZI`ZEzjh&#%PLOi zExJR)_P@D<#^|MQGeN2H7|lh26kd}zqD%^YCqAC_XooCnfj>`YN0+U4TRC@(0brlI{%Rh3*P&AQKIvs3j^(R81P zw2rk!QW;50C!-!N-|xZxqIn*q@|^kNY|v-%MtqE@mr|M1xuD}_C>^v{am78R;y5w5 zpMnv?2dO-&7xjwWCat1Hm9#i8W8o6(gbA%bGuj6_j8t>UL?#=o?z{IISL2A8SUL)m zsgQGMZb}%2U}|VbVvlg66j``c)Adw7&Ja@y3-^W*NRFX%UOFsQttcogl{hbziR{yT zBCyZ2(_)|U$;dvP=VStkVjb+03U)OfRtf4hmMAe#s;hJ^Fw_jC149*8!r0r7 z$eE<7xFzu%r^txL8mbN2!?|Nu&H!S{6d*;r8IU9a3~TWQjK(pgO=wDlPfHaH;rNkw}3=G(g{a0)72JdCcek#D`fMKuJQDSH2#{R`Fy(ur;@qejt1U_&7s{( z@(R+~j8KXgh!kEjv&@3pcdGKiwk6upsAOaP$6%MjN8Xztd+#&;C4RuDBnLatY`4feAYQ!!^|RtGj{ysi$*`Q@5*Ho!>$hx z@+O=n9uPak1dT0`WAo{>Vxafx_vOZ@FQ(ngcl+GM@)ZnyRsjxD-iw$B#Xze}T%-E) z^{;wX&Wy2$?~1%gkXc-0$52o~ofxo~VI{>&6gl|}lin9;`S%;sVo28c&9fL%6gOJ- zRvx|{iUi1IrWVV0Y-Q;cFYib40_;4alC)wdYRfLAlRJ2Iv4Qt)#P1a&_1aejgHygZ ziv@IPTh}G~SPhbBpEBj0oD3dd@l>t0uMLWO;V_S$N-gspN?uKDX=RQq4ppf*4xeTq zHa1Gcga#M!U)84X8hUO74y5H9DoV{VMwQ$Z-n}q+)w%%uoRdA4mbfe9vrd{79!b-c zwd+@{yJXvid=zWj*3D}-EhIDg|Mg?lR{!>cJxwo%X8yWYr4H>_;RuI=s8c>CtFSz) zUu|CJ^?=L(l*%Wr8>#HtHc=ZK-*J7uE8k&<$P)2_>+><>m&v2oDj(l%S{4?4i~McQ z_~){^jA=3s1P|QuA*zKrMy0p6li|XPpD0>h0G9ioRFf%CxBIq2P;K%UrY|8APH#rq z3Coa9>evFm_HIh}(u#?vy&Q#L+dB!)O$t+sQG7YQs0sHdz89u9R9(1J0*mHKlr`&8 zXf}IeLM02+aved^?Y)XUU7yNR0@L6&E7lQIYgj$U5QP)le97y2*EQFrx%jru>lm$A zQw*P2{Uojw_A@SHFSRhs@@1zlUAh$Uf#C-kUC5%qF5JTsf#n8EtLP{WUl_Y=C)saI zl)FFA;Eq6{4GM+mqc_WKHVk^N1vOOM><__v@i*IL?qSzbjtm?U-5qvK_%q^2+QdEe zM#Dc)izCK>NRPl0!5ZtElUZDzhS3OKrK9cjigMDnd#JLNuUJ@Iv-xA4SH-8(beYj~ z+0x7}%jjb!?Ax(!?-sM9a5lPKH=ms^TdEHh*vDm88 zn2}AJ)N*E5ZKOSthc~QDkGaE_p@i&P4w=%>W-Ajf;dRHV%n9}t$3Xt+(`6I3q}O^g zTQ=owes<(+R_g4GBGgQq&5O%S3iXeN3#7Or>)W+-+9%N+CBsy8lx%#TiD>F31!s!| zy;+Bj$%@3NM9R$FkIcMHVrrV4ku0cn0-LYx7#|;7&|0`+$r5ut84!KQ+>579nr392 zN}u3sc@c%Ay5GBt<{DqeBMXE1^ta%6uZ_?8n@P9eCIdd|t9-p#!#-ThoTMbWmg#7! z*Qg{XyKCxM+y;39*C+SfG%5GEW{(e0-QHrC(nVm!z z^DaS1i4CU;Kf#NHD#O+I09)A%zFlmUJs=ji&hC!i#kbX<>y2DKv+Jmv!LWNhDisbw z1!l^-Z|ta6v`k@StEliV3RVrzh``6KoDe#Jk0jS67y~#g&R2a&3ujmMMK&)Z0ZCp{ zl7J9P38z!sC>+}YDb0)L&9^268Rby^c7vYib~n}^Z?uU(Iw>OQAinTj-Y=|w955AR z!5=2^++oFU;#6s-YqnM>!7>`oU=Vnm%}2AaUJj-RU7T&sbS`l*R^I2PLFGXi`NR-* zaK`(j5=Hs6@Ey9=QfV$iN4n%o?OLgYv$5;YE|$XwDY>(M=S@-dXUy33Q9mjbKjdLC z->77K4Z)md+jcbhNr=3M2+Fu6Y2(y{AEW55Bv$SfxNjPs!#B9>yCwybNmn=_oHNyR zI1o0sOhz%|vXxfHvc)=B?gz^=rmA{R-#jkuE7#n9&La3qnHdcI>+!3^Iw6<4yzmmP z0VB@Sw27Ec+3};`Uz^pk8)0&myAWDhS`|>fwS+vIkl(3oGI*X4cX^1;g zSmv*0=}a^QDN8Ffu2Z+U82KdE=dR0SY&7q&uz`LMhnQV6U#hv5v@TP$-b`2 zsoe6B$L1Q3@V9i4(WF@CB)rzMZX*eUo=%xf`<`kverD56vMk0!*Z~oPe`_3uJGzGELMgC71N3?vP-k61nNx}m77yX9qA*&cvcSke+4^_g!HmYiGcb&0!dy{x?X{uy~@t|@0ToIW-glY7in;7@L{izhw zDRH$E*_=&v&Z4GtZuN#uo8fI`6%^rct!Bm5P0C2Ikzg5pycw>|?nZ+~IxbU}VYren>27PR`#^Gd|M3 zm5wvYeQJuk4Es>Auaw?*ogN3+hYFLd%}{4}^CiAd;&BHS`#ia35*JbLoG5l;Hcg^2 z%PoQ0Gu+|XZe{81n(Eyno!$MB8y0;tu7q_?w?emQ;N&8$pl5F2QljLfj zpW))Q&&4|h;P1Xoa`5-wgr9>h)vNqWdduUF;@7kf?pW#RV&T zY;&LQ3Szd;<&(7S^$sNm1d>SR{@22>PxbuYTe1(LvzM0agCy)0nbyRRy2g8aW_s(qKjy)jpUX- z@TU2vMeo87XIlDk`oux>QoBzSaZKZ6(lx4jXS1IL!(mNbTUv-<${)Xv5bDv?HcV_w zNn5G%&^|34bfqZyY}*H#$gcees~-(ltM=6hVjKQxs7OT%j#!yi2533ke%-Nf%&`&H zbVX-IQo>=fz!K*F_LX`2&|)3_VfiWs?fJ#1XP^ycA&n#!Z&u= zwO=TuIdOHhl}QBSx~&C-bRzByQ8Z{QrKxdAXCfEr*w>P*<59KwX`9xQT{0GePb`)& z0zOsv-xLoI&8WBZ3NHyHA+(yG5VKsyh8OZK?*vQ$lY5}TUSRb1V=U)HjoWJi33nUQ zk5~A0Vcim+Vr$m=vDIEuUG&nn9wH`=Z>(egRD7?s8{@8+wJS3x$cs`*XRjME;m>?zHw};1hoI0(Og>aVfsLQ#e zezK#mF}IcQ=~yvOw_-`FMBSqWjF~7pEo3)iE7Amm>4^C*{*dly*o^l&-R-?D(I!36 zeV{~<^a!ik5OA91Kx{-G+h3WMME2=dwO7Sf)|9VdvYr7gP8+ylos>)~< zxxlEaa&S=ODq_!Jw&n{Tj3AHj5anQX8^4BD=p#Nb#9}~9uTfysQ)gsXEKiLNdsI@o zzcbmS=%NSJ>~{}h>q0OdMuSY`y%mKMJ?KLyMZO;&c|tHC!o2f&*=B%_Ed4@Q=flr@~H2 zg3;k2{vJI_tGxS1%|g3uxzijSRZ#p&L}`U570GcFye_)pOXe{zFs1$}O&C$)B>;X+ zn$L#l^JpSS?7S;JS6kxL%ymluTaDujrNx4CykM?O&_l^qxVIOz({MW!hS`;-7&94d z6fB+5OLAFB^J-H3o?Z0lLInk__*{t*Dl)jUP^mjObbM1Ii;hO&r6CpJ0oaU^=kfig zy*PL{rWxhqba)_p^#HoOlW6^uItw|x{)^*U)xoV{p~Q8+bg1Mq>n<*>W)w*&LgABm zF^tSa1K-sKO*sy;y|-a38>OK)OY9eS#G0^rI=n9K870bDBk@AnOO59sc9U1xVm?4H zg~2e#X*G$So-c5HC~aC%uk`t%nd!}5-XC1But*J6nFV?eLa*~J)C&uYoAp;p-d;A; z;xX#aQ>fDV8Gc1x8RE0JnuF;bqKTY@t~M{fq#7)*NmY#Pm~82HJfcK+YIX5Rxae!7 zesxw6T{IJ_4*!f{X5JB7Y|k^dOsP*HCDM{%g6uY9QT2_7(sa*LEgFV?cl#15jV0}; zJAyz<)xZ!%3YP4*z8TeBeNn#jUb#77(9>#0>f?`Er+y^DhgXtJq4+l%q_4^k5pkt% zbk*PN@J!}3N}=OMx$S)7+JDWv^t%0u;(ZdS8@|KIPY4ndL!;>@;!DRJ?>LsI6WLF( zGb3G?u!k-Z=Bu(kJ6LXZQf3Objg0X|joo;BxlHGp9_C;3&h&`A6LGL%)HPN>t;TQo zFt#yG#yHxgrPrQnPF$pxJ_l}Zi0XF@m5=A2F7e)lLA75{l>Z<;iZrmg;(W_K17V4F z;axG6mR%?YA~61n>^hqy4RyTLe0}~z<*?Zc1pG{CdK+fe!rs0x-Li$@`zTtZ!_D@5 zIvae&n67c1*yMVqP1Vv@7>o(S`ygjuXY1|PpOej46fNZ$>>EAjq-Wh=&t;@9vW&eV zUwhfQ^VV+8Pw8FSyL9fRs(!tsXMJm^HrR7sd#Kg3rLiKPyKzI$rmDUd$0EfV9PSnQ z@}sh+2=ai-S(o1bf%BMIIzxVxvjr7i`#+vz@o~(hZm8XRqFH z>6TTix14+a)=g_Uvu;!G>J979;Wq!$SkD&TC|{AEw`tv$b(=5D*Is(TCBplL?yS}~qQY-zudtUXmN4PbYC6AA(X*Bx zR@8@RR^(^)*T&~=v@fFcoKK!qYehclA4qAfTz(c$*0)ktE*Q;^Uzsmkc-Gu(!C+%} z&yAHqeyhN~Jmq?Bc)XomDTjZ8aihdN?;=s6kxx~cQ@d{(oZ<)SD!ds}s}3_Is1+Y} zy-dF*(3@{zTBUSxO;e^SW7P>2=S_>@ft~sRkI}}S+jc)g^=Xa0L4r}Of;v)tbV&Q- z#2}`swp*bonvr?2yq33HZM!2pUoBe|EpmANI&*W{JDCyIcHf#$Vas^uj~~?=QEOw% z${%MwKYcly2kg0fa)R!W-!VaAFrSXM-;4{NEN?W87InVvc+b1`+&wy}uTRpkT5rC- zvFGl3ZGzqn)R;)t$D5(it=%`#Td3I_fOK+`rm9on~rE;wb;w|yo`4j_(XoTPH9?` z+iSy;Q0Gu~?PI~Uyx#8j-+kTGm>Qg7)ryb58g&QA@zq$1!8mizyXs;$asW{mJ}BXL zX!#Y3sl2bJFCSz?i>r9t_3BP2%!7LKeD0z}YZ_A%d~tfTx?<6y@YA?a@w-*j4-a7r z^=_wT!qI7jvHe4>u=ZeMB)d3%zI37 zewx&N?!W5Yn_rB}S_wz-Ls%jW+rZQ$1=sWbNj+ZS&b`TJqrbK1#`aLnIUM1$FM`4B za4A7s+5z{+CvWJl?i^7cka2|5?nL^+H>WdJMO?R%HAc)TznwDoy?xZMXwmxWcw=x9 zcE?7HOzyd@4&C#Mp#dzQuW8+9__~Y`UHO zT5FWoTvb-eaa_N6yhBHl+R`DTTU;t1;Luig*$rv0ZjUC>Qm2RPV8{<@qw3b>W3?9Q zU0n$z8>op!wuG@$ACwtGvGP5bz#e-XC{{n zP7aUjCx80LXRr1x>9hApUA2Ty!SME{&B0+l-UHPK$XjP20Wt^!wFyKSZxUhEYtF-_ zsH)xuU+wUrJ&(!i>8GmA1aMG{rosA8KUGQ$5voqnU@SxA){4H3CH<}sPYySjDbac2 zKvs()RlG3*mpc0lV8-yDnp2a;Ka(psV#Ml==1Ln)UJf6$;UYx3a%j9~*-{&F)uZ}91xc~|!>p4+DumNIo$CZ_1ATyWWr!PU!l_AlQx+&7~% z!VaWVx63jjrW~uZf{;WzMv?opVhd+{M3*F+NR|{wkmvBYDAPvUc3$n#M93V6pl2#- zUeF+nO3~1LZXTMWq)q4+6S-{)q~>R@#5Ekv*KOXApLzPyWeNh@#|x6indQE7xX)9A z(!JSvawF`=6cT6Xs|43)8(e>zNg6`kwagteh08~_;g7rz%`D?ZLxY!v9jx(%v(l}> zT;OML37sWfG1z1W_S}h^hk-W+$JvsO4RR?T47hcU}Y z&y~@h21`DM+dD4t!;yO0Kx0Ck(T_<>jpn;%X3dk^T{L^7 zhW;q*mU^AcDu(l>nY?3?zoolyQEL_XHic=XyhgLx!283r58_+kWq6CcVLn)R8mPqb zgOhnHMna<{hf9_!IrX^WQ;ZIdrfjE(pvzcuIBQ^v@#9R0Ifx#3qc~vbS@%90gSq?y zno_&(F=CjA+29(R2Wal7k3h#bxu1kU%+=%`UvjsI1x=%@ZW@*7VFr9AQk&LpM}bLW8}?QwLyZ^SaC@)AAj)Au)st+2iua9Nmp=)Fri{rMcRb&@H!by zv=02WlWB0fH@_%&L*+{3W=v`3XFJS&t5Zzj`264$O109G_l_5Z)6wsW*giXb>e5s5 zi59+vKYcMBm%_q`_j_R~({yt8tz)B;9dszmm~=px!tVJOpT)P$eH}sdag5){-BL0I zO{Vzryv8X>8_~WX1*tMTy_-6Ox${Bg+TqTi$x$kF7zwEk=jAAeHRy`lGxsa_+N8!oAsD5K$YllS4Z}7d?93Km3td#bIf+2u-s{yd9eR~9%MMMHmtBl zg4s5F3ezC7Xdrhjxs}C0Z6+k&sTRwn9TP1SOPE{+ea=j_GGaagT9g5; zDd9m#x5H&**n2k{0z zQ#O+KZFCdFyIh4{F1r#T9Cu%VhR_sR#ZN);k~kg)D!60@i?8B~*AVq`YygXb)fx|G zUHZ>r1-&_e8eB=KnBX+_dH5g%B$!Q9^l=>v!7&^*0L;91c7+e|B>As9%$I&*O~I>j zcu&lfnx|i5({Hllg^9hLiPrgnK%5?ysl6V@FQ!DW{l(xoZwS+hT> z%pb*5iT2r1VvcnS_Yruc~#0t#I zM~rB1bvs@Isz^^Y*$q6Uh+HYi9y~24XL&F!EU&@r;O#h75wA_jU!i(}Z6i!fyj`pP z)MN|*+UQ2DPRy*%_#&K<+ioqyrnBm(ZsH^4vipyg!o+3Ix8UNk6O9#0ercFftEaR& zRmd=-u*(Y&6O$~#(Kwh~A;3L%m!pBMID#|3`x$Po#wUqi=X{}30l z3vI3Op)izK3vRcctW-}YkIycxOid{EON2Qrg~WJ*#rR-|sTCo_Y`+1}8E)4CuYZ9{ zFZ1e$?4T0Skr`vpF=(JwN`;@xQSW&@^Ne{)q3(Ra=vZ$)uP5F%Z((n?2?xA3kXb+^ zh-$m@$fk1kYcyM?q=)=LRt;>%B?&QpZTs(br3WRaqA+VXyv6jS2sfLCm$dt`i@Ec0UL_}} z9K;Tu7L4UF?A~00@!n!mjQc2@L*YmP&7Tvb!Kr$6Do~!D@2$X4;t*e_; zl5M1^#8z;cHODD@Kkm1g5qd1Tf%cIy!k4UOpyqn>^KG3jsQ}$Cl@}*sMQxSbW-G4x zi-%EuhNoDpV|#TcerM+cgPrcpx0=llcD|D`qO^6SLgli=p&^C&FV;p zx|0PjG~r06bJ3fxHrGwcI*3iF*`}d`UemH%Y27h$phixHT#W7>fHbK`mSj)Tum1*B zs|A;Fd@9B%x-d8fMv}1J6XjU-6w!@HsltiFs9|#RE+>x8cGy2R3}xrBJf?$0;==qY zYTPuEK10_!v*o~bTA4IpX=F9I2~r~qll+4?cz708&+ePzfbBFgOigI1NePd*2N-wF zdgDAZStL{g$)3aLd;$V2_VIw>k`8B?4=Y0`mXScsvRuforHI7w2k*6>#XXjH8Mu@a z!R*Brir}%0Xq6(cSa7#!5|t+vB!fwDKDRDsWeA}t7R-m5ZF*yJl6s}bi02R%F%Gty zB@3b$h*jy+Jc`odI0P?3zq&evt{SOTF>1vJd=%8u#|PwbPB8!$$BeB)L?CrbYbYLb zj3rU_n3W#>sSXUY#_H}#oK%{}WO~~^1?KaJ4${F2wJ9uc&CMCOFkt@O{%6tZE`NSDrSmC@hAu?iFMnsSQ;BRGz=c2fa$0VE0iR4 zUaW!@VMmYgLKww(ZB9y^B)9rHd*W|GP95?|iQ+MlU_OB_C{a?cZi-=+jvIsTk55L3 znzuIOI0fRHe?Q#V3B9$lD!C&puAG3#)`{RV%?*&k35+i5lTBC^72CDcLo-A)QDtXE zEN^TqMYEum@`3Pfw}feyr|3M=ExYJHP6 z!@kBSQ_^8rmsF$FbElFhd{uZUJi*1yrt7M-HA$4wgh!!GNjiQ773n4MpliElz_2Cv zD4G%yS;}VDqB^Qd1ha_Cp1X(L0VuUUJ}VN#6k=gBTog-*K;>l|HI5}sZ)yt74+aMc z*P_$e^SY{CgCPM!GnP5qG=$v1#9T>86zVBSe`#DgB%HzMP^@}L=@Gs81rqDhneZ@I zm!V0lt#~j=7Ra)kvh0Cb)~? zj%1~y6M-bIeU!$q=WfE$_#^g1;fgM&=@6e%=>ge7W7b+9ZT(4^3vEU`r!u9y<{m86`-rX(K4q|+NG z(;Z^)zIZW(XFklw;z>abpLtTCam4563h+q`I>~Dh6;XX_Uf*4ovQpTI?E+ z&|g@mBqv&=hJR!eqcLSYa6~zEZXM$UJjRn3o4Mekdy-_ikvTU&2-)%iiF@EXimyVm zlTXI-U8m+9m4k6BGOlSYy+{)Xd`bclIIPTXiI%!s&iucsm8F`dfEFJeAOi{$N#-7D zLtZqlm+X0(wV+@PvqNt46#R+;jT>My0-rRE*l(Ox>vA236~@>6deXd;l4NVuhJ*)n zOi8PTNIIRdv@9`FaIhtu<`PILEhtethN>3l=P7u>P!|lou&mffjlk(QU%(dqci##l zBpAZ)+RmPJZV|aLaUhnQ0|aomRwGj z+!gL@-aIi7eq>0gs&F95)G#L+PwsC?0txQ&o(lS9W*?%fwWaYu#d-Z|M0x)^*4Jkxi}5D)L_Nc(R-|pc>MW4Bf>~iBhC0QJhihF&r8NSG@51fX}02+O&d(dv2s%in3@K zQ2MQks_eAd$?ryB!ulq2l^_l!CrJ5=SARVj#Pk0x=*gM^y z=DFptL#im=F4s7{O2Dj+z)4AOSbQb&MHlf(u@_Ts69Y`~1{-zL+0$tk15%pIO{ICL z0x;oj&FrG<$@{TV8c8X^Fe+JOibXwe8ELTO!ntVq|D88_cvb_OUW2)y z*=VzlvmyF!XfuCp0HUX`=2TbtXcjuxLSpV%&^O5iWvDE$5cx5N&7z-+Ory_Q<9HIv zc1)fRBM}v_MikpBQT$caa1 zrr5o!{8`gUX;BfV_lNy`lqmSfbqj=$e08nC7G^0)XN|ykiD^nCaF;xWxC`-J)BU(4;9V)Z4^JamyerbvpjaH_?G;ghg=oYkeoknsl(I~TK z8c)5H6_ddS`N3rJquqZfw4dTW$b?d}({#EdgN4y6_(Pu$VKD7ghz>TPnRxZ%G5Z^D z*MAbk*NWs^y1|eYbmiWuL4w;_3J;W&rN#TimiT7(xmprxf|kj!>K(}_{OAo9*QD(`Di9u zsx)DA{R)o-nkohs-{MGaCf-sVpW5;MPovOvSx6S8buWKQcHN{nA3%> zQmDv!;R|B1i!w0hcfZ^m<{l-lv^4uq^A#x*LKLhtwrw&d-Cp#o%X-A_l<9%{S(K+T zpGOqp75TQDBx1}Ez2?%8N%d&qk~G91Wg$1cnb3zT_*IFdS}6y*?;+)Ywe zGJg!dop&9r;;|!4%qR zTRwDA{ z1|ht}WSLH!Ed>;q($AKK8`eMNi)i6VjZ3P+TM{TJl9U?NITP*_muPqVH4qn_^1UHK zukf3mX>%AdsqKYg$`vnkjJ5m40}5&=T}e@O$%FfZ#%T;$!3V4|x`h`XlzU|4M&5=j zmARPeB^|-Sh(fd$aBJHeX*eW!9bH38iBU=pk+M3fU~nLfGWsL6<*F3x1Z6KU4pX5x zyMmG_^6R-Eg#Y2lL1o9L$uma4!vGo$S89p$I;EJN))+e6)y|lujbmwzL8{W1C0r#? zi==s3t1tXmUS)*`)JZ+EV*EzH7~BeKoL z!i2X5QmS!^jokyR*} zD8YrnvH(s7b3R(2XaC3_xvWt18*3-N(etKfszo3jQ&vUpK?GS@1xuT|+GG7pE^%<` zCeO!vG~Ts+`d2GfSql2>S+!F%EDbhNX4veG9TK=fdg+%t2n5+m`iw7_NcqvDNNG( zA4v|&J(EJq)Moy6GQLDlDeOcR&Qtnn;e%$qpdTnlfCA{YwY+UsMZSxzt7}GPD728t zC9JD$Iq=V3Ab6i~26K$LO$1+ER^p**$zbd-*y}3Ev`-msXb0ps4j)Hz4P7`x&pWT4A73 zeK&fM-83aou}B5?c3XijQ?~YCjWCJZmTdWY>+I|3PV?kXe@%5m2+{0BJ8ZJ%ziRdl zrJ=?acFQ8{3rz>J%0JI$Y(9C4=5Ddl+mD`1|9lUW>Tv3}F6>PaQm3s7CJJ{)(oO{) z5H~JrAKUP3ANsLuh^ogb(6meOx7h)ORcy(YNk)XX^Yo>f>=%vo@yMC`)=kOnzMI)C z7tANEz_WCbGvt2I4u?+-IKgxelwP6=oox}~{%dDn#wH-A_^h+xL3aE9jGjUcw!BW~)r;41qDp0^In^i*P3dB!TQ}_)oi(m&b z70cOof`C{Y zc3t;HG+@HIfa=2ohu0Z_01)T-6-3AQO3nFG$~Dm#+fw7!4X!!F!%xK<22tpKryAez zfW>??wL&E&rh>X9mcaNbsdRokcgBz$A@+g0?ihTYg~xigVH2S;z!XXpJTw~>F{wZl zEP|KM0c^hCdj0E%Gp{y)cB4ib38P)9SG3!$=`*7NAp$6ONZ$+~|4R4bSz4un&%Boo z>yTg5syxvBt;D$n0jT(%v!!!4ehG&)ORiind&Vw#F^l@7Mv9nuDY;`j6suSyiCN*g;VKpH zWJEW`E)An-Oq1)8vojrRJgUvIiS<*nx_S4wa25-{UP(?%(;%OkOrUZbxEDIabElLH zsDewJNkY^=7Orp;>e3B2Eyz0j^YnQv36&dJsCuQPH4`9Kd9>GvYxc7F=w1;my5(2j zG9EOxFNdnUoWmGU6L)~ZKK?RXCu%#~Jv<`$Ka$_x5BK9^zSM{J!`w0^ln7DuIkuM< zQuy$$++mQV^`p6iFA;r?IO?Wi;Z!r_UR0f}E2lJRxe7TfnAp)b4Rdbt^5sZ}RRk>+JuBPJ%tAHcdYQi`@Fq9eI!x^i@*hY#c#V=LI325h~M>;c7+ z%+jDO8f6ddztIfJVld;yyy~|6@uIv_CKF7sX zeQr^xrM0D%SAJQw@JhRG9n3Wlz&7mT6Zd0jvpioaR&;XNc=@;HYq;)pL*haOace&s zrht@=WUu62r7VqHL&_#OUA)N+qN`nA5cs8M^bEIE?kg(^wI3Q|2?d0cF6wemqGd25m8(Xk4#LnN%O>83U&N_DSPw%;4=?n_Dw|q0xz^HjeZ`v1 z5;ce$EATK|b=9V1uwr7vFNO~LyZy?U6EW>9IF`6MPgK|x!3tBtfjP@o@Z5z}-=W{! z@xu~|HH_r6ov3MSDNT#vHa6%H7SIEGi&xVpB*8YF*QVkoM|h01Esn4ioz_xjhE-4# z<^fiSdy|%IXgIfKsm#yDpXLd@U%xTjR;mLLr&=P=Dj**Ru}x7L2hEE4I&4zCQ^MxA zBG+-C4Qxs38~~DDy1~gayNB~982mT*UVo`nnrHwK4_P0k9PTS*4;Cjis?aA}s)QL! zBy#xe-ahL~YY30&FrzO<$;oo|Mo>V;8ZB1}e##L-1gfO=twv+Gr6$RWPPytziH4zw zd!+kPalG zdQn_BT8h76dSObH>b_tLqzG6BpAlab7{vnG-myGDtSKa?+yDGroY)_4Uj6CDqkp1g z=cD^~f4p;VK* zPPJG2Wcw&TD86?2W5%VO8<7+Q$QrjeTmziPGV2VpP@j?u7 zX%Q2x+ZDZO%loM;?5@-*J|!f}OpDXQm(=m(4P*ZEh8-G1d9C(lyoQ1u9qb~)$3I)Z z8qYw?SWf~)xrfGi#E;aUeT)6}rX1z;sQ>Zc?Fmn`Le!Km6}(4OP!+*~>CHN_eWl8R zfM=?_Ca%@wSF)SF`}XfRo(8u2^SRChF~W(tL8!K%GN$$V;SYxUbxS6!(ce_|uDMSp z-$U$4TQw`Aiu&fuQ*O6u4sP}w?dtVorjCAS<4ldhiHpJ;7310LsYY$?TRNfz+QhC# zx^+vdko<#+D0%nX1v~JE3V!?l{TVvgWGaKr102dpwdbvIF0V7*_~Wo;fG;>~6QjaE z6>A{F0Fx`11Ix(kZ;;+gO(Mqp2*r#7ru!FM<#`<+sWJ8^NIp}fRPKEl4o5YU_ z-I%h85t|P;DBhKRv~-4}K5gwr&s}Z={UBaZ&sxk_;yjc_ql16EoR#6S2%6m)&6}^{Y_cvV z1h8GelCT?TG%GwFt|y{OV=s(8?i@!Cd870%^~R1B=38pO%bj7Cs!HFn`Q9S?CpJ0d}h=JVj*>&WqY@+$%N9p)m+Vk5yEX_ZHJ0;0!em` zRa##ImPmK~8}pFzIIujzR2>mG^YPyVtwt663+fO$8kJpaVMK{Mbrl4t&zQ<+t2g#> z?|5Jsf7X}o>25}+Ba~yHtrjAw7~C9rSB7^Q!#nMUmr%v#>%~(+BX|XNa+>Ss4B|6} z<3yXKSSX??ia=?BU(aAq{dyWTS6KoLV+DtnGB#ii6_+BaZAJSQUD+sNQg^Jlp51Rq zZS!LCE93D=wmesi;%q*RcwG$|L$acmeh))RBAdM`uN?hSC%C9# zp)78PW7s~R?iHsO-?2(0bu%x0QD7Vey9F^hIK!$c%rUbHZT)FTfrSV?jhba#5R(Ed z%VNYa6M@Xur>jJ+N#bP;igaIVOUsWu%RNm?;BH23Wao;LG~L^Z6J~Aqw4ZlgbK)NO z=@BAtCW=`&5lSG!$-otafMtzTujg@|5bUfHq&`bjPyS$WYB@HWlXn`|M>B~&*E3|O<`rCi7)5O00N*})S58r`q!lV%HiZo_OFn(nzrxwCS zuj6M0l`H6-YQm$RW$l^!o_DcTWsgxRB)@3{#~vD6Ni61E>w8z1rKKp6n^(+-P1Hnb zXg>USxBwDCz?VDj$u%yY#*dz7j{yn&p&GGn^R_>Ph89kH%D7}}C8?-!oF@Agqavx! zdH3Yb2M(6eVEXH*mrX_Cv5yX1z>c(-l3S5j2bwt(iSdokWVyY_@n>{~8I1#HKzGL% zYI(-KpYi_A&>bsD4Ga$=7m4`0o2L=>ru$~B*4guqaTO#Vr}}zzM(mcv6Ksu^$&3B) z68;HcUl|&siLvcc%do_Sx~TNv;nXsZOrJK$kxVJ$s5=$RaUN#g#k2%jBJPfC&TXM1 z_MlA~CnR{5jUb#Nsrj}2#-~@|@+Im*^OJIW726UT)aZ5re~)<&71rj!K90JK4{Io9 z*0=8ILJ_ORF;ws@uMvAJ3sN&Gl>w9c&um&+G`4Pw6LEFb4G7eN;K-f>peug%1fDoA zY>88{`0%C!$JgR>{2r-KfJPC5YcAl*$zNE;8Xqo|*3Rg+Qi^1vFq{mew=c?p90dl@ z;OBYb&+0Xq;9viAd)Vxc6{s(u1)3U{%L4$?MEL@$bPJjQNpP8t!Fc-6q+p=g2)==h zR0|%X+5$_w`yI=VXEPMmmMsL3^roX+Wo3L7`8|b1bEYdWgMdM2&02Ndo)Q5MktPYAZa@jSf(RjK_ zSH+uU?|P6`;-k@{?2V8ATk-hI;J z4TCuSne|DnR})aw=tW@;EDs-rJ(91P*aTX7bptC0_)O0oPuhw8%6Xp7?8oMvpYyh` zEI#q>F0^vaCofrt=efUHQ0KXeVPf0sh_-XgEH_!8Otsj~cU$;C>z)QMN8Fwany1qv z9lAzDNRXj~m6BTvm|aq2*Ik*D=l++mt*d=3TVTaDmeLSMP8*)G!oE4>aPk?EBIgVo z0uVti-HIk9Z*oU}Zd=U}!JpnJ#{;xt+(51O#J9Ekl>+YOD@ReO?3g&e?TeZdq1PO> zl5?OV9Eko?0^f|_?$$i)U@^$lTQO9tWlKM35$rl)0zRu}F^O#(5sWT!<18<@vKeH+ z=Qk2dSe@|lAuQW|hVc0JES+FHO=GujY0lTo){2)w{nHWof@hoXXu_0cU47EUNr^0l z4)o>cOu6n4G4#28`@DV2XgY9>n6k5Yn-~95a^|FGe2(A|BJaJ&XVAfEUEizWk|WgZ ziTZQ5pi)4d+;$2Qic&RlBzFB;S#(lw|I%WW$A1~eqOu!J_WytNnBdHA%I+Bpluz31 z50pd&IWTmJ6dm&X&|m_S?eD<%9E>juCn8AXm?$McW)Z=s^;bQK+=008nlRoDdvy@p zL!e$v2+&2DRG>cKa|h560hoiy1$M0hX1k-0HAvEc8Y*FCoh2LrpN|4$fl3)7r9^$Q zrC$iWbAPa_mgcd`2F6NSwY@;;#x;y&-6xFQf$)aOOa!g1-vg+K$)n>AqoU6YPEnk` zSHElspJ}XGdbY3D%+**$8THDLeO*Wsxo##9%@=mo<<}YfMMQmE<{;v9A^?bUR*DC! zh-_N;8^e5$+A>yQZ@4dOJlyTmxuy^55k83<8;q`Vy)ueUl0}Ki5ihpi6)wbvg2^kC z+DLm7f&x!xPds^R8CT}&THNr}zJ{K6wiI)b2rWLHgi}R(@hwtYC`IU;ch^|)xYkWw zmb1xUCx7+T^UDVpCJ)(tB2mns6!2^X8K)1c%Ub(*#L3nI?bFN@IT)<#UP?;PdCFp(; z6N?vlZ7B$-UfHo~MBdaPgC@o@(crZ;!+AYVhR!$dyHN}{_DaurIps!hLSR=>XWCIF zCgtG;V!I`ZP^LLe$l;-mHr7Er!PF%DM+~f;`OrNic{B+PWSbHtD0M5{VI)%d?B(_zZ2CtB^DP+nI2f-f=oC~^H;lP7 zepwiB439_LLVFVeDNZ643m)}%gkV=jvqiE3#z4@n%xfKw39zZXpqw1dJkXG)5M`~i zbb@7}WSYfjI0+Iy;R$CvB<71&+Eo=~fuHq{PFRtcI_btq#egT};+s>D0w z+hB8Whwqb8Xpz%=0UGR-oJg>-Raa-OyI{9Z>=qKxhpO&nf(oK>l`y%7W$}Ww#sp9? z3|ezp?*&vD?n@boU!oD#U}WkH;y@o`y;-(H6~4iM0)fxlJEVTi*X;oURv8At%}zjq z*Skg4;ACA6IMCD!m?bTsJUke5bNNW245RZv{&Gx3oc)Xkf!yQ!DmISdD2hD%w~0ecjsW+a~A; zs2S3T*HIvdf3y!RJ$sX|Yt>Y>FR7&3RVlmA&QWx8vi%7Oq#_VAr&lzzt0oh!x!!O# zX&D_&uVg8rv7Em+B|DFtafM>t5}UoK5#oMNH9}X4jJFVEswDvXFMR z^t`eF{IcV0mw5`tLBC_mLMw_#R&p}U<5A>$FV@<2|NG0ohrMWeMHb_^?YrxyNL^;2 z=n+y(8`45yVLm@2G>@K)Ob8AWW)NI04c(nv(xx#?6zy{8Ta1%0n)d6Q@3QJ2VBYBv z26AQgY)jPeWpL~B(#e~SWA)Z-yU8*{hd?VWMy@EQ;J@Sp* zPD(Cf}ltYxtiWSD9>HREV$VSmC=SMFxb>C}Q08Bb(Y=}gF-%Hbdn5sxC)vgOk#Fp>18 zn2D0xM^pwKX=7iNiE>tBt#pOqlyRMlChTxF3(sOhd5H$?;%=IwI?R>f&58m?ZzuoC z@ZrIEMz_pg%RpUw@p_*7y5`#sH~n1u1nFF)cbMV~LO46a8;Su8IvC!iuY+F7`5ZS9k4-Ys0ndu4`G_?z-y#{rP^+InVRlDMa`6`_C&+K2JH% zDc|#L=X=h1?zbO$&`UD@_T4YbjtBqws4Tne{#o|Qg}R$%KVOw)4+DPz?wXfnhn${e zhjKl1MwUGQY=QH^z2LFn)4=1vTfl?CcY$P=y$?JH{1EtL@MECfTX$xbJp|kW9u4jS z{~DYG4*}<&<>`(D&!_z3!4tWE_1RgbD&7P>0=x};7j5_`$iHmgxt`xUK&qU5D&QXi zu3F>mx&}N|`G7U>P2i)zL(j{y8!2xgxEXxoW3!AZWxqT>%eH}!S(|0Q0dD}`4t6fc zvcpJs%DOBgX|`g$x8qt+?LK5fmK_Nm28vE6fDZ@H03Qf$21So6z+=FE@L=#dQ0bon zQdIVG@I#dIP4IHAZ@Gwfxc*OY9eBw`&+i47IKB)#k#w&ERgaH>w}77pMc?}4vg~lM z396s>gWJgG1)%!*JDWJbAA`4Z|5KZ@Y$@2@nq^l(@7F+#dwBl4?erPf$3C7maQ%d=Mr!ccqu6QT^H`(6t15IQkCp^p!oCWp!#*i zgr~n4wEhL>bN>o(igf+p{i)}vd$O#D`%Cs^*<$cYQ2h8ba0PffxE%Z@sQx&7zt{h0 z@FcF+fO@Y6E(M<#p5Gnre-~WM{rT6qoNNG3;JPp1lR>@zN>Fn03GiXy|AOMfBd>S5 zEe4O^dIFT(KLb=dpAU+EUJokYw}EQ!=RvwW`#QJ&p#IKe>va}K=s#ez(;`dZu0sa59VAi2bX}Cf-AurK=s$(h5O$FRqo+W zae5sOF5voPQ1!nE)bq`t>U%Y)@>=2gI#B%gd{FItF{t-%1x4?Vf#QcRfNJMG;9=mu zfU4KeK|O!uQ$634L6x@*)cwbT>gS6=(fevp^lO4D?

?{AIX)1(D{c8k9VI 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 diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo deleted file mode 100644 index 46e8b8cf3f5566cd047bc9c644334cde52fe7f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91583 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 diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo deleted file mode 100644 index 8a287575a80feb08348713591ac10ed22f508278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87584 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 Sp6#p+QMP*ulQeMo+VH;$B>+DF diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo deleted file mode 100644 index 0d4414900b75dad49458788d920d4c9eaae52ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101049 zcmd44378#Kna5o%iyGVo5k)Bw$zr-mA|M8Wgd{*93nXC^A$`01CVfeF-==SOl4cPQ zH^dDQ6*ojg1x00WBT-RVN*!3l7GaMtmj@3G*?)PE>=IM*+Fc9yA$SAkCg-vxe%K71PFU$*^3FYoU_nw)(u z;Qt0ZW{LOf67VRM1J=NIf=>k>c2bsINqw`y)!^;V$ugRh{r2Q6I}3cq(k%M}cm;Sj z*g7T44j|vtmt`4QvxUpOAD4pa_x>xg?6Kehpy>1z@Co2?;KRYypy+WPcre%p?gw55 zD*x3WRb@AW_fgNc!E;H!=`@}p{Tpx@c*aUE@0Djbz5zU(d~XNUj{Ctkfu9FO-};$Z z_6TqY)HqLqXHm{8L5=fwS8;$p1@GYc=T>Lgd~j@SmR$(FZ-E#Oa{o{37&ET_(|TwI zt~!Udfa5gseDJ>WXg~R%cmaJN{oD()?1SL%o|k1`; z`ws%2MtTXT=W5`5@cMB7qv87Zz{Omjb(zb_3h*hUdjmcn)bno!B`2Q+4+Q@Q6dykJ za;Mu|@X@5lLCO6KLG|Mu<64-T>x9?CeC%pii2c8Ws0tqeLpCE_$sJ=J_sHF z{t#5VehupWldth|j|5fU(V(tB2h=#94vO9vfui3KsQRt~RnIFz`i)>t`rV+O|2!yp z_!=mF_!g-0zYA(Seg&$W{a)bZJRVeiIjHB31@+uwQ1zbziVkN7><5*90@S#_4Ai)N z0Ms~sD%}5PP<-=CQ0?!!*6TkIRD0%uy1y7a1Y8qvFx-CusOMe-sy(-ZlB2so@#TY{ z>f8T?o_-2=Jn5C-v%wdDYX8STwf~C&zXPhhzXJ7q_9E}k!JyhRA5^_3gQC}ZQ0;Ai zDrXW@zUx7?`<8(Bg39-G@Cfh+pvu|*#m)zZfa0U4fv12y;3Du+P~-Uy@L2F}Q04yw zR6G9!YFr=j5+ApNK=ISlz{A0#LES$aTnIiF6yLoZR6AY=o($d#s(t?rsvomn>iXHt=kgkI&ZyPulyas$0_#W_f@CV?-!0WDadc6ibhV;9^{lM>l8kZk{ zCxC~(%-eZB_)yX>1LuIR0o9+K;8EarK-IJF^{x+21Vzscp!jbyn1fe<(gSY+)&7ry ztHCdTTfry39NPlE3RHXk42m!Ic?Grvd>r_2@B&bD=m%BKC7{OR3Q+C)J5cTYHmGs= z0jPYx1J%y`U+H{!5_mM}OF)g|8^M*}`@oaH{{&UvvtH%nxfE2t)`G`@ePB0uGx$vK z@4LIMUQqPE3RJlt1ZRVPAMjV8=zQ=EZWo>nDt#W9 zgOlO<8^HynKMFn_{2BN(@X@cyvcte_|{_ zSpw?%nV`mZBiI9O0@ePTzze{Sf};Q9ZgM_f2`XO;6yLlZRQ>M;Ro_RzM}uDgRnLQ9 z4*nFJ4?g^Lp8q)T5u{guhl1-s(WeQj|E~nqt~@I#>Z_U8eA3yL0p0-psw`VG!+r-8?io&a_IPH;K+ zeNc3oeKR@+JOfmHZwA$lcY~tO$3czbE>QJ-2~<7b07ajlf}-Ca!u9>$=O z5qviISa2Pv`~#rmvkB_CNl@*2Rk;6FP;zkxn1c_3lFL7V$Ad?{*~_~Kl$?+#Go z_4$Cm042YVzQwN}3yOZ{gBtHKQ0;jasQ%v%UI=~#Tn|3uZO#W*fzo65gW}Ie-Rk{6 z0TdrR57anc3ab38K#j-E;6m^-0sja}AI*Jx@Y4cb0qXj@z{TKKz`5Y8+gzU>19p=h z09F5MK$U+VsONqTY8)Q_4lnmaa1rUvpz41kC^~*AT;K0@PahA8?w5kf_qKpv3)lC3 zr;o=oLDB0H@C5J{@R{JZLDloBf+vGZ-sA0jKKL}!_kd3azXfW1 z{tO-g9`Ih5yB_d)q@M$d&)*D6Zr=m$2i^zjxzB(q@9W_H;2%Nt^M66LtLHAierdq% z;4H3R1**K4fs*sLf)4}V4?Y(BC}?^Vlw3XtYCQe}><07qp<}@{;I-f(@AvV33#f7U z3^*6;`hfTU8K9mU0_THo1djs$9-IUIJE-RlzT4@v9u$3E3eE%H2R;RS0Gti}5qu7K z*x&j1ZUj~CP2iE>r@<4!pMdJ`k@q;=js_1PeJm(>SPF`M7lKa)uL2(dz6n%)?*@+s zKMOt_`~xU{%|7VmJ{x=@$>rcm@FGzCeix|re-%{w{|KtTM|{ZXx)R)%^aY^kaxwTg z@a3S|aSNz^>;(1P_dxN}LqF{OI2BaCR)HG#^FX!ZVo?3t1|9@n3o75u;8VeOfQN&- zK=tcK;6uTKK0^EkdeiNvCUjW6=zW~J_3qR`oxEK__t^^+s4uPW2)u8(GGEn3B zQBd;rJ5c<1+`T?dlc4DGPEhpvDtHX|Cs6XYV2Ag61QdVW1TF#(+3Dl83RHQcpswEo zo(cXKJPus+F|Vfqs-D+@;+s!_s_$pv`r|+D<9rg>--XP9%eeo^Pk6j#-}_vD-}_0Y z>jU5;x&I^ZQ1G{)={8$&`4vNp;@)>L)_#N=c;DXP>hx{s}zdA&lLZkTvQ(>&y6lT>r~g;4N^&Kce@z{$7xO*>Aq;@xEPO zLzk0Y`i(4Oh_XAt1HgfAIv6fFY*&}X0pIZu5|sDjeY>)!k^d(T?aIyq512)o>(6^cSGI`s)sODVjsov_Y*$vN zyayl8b@1c^yDYBM0v}8I)1dUzH^9e${|$=%2OQL8a&<5$`aKsET{eRIfy3bQ!4@d~ z{0*pb-hZ&?|0XDX@E|C8`*-k5wC4#=?8*+Joj-U|m&w4P z>?6BOKi>+@C%q%!Pr!poANcgH>~L^CDEV3g4uFRp)n)qqg`ntsJ@{zwZcxvC3Y0#0 z0Mt1B9u)oeA*lRB@L*8s1)%!5JX{|Pcnzrjyb;v%cY#j;cLw|#D0%uBsBw7e9H-+N zP;&GlP~)%@RDJ&jJ`~(%ZkOq;138+sJ z`C3r@d@m?JZx^V3`~p-t`z`e6p9Jdq{D3P!+3AZz`laCUq;C!B2f>Gv{w*lF{uz8O z_^?GT-~FKI{5J4R@MECp^RQ=nd!7pJPx@F;<9=em)u8BqF{p8TE4U7PZ%F?IdC1<@&4RDfRc{~L5=6*p6zrw6+DOZwV?c$2SCZ+A3({+ zQx|)Ei$L+sd7%2Y6}$m_UBEdfbY(9ky#o~gFFVouzZSfZ^aLn5`6{UUyFvBimta5m zxFz1ct)S@qK2YQJF;M*S&*1aGUx6C;RVQ`XeC{1J&N!LG}AXp!nh&;9~Gc;94+0#pyK)t|t8k zQ2g;@@HFt*%erhHa1AJV`XZ?Deav!CuLC!eem$t?{{rf{)i_tmcN2Ij_$}}}@TsSI zdMl{%J`O7XLr(MO&j3ZgH-ORy?*zq%UjQYSzXrvx4>`RnyBO>Nb^R6K!@yfW(f!@v zzTo|!<%%@sFVB|5H$U?4hfC+ztmdo)?3<{@Q@=180-|94I^VYj8ez*lKU* zDp2L059;~LK-KdBQ2P3F;7Q=OK$ZK1HO{9CK;=6JRJp_8QQ(`w^TA!9=y2#-=es$e z=(YrGfER+&1D^rU0{1)1m|&av!zc8+;Jd^9R;Ey&hElSAeSb>);9CL4B?_ z&jyD`zZMi7yZU{8&;TzX{nLQ!2i!h?0@U?G>W(iA_$zRL>(AZf*Y68BZ?mUw3YZOg zJzK!5$^Z3$8ya0&GR(dSiq02a;`jh~73uS~c=}rb&l&Rc*8`qC?CGxrTs`9HFM?O| z{K}@=%`brJe?Hn}^XBJ);*(c`(z9;>r8n*eUjqIMD7!jvsrxhALCM?OLGi`=L6x^7 zT>k^OhV(vTUAB(D4&0CQm%)9(Z-9FK0Z@GMV^H-yspaJ@0*@rU1Uww<1Etqq2p$i< z6_kGd7WiB6apPUt`@sDtd^|q{_LBZja1nUHR@Zkg2ld>KK=Dbw&H4Mep!nitpzPU~ zz>~ozZFf1n5LEwO3QF$p2bKTlp!8z*q|4*;!Ba^83n;lc>@w$| zO7~B$1Et451*)E|=lgTVf~sddcrw@r%5L2T%FcWmRQ~@2B~SCOa{k@|YTW-3RKLCr zO7H&?>;eA_$}gUOwU@UPR6BdYXMxWLHI5$!PX>Pl>iGrNbY*Va&i z>959t`pCY>p}&U(^b~VO(tjcGKOFzSAv*ml$BC462lsxRHE7s&H2P&(mD9FOL>n``>p%JD>wZt{Nz zl>D{-iMRE44$tgQzKc1euV2UUb&fl^u6clBZTiz*wd?%U;*pXu{XK_#Cx&{JevJO( z@8MkgD)?xgJI=1a`=Dg^j~uhO-vmzyE!DJ*Mjc?|AXUa94Bxfrr9rfSTe4^w>Ve~R;TB4EF;gG!u8`RV_rD_3)lai z^UrXs;JAb|Zf^D(4$PVTZ6Lq?wt=T|?HioG36$=c9qvgV=l}~eID_LDt}O}W zSO)%k0@wdHB&3g?67KJa8Ni!44kTX#d??4hDjDzLxLg3sdk5vdl(Z#l1V z%nf;!=|SBiy%X%$1^&(>&kw=NIAklNx1JZC`8oIWcPqzv9KYdM$DzM5@|+y{6BH++;A;q&6X$WAH<8`D>(W%ZsGn= za$ToiO`c&|kiCNAbsR6@9_l#zRmlHm@b5^UM&17fZXx~e;9VToa~w)~A^1y$G7Z??+HARwEi$L+1u>Q|N9hh0oOKC-`Sl1C+BYlKg#iGj>mD` z{=gBAt4SQeaiLvgEV;It^ZR-3A35~b%kfOk>mmK=fS7&TFFS{4^tS>$+0O8>z&pbE zx5)Q&&VL-9dkFYb(r1SBe}i8Mc?HLZ>rdul(+Hh3t7eiPUJ0OGA z<-MBoM{^A~AbSGG*E#f8=lC$^4_FEv!})5CCx-i%@a)65w?FCkbL6D;_lR)+?0~=H z+6(Otx<6cdGI>A3wI$#?!Fk{}!T;j;8i)RV#_?+MAIs6paZh;mVDf&^a$vW>CfA?H zwfBPif?A7tH|O%L^!L2*oTrda?r-L}jq6%3TFUW4&c6^d1Y85YkLw3HvlJdO@7x~IZox7 zEgT!Ub^+;~;Jd+vTswi|_nc2~?B@Cg@cZBnj_Wu^Nk0wzCdV5&hB+R>Gf&}|>F)sY z{U;d~hfG^Z&*Ata$3a{>g6BU8-cGuU&F&{T;A}G9Sh9LCb+WacvWa z{+`73(>Vq>^f$+$_#ca`>9AlE39x%hAXE3ph?9@1>-l&+%o> z$2fk&p}#+ZZv_9DV=?Fd4L+7*JI84p`a2@z{X5Q2;CO)ak>KOQbxv*m@;1_1cYG)Z z|LpJET>BKq8#rFiF`MHn97mBsYlpod=hq-nw=NEIXzbiOza9qlo`Az>mOG} z{*LDScJK<0=jZ}|k9V;DKS=%!;rU09carm`f`c5d<@`Q!9S;7K;~kuz55~XyIoYK= z90!Ms`z7~dzPE&Hr^XB5pLA_beS58cd~SZ$SaV>ae>^|uoR!P7rTNxIeOs$Oo^NW7 z<-@g++UCZ{=6vb+_*kQFV!VECZD^vNH~TKB_m8)F@(qKHR`JB>SaWM*px(+iO^o!9 zH<}~0p~m>66*SanjZ@D2e5_7E^{sZ^KUS~#)rrx8a8?@`$Oq~}bzPsf)|KOVV`RL( zd8{^0ZQB~-gZc7HY9pJQ`MMSBH{_>|)rRZanqymLmu(xa_Yc-a8m-}0t|}&4JXjm0 z#iL^lO37PwaHw%veT?SQ^MS^uP4%(*$aoHo=n8#3wJ|hKF51;!8?E&<=v+gkjMekd z^MQPPaI878c@V6JCizpR)cUv7M+SPbrG3o_NZrbo4h-b$n%lC1vaReCJxYa}s3xD& z80jCHXf?Lh=f)d-by`-h-Wj7e*|K%3b+oc&wN|~mG197!v}oK`x;4?)g5b2dRj-Zp z57L{lW~-GCPB63^q5nXwZ>YYpF)%-Gjt$huHqsL@L#rp8^o&5u`9`y8GK|*7#z!WG z`|4v<&!99JU$rEj=Ie(hHWwErjm@YmZ*e(W)*K$Lb+_si!UF@j_#|&`$~QIYLj$dR zyqUL}W8-<>WDjgw-_+Rdqutxx>!Va}^+Q(r*OTY7=FM9=G}PQyA6PtZUOq9QPEjg1 z=jYxFRXIO5wySeN(2uUDjF#nwh& zz12NdAF@s~N9(HBm}Ucv;J433uGS-0{X;bdpfNHCFO9=&W6j}wbrYVC8N{D~p*o2Y zY&D<(kb0{Qr4t4I#QBdvqj4NGtmA9HB=qS{e#HAKhmodT7TTOwD z)*4g_&wT&tx99Wbt)FD5x6hlmIPX>VjbfK2!}amO=0LYSaN!BMz9?K<}P7`dl#AZ)4M#^5f!XKX; zWjsZoGuE$NlcV&ZM}2ryGP?;ehN5$b1<<`*y4V1}TDi|M|sP`V- zyQwzRs=M&^HJd~AnwZ9vIb1M5-!#;OUrxxIaNXFpMysBW%Scd54bC-9R*u>!u;_8e zs8OS-Zs*M>)j>aE3`L-e8M z*b*BMxNiX3KyvKDlFj4Y3l~^&6D^t;tGAXkM!GLNVjDW-i1|nKVHd}nwEKvQlxbG4 znt{Cak2OZ63zif^+g&^D+`)lm3oq$gw0%o&!qCpj4CweoE1%Opy)H+l`UmGGPfCU` zc4om#DF|2V!?ngxhw`kCnE13TYeF!oeG`)##~Z`-{KO^Dj3HmSerjxEkFuV0y+F13c;0zt^DXsB)1c}Prn#(P^H8&|HWcmV zr4wkhI(jO$GpRc2eOPX3p=^SSWED1Ci{ft#HTumm$eaadiN;_Ruz5?*T8YXY7;PdB zra2@QW3oWz;gm(IBf<4@V`6R^v{NG|p(}C}eHGWp(Yvv_t*-WVl25i%gEA0|g4EAg zb0}|a#T}6qFaqMhO^l7mXhw<`bxC;#!uCfCjutLmK0G@V;SkbHku8|K)j;rk92z5T zED#m4jY0^uCD@;_I$diegVUM%(9}HH4YkeA!<`6kF00dR1}j@OdRk(teMya_Q;f9@ zMi%=$RNvl^l`N@5p9(6;s+eEhg5Oo3=v*?VKZO1=@6q@)j1HqU>0WHc`*3UPJ+o{G<0KSV|cyklaR2U z4>b`x*e>=16^qw1&=_MD(;S;r@p^_XXkLTA#r-z#7J!`A|S`9?6&GIMFT$((zHhLryu|V zgodEo!?n>M^hM7D$&q}O5XcF?)=}x^H;BGYjJbi26hKg!`(c_|x6uWMq9PuF39o0#>}H9O4LMc;en z@@%ChqxeoJkCx{3K9u!=;s!>#TMQqje=A%0Qs&KD>ltUuoiDOgNZq(fnR7wj--H<& zBRnxTTUFm$AIerWM_?bjeSYQkY6T(a$ILpvF>IMSY5Z*F5=5WgpvZeQDXb3_iozA1 zhdJ78#x!$5WYQ+k@@hphaRW6p5Tep1M@?<^*yS(jU1}hhHjLLsP^>=C+Zj3L#Wrc| zt;{RU1x5S4_-V5E`TLni8X8aCM!!zRXsill6s7&5P3N@|8a6_a5^k0Bgx zE|Z5}5Dm(EJZ5WctkJ~bkdGDS&1JFjlTn(XYU#Q-h!rmj6@oZ5HskzA#S;Y5EWnz< zY?!mD47D$6?NZue$=U@#>HHuvr)J)rkSCXlTVmW6;dI^D)rE74JU6B<^ScD3@ zLLMj0kg3~HS!80+>+uyPs+(U`be_91VMK)Bij5rr`(lNNx)OVec8 zr64+ecqQ`gq2YEIny6H^8kOc}Yu2t_xn}8xm8&=6QRTzLU~uV>cSWn#&`#4WP5 zva<5UEef(}aR`NV2>FR&H`?@YzA*+qy-hwl#>nDyFowyh5xLpjvu&g`;|;$1oO%yo zx!K+E!P#?rva^Vmj*MrBswoMZu%-z`Z7eXzMUN#@kxpdfv!qCx;`Q|tCcTX zch2(EdWds9f)#Z^N&Ub>mEw)xO+X8qn&|RUt>t)K{aYlPR1j4>L!pRF|DX&(#VZds zA7*fk)RPkvrXRAeLzCE#ap|E*g~C4!&b-uAAq<7`Lh)CcUTDJX?1`GFG?}fdyT=sW z1)Et#6;d0(Jx6iK>lnqLI=4q#;uS(s=-__5`M}YSw|>Ki=8#$O!?E08XJYZpYd6*8 z5GNHOn5KL@E76SJSQK%9u%KWpR`gmrFEqgGgmgXhk7y7PaQXOg<{)vkX?F4KsZrfm zmoi-MxLTXe<7j_0we-b0N5UZDhEmf6@7vZ+O#hEIQM5JzLERM%=V4|C{fxx#!ib-%3n#(@X`u`3O+9!w_Ei8;UrSFz~`Ddz60 z0r>1qgf)rLA-UzGC1`zuJ~FlwBMn+_y2<66B?DAB%UeyG)F{Mm5fmR5QLH((nH8tY z$~KNo;Y@2?VHBnLr;8VrY%O9H7RfZ3$@?m=NU^BIzHCzk6NhPll6=Jsr8>1mUXffK@6eClJdPvi;phMfbscA^ukAaR4 zyGjWLK01?Oy+=w7zmk|gl+dtlZL}t6X_a#G^KEosP%0J|ikM#w?qXK%lvWv$J_TuG z$X1mjT7`R|xHhElSc?gIK?u!Ql?)*(<-I3>#bkagH-gjeBJ3o?UWWT% znHXJ@%|){?tCy0py94553Aj3&(EEL!DF=n==nLKbC%#JGe12>Lh@C~SobEvvqX?_(i*MNA$V96Z0p)U zvwuQbu|~*;&<~QEvxIBIUW;w1bP!gFJ#Z&HjZ)TZDYqxiYeQogE77L(%BI#TI5JveZCpeYPnAt&QJx00 z%_*yk_F9%Kx-i_>ZqpKPKyXP4XC*pQg^*R1l`A8en)R zW)0^{-SegxuSmssKu*2p4Hn!+3qWFJFtPy?4`)vZBJG)=`t7MNlIing~G~F<)JQ1S$Lt=$gV% zq;z#(096x<=&aNrk_R8K*UjNR1-qg{`hU=9ax{w7g)%V1s<~G6rOZODon$uZmvRB$ znk3dp%#mnJU_y>53tkm3E%KI8HA+ST|&IJokMh zuo@hsX<)KU7B%a{xHjIH=|~h|@UICEL1fIZg5V*Z(~oPQfC=VKdps@;^B}Keys3b- zu_W4Kc?|D}ASix`8o_r90zy|JH_`p9cUvSzL4C2($X2Y177|?KWMis&EUe@O&nfmL z*v~nUddotXWWIaD-o%m{=NetS3dIh5PN}wTvMJcexMB<@L+}AZl@N#-0dq;l)mMKM zQuG;ZY2m7#Ph)gqh~`9j zz}&~2-qVyLqLvNeS|_wQSTbN*B8J7xyE3<|98_ABnl9BFCT68mC~f1MBLYSdm{S{; z9+0$_Jixw`*lb;GG_|l-&H&|CvfB>FWn_}9?pN9740>mEw=6`G`mR-L%7BD*P@hqV z2=3n-A7B@>9|iX~tc_`6!@yhMP;5bLPwPdDJp{p@K!3LlT48>vhxw^SNa7d$5a)jU z0x_D519e5dGWpka3)SSai-%@=wm{k0R`P86AEz*VY^#7WQ|7mE<3M$`CRQjIb&!32 zFyt8Xo<@JWaS^?V`>^e2(DnhEn4wlh2@${GHyLAsL$O!{L}uIBh^pK_oiY-xIO#uI ze1;Uv_UKS(8~mJ1UlYR`m2(Y$H#B6dK1?Mf%4d`LSLb4EWI7Zv%s#OOPGM0NgGb~R z^<1^QSeO9@7v&}EXFE`N2--?+)Rt5cyYS#9$!8j3w}qZfCmJ@P3Xw$F4#;Wi3Qoy$ zy{^LfiF2T;g^Yc;4iFPF+jq=WTRSV85X?(h(@;2{?NV_Wrkvswo|70c5ld;o zsKHwkEPqRJYpjF&;Lby^LXqlj;;@xt1Ksj_CgTXTk9iDRs=$K#>62?j_`Z!t$gidM zO7^8u7o286p(5USIz3TzJYn@@1glS_N|)Jy1X#O_kXPF@ZG+|`66h?a3Jaj63}iEn zxR{^EJ&izO6W|1`%`tHg(|URtL*H5f9jLKftc82}-^8h5{lZ=^CrLK#7$pR1B#X6L%rwM(AZ8g4l-AL!5~|$hZ4?mpUov*=uTmhW zDx~Rb*OYe9$Rb?mWUBegV1fc1EIZ0yv7nSu@J>wKhys&G(U@wN3ttXuc(7dVV|CkpqfU3Dnx>Z0*^fPwy4A}y9_u#OgCHkS zw%9ygB+)L0BtO;ak|f^z0#77v(}h&Z%`H)OfhIP*SvuH-Rz z3XQ%axm=|M_Kup2(T%RExUATs86?OTMLLX%g$Z(k%l#0B z_4O#LiR{FPc;V0cjJVC%rM>aFlkZL`N395`5DPY)5K2#^(2lS{nag8!Br|8k-owDp{c5HGDU=c8kFhlC$tTq-c?JB15ga zF|-!MDsi1@xjSvsEm=s(gb^;cN808|O}}Ccaj0Lhr`QmW(HWK0h|Tp8+xa7*U`fOG zplXk?bw5TLBNO<*dK07FfK`nj)Jq$3qg7?xolC-eW$IQd_CO~Lr*dLLj6T(s6senZ zXDnrxF@}UOy{TcdNkXNB#!B7MaEyikeqK~&92!F7qtL+lLXR zkL9o?dyUIdsVBTy(cVt#v)HZt5nd)mUkBl7A2)`$ZM&gQw0L5A(_654l<6|QXBt-S z9J-nX(D7|`n&^{Vh!eTeJsx`?+R(JtIfoi`p3Y-uMh!0lK4ZHct>-NHsNUweGZ;0!oNg78T!7)TeR6kemX4*{ItJFpG zG%g6!So42$CA?c8(%1YQx8OQt>sPGJR}+-XTO+m6)?jmd>J`&GwwEJ=*x7n})iyvr zXXWx@;4RuAC1!@g-4Om9I8KR|%D$dGh_*1D=QcRNyevWg#s!3M%BKpv~)a`w5`M%2r=ohZW39Kuu zX*S@+86Z65jM=ssFM27cg5X^El*)Y1G}vmvPkU<{f2gTeSe$lgZ=+CX1E@zRPS+<2kax<(ciV%p!3r^gJ&{ zJ4=J?h9KUEPZfhia4x(frh-(pVybFyU;>%{5Jxrfg2*v+t0%=jTlj3rW ze5<7e#Ut^N1UM$$bSpx*XKUMUgPo-Rs9g*S-SJ4XRuKq=F>~LpH}qJHDY*fCz|1L# zT2JROG~4LvD)Mf1G^a{hl{BII%?6Xftrx zn!?NSQIIZ*<4|aC)RnIiil?Go@j>x7Soko4Vi(1ZqluB^x)I%5ANr(X#B@1cti?7TrPJ_YV2=fN4QT^O?vej61yUUPtW3>-f3fp zw(E{?J(C-$ce^<;9T4}L*O|^zbuY|={^!Jar`|hFKC%@IMk^?5tCo~oeBZ-XC7(VA z9o)w@1AF0qSx15oTC(1x#V%+Kw;K#OUGN5dmhN8k~` z1&?oPDy;}=L}pcxSRBerw5{>tvO>6(L?K9Sy6R)`Zr#d4J`2$b-6Xu5EW4KP-f~+r z*nzw^WZb9^iS(N8=q=*~y*;WyoQu1@c;rj z&P%MecU;;o!*$5V8hn?gHSK6KWZH>~wkYyqRN^%jASbohYYQ-0T$_V1!@NUA z%}m_PiOb44VBB*R-Q_?U*)^N}X3Ws+?N}E1aK}&V8#`$Odh_XXe2J*%taWS8Sg~xw z#x+YFZQvgNGIKP<(FIS&-c*qJgzw9Dm{5nfO#nuhj6Rn>A` zH0$2UW*5arMbmyE(mIwFNo6EWE=E0^KJUT)vUwh)@;&qA)u7MfgZLOxFBN%`YeC0# z$Q`s-dB;7bGF>pZUxE?C2dO-&7xjugCat1Hm11$AW9Ec)!i3iAjP`*JBh}n8k;w+? zd+)u*)i`1%wjG7ZRM>N9Zb}%2U}|Vb!5-m3DYEdWrt3xiI72M9u<&dcfxn*k{#fMG4)fYCS> z+a@$6!l$JOA~&qhP(wy>X3Z?vcZVI4s`@+*lvaYrl)G%n@nWY-2p z-;PVvou}gF$bv0(&0d)ylx**`=>m(a{j{-oV@BRhnVRH$PhWJ4ix6ZDi!|u@asubV z8kJI8Bjb8P#+zfdRnWg)*liz>3wsOL$j5fV;mmZk#hHok@%akbJfv&9ctaY0P0@V5 zU4v7}TyL<6w_$T=_maGT;%Y`HMGV9iUUp`g1-0)~?=kS@o}vb>$};-8N;%gNMR6;` z!zU!=jn*b*gOl>`!3kcsLU@4!c~fNEJ{DuGBrXTH^SMX){*hsQ2XE)A&fywn79pIm z<0oG<`k8%KE|VCxeRz;J;WY7p*dZopY>6D3Pp1_Fy;r|C4@P}41`Pw93Rasy|=<8p_h0F&6P%oR=G9=9jx;$f%%B3|MqnN%0)zo_vN$?~Anj z`;En7NLKykSqv$P8*TSi9=;xm1juEk6x;9E%8FOKydQ-ZVAmOyLMw)>w(OEz9OTu- zCf>UdzekMJV_y{vPWk*SX3(vTZMW=WHAtd;%9M9YL(7aLeKS0b-jmr}FY8xzV|nwHB6l5Xlz?CHuPKRGZBZnI(;LA8d}a|}_q zu+f*iu5?{FW~1h0zJrlFelq;2w0 zWh-Aix4dWb$01%7pGwn(M$?50GQTaOkD0J<$GW|n&yvE4=ypAPV!m*JK3HHMmtCA6 z%R_iF3L6B|fsa;Ridxv+WWFeB8;M~cHW|~n;?W|Xjr^YTO`F3eAJg6qa}fp2r)f!a zj;76E{4n#~4nF;~4@CY9uJ$yoin);7J(V=m{V+|MIg16(rX!De^V2@>lc{NMm)^1e9gs3a%5ZR%M*26+P47w)-fQl4?m9xG7fKZeuYS&Kp! zb~N~igokWJo6p^&6i2pXb`f37y98lNY`9eV37#bs8ScgkY-Ka}cCl4fLCkQuJsrP` zZ>vF98o7LCS1FspuxC9g6%wHUGv)0MR*DrZi!ibkRQeYstA;uv@Np|Agf8GC$#n_F z01k`uRbSG=*_C~f&CA$;B(JHEfDlUwmy5VjNZSG_&5PH~w`L16$|3!BgKBiU8_SOm z+C-qZC?Y8lU-(YXOY0v8Oc`15he>?zu;Mpys?_P8trbeJjD{Ty0@c}kGz;tHU=g8< zv&~M|3NFUV``k3BJSZcd7{U&8d`>D+lrI*(L)Ti$%}wY?mwc&RE46Sob{*QqeE1-V zJNs8Y6jgu5j9nk~qfqff9v1VBO2*d^%xSi9aEzaX$h(Q4jN2w{oSN`s6zzq?!o2|Z zO+!6=gUh~aQZkuzg%iR#Q(cDxVRPHbC}v!^#L8GWUx`JYSd=kU)qDEpap_!p&F$wb zg0GaB!O;I6zbaTK?Bz}uUc$ZHtUiy}7I#lE9wDg}W@%`?#9mx8`w=t5C9UGFe|Vrs z%FmB^469+4T{HoH?sL=QO4lf3;i3 zb_=QuP2O!Qq7pHFTb?HKmn4HVGz7kCLz-{f+!>B9;$dye_2rGQeX7hF3bQD&Wz!jE zs$3r{uSU9u7Z6m4@h|Z|7@8e${yiYuBWXrEiW?cVJ3o0Kxt(aUBtv-TxtgzNN||xS zuaTGv^PSiY|CUKs#Li;udFmAnQTff_J>Ay_8>ii5z?bvQaP|fYOuL6+O0$YMh_*!O zefb#TEZgG&O4!V8oyA8BX^1CMSmv*0#g%9Zid|ZvaaG;sV&s!tpSv!UvC+K8!Up<5 z9Ab83`2x+gq;;91^<;Xp%a(3DPUV)5eQd7r2!Bf#8BNM{PQq*5E6-xXpl_$lrhHE| z8b7n?CRrBaA?$#N!9S6|iU)&o^WPTekN4HVIP6hCc{;j==0Yj3Km+u895BSXf_6?R zI#^c1RYhUA&)er(%ZUUmR&DKx8SY1AU1aIFnp`cVW0v-Us{2l?J?&X4jjdEM_0CK? ztU~WA54F{GG~PkzqC{$nF}3y;BQk>=O(Qo+*_CGeABu#7ZB*6X_A+DdW|DYsX;Dar z@t|>gT@X8g2-E02H!<#>{i!0RlW?^Y*_=&v&Z4GtZrR#(>)~zfDk#I@TFr{9o8*yV zV}oV%@jBdz^EUm`PW(j)i)zf2*Mro5%@gK|>_r_u720#jh5Nkctc7;ib5_?Adzr6; zJG>Vij4Zk5N@7lPa{h{v@sai}cbrk~Ra4w$*o%UFrF73_dK_Rc3M^!;Lz&^tm-s%3 z#~oPg^UXDrxQKe^M6naIX%dZT9tqU$@PzMnOQpAMs)s{qpD@vS7@zD73pr!;nI8Nb z9&r)c>jzzu_Bwkc+1_`ikgL6}!^LZ_vsVS+uYOE&@Ygv5pLT`qiA6lkKW}GY+&(Sq+lr(nQ9aqT zdCDz)p36S7;Bh32T^MDJ(w$;c}BW`jpp!i+2-aB-`i^SVybu z#TUFNLf?iFP;kcEf%^Ii-`M5Uexa1+#MRYSCJ~J5wiXc5g?O@=tU+UGn;N%tC32C{ zzLsPikE+ct+q9nDC8Htu#9|2};8TUaC3~nequk^bUN(?~&}#m)xXWd9%Us^&-3AlD zI#F~=$gX26iU|hO z5%XQVlJ;m=$7h}H_Fk80Q&i|aP(hKR3M<++dXDoAS#7~h7D$M6Bkx)Y)9VeERcl`4 z;#*+;^`2s^?QXPe=pFy5Dx+EC0;8_-!9kI$h&_kdnlF4Xf>hxl%7OYuehsbEM|@z2 z#elfIMuAb^IwQMc`_$;LM+xA>z=i)m}IpmhL;=|?osY2fcorU~RuQ*dc)*jXP z@aq^XJjNvkY@GiJl>Hh?Skl+q&#mT=UVtkXC=o`;UBs}$jTzjdK#@Jp<^1F9bU`l{ zX-5W~3OlM~pN%(sxxC1^SGjm;LVEx^lomOi-s$%Wr~*c}yxN9d>Wk2WY{H$U$SR~+ z?bUy{JLS)(wKH*Lle*=u?y0a#l3;Xrh`&dV(h6_?QM1r4TkbSRM+KC>5|OO%6j^c{ z1uu)P_>y_t7g%il(>7s5iI)KQHEBK@qR*p=AhGkV_*`v?Q#02s0ca&w!*!=sGYVCzwkgJ)j5Z3kozZi0Tbt(9r1(9%=+T7&N?P%`5+hV(aA%>U zJ2-TFQzMIxM(L#?6`=xbM&fyV|Ans$9*${7`8X91WJV95%{z(Kzffmk53m2?xK?#= zYgj08-7g&~xy;(LORE`0iY-FnlXx+V%tQm<)do#_9Hx73!&o*-Lr+$)Upx_O!syEXuR-iFUS*5>0fH$EhB;2F+34x}1+EOaO)Kh^K3_C5z1hS2gLCGV zTSJv+j^2aN>wI(d!UE%F{gslpmkqUejQaB}RK@xkenno}%x7^m2h%%5+j2H^P4Mzd zQG)GjQW2wrlP&#@N0bQPT3vn;F8Ufpzp6z<7tMsK;-4|h%sXO>tv++hwDl=$iL}iy zL3YPtR`rcaX}a%IEgOb@cl#0wjXCY7JAyz<)xZ$t7A)CseKV@P_%eU;Ub#77(9=pr z>f?`E7yT#*A6`i^h2r06kiJSQ5pkt%bl2bP@SV)XD20w2t&YyUOxJB|r;BKs+JW~2)f_RvMbe0A1m2hwI2%1q(5;ZfeGu?G)N z^HkULF#no&7FEnl#DS(!*H{6y8o%Mg*v4%##?dY0UX|eJ*th3g3udC~OaV%0S$KhU_FIuqZ*zN@jyPvrrU+~Pui=Ooi_M$JCwF-OJ zy+Ix%USe~M!cSYfF6TJqoHc9D%}-pmcFl&R%Ql>R>N)FHaAoDXo@HxSpTuMSrLpb} zyivY5KV{v@4J+55p08MQ+A86m9$U;->h7&0vsSNMy`t>bLb|g|--rsop}p8%rZ}33 zM`Pp!du0u$f5|x;PVGLv%%`UF3l-ff_+dqTh-Ptqd|zXH)>-yNlDayVU97V1-f`Oq>U#H%JBIT)`c~E4?3CR*Z_c;lAKECTNJ}ybMw~gjockg^tBk%w0tqjKQ9rxvZvC~eM^i$8L7T@7k zm95=7@5%>u@4Q{TQO)CHyWR_FQPkmsM38gWy`h?Zd{xUexa)0XQa5kr!7YP&a%8YJ z(UYG^{kH`&4DH_e3enXl+Mkkad~nwXd64N-_zd-__Ljvde1#8#(vzJA>F5w@4iZkN zd)LsjT|0PYeAfpXeCTc0ox{0Wv6=G;nnBCOD%t(74z&$acB?j#&*`i2`NiEkZycV> zO;|`b#>bTFO==vJOtWkl{Okuldn@&L)!FGZfOhQOc>~wZE?MSmesf1uc?mtH_Y8zJ z=C8}1&snxE+pz1s!}*p5!!}GG>C5XGN&G*kDjGrlx8uDzFNw?E&&!^$iJgtp+TAl4!@6UN;dA%ZS@3e&|`B4F~l_YwJFuNfcIp}REY`TFpSgB02sG7 z;p#@dp|R`E3FC}wvY7LWv?igJ>Z(jI?;%I-}IZ@Y;d;3rU0g33lYl3Xw%SB}l zG>5Zg*62YAVzvr;21W})o`}Ku8i}Y98H}6pbxob*4qi zc%}uV_ngy$=#Gd=*D&WokVj3BkKWwab*qv8dYYFg=brrgSHB%$S+;A3)Y`41^X4ti zdlm4qmtvQ&J!G&s&~1~}3s2DXMd8{azqsh4?_d4S-cZU}QB#Yacl0B2bB0ZsM1dHB zgL)h0f-*zw%|~F_iAd2xY1p7eA(~5j8ujgX*1hxd-r}SzgsVk?oHtq{yb7(n%s|J+ z^{d!}O0m~HO=8o^TWNwxPkp;RP@D}})ojMq<;|AZ?1{!m?E0CI{MreWP^7a6Y3p1? zw?6xUiG187dd`SA8+{0Wl-wYP#Ms$Xtm)OGMYzNR;ys#PvekQ!?zNYWdrg>%PtxN$ z+yJ{yOj0~wDNsryad-a-RZ638KQ8u^Th))=4I)3n@KK=IyT}-)5b8MY7f-)?D(L(C4WK_tMMkXYc14AOiR+Js1Nq!`K)tyxu?Sr^J_`Xu_ZRVd{JP) z#*euAlFj4Y3l}K0$$zJ@wWKl9ec=(?c-QiX`A78O297uRT+$I2DUaHd?CxGtFiCgq zv~vdsmMy%bZ_)NGy{X`!l1vfMBur&0vUB*6o-I%h74t6FXHz>qmq%zGw+tz^7j($ki$G+E|@ zGdDgqUbUcxWg|8ZqUPn$*-T-=z4pozZt@{DtnLO8Z!eHait8<6A{VTR z9-GoC*{rR&705~AZU&jbiJ9oh66e-BT=rzDXAtOLQ5OtaqU-ZH#r$b5wm{K8w6u9- znr!g%+~owy?TOJV6f9cf4O1TaNI!2Ps$HwOnfd1CuQ+W|`c)bb-4>gzC3C&4l>HLy zWT78@L~Z!-UmZ! zW>wsFaWsck+<_kx=?KR)bJV*Tcd*-W6AMeBj_%LX^DHCcq zyKOFAnLke*FLs(ne=9Lyc=zqC=*i_NQhxLgy)0H~nZaoWg9n|=q$(VpkUGpRR4J2^ zWDecuGuXgV#qd^y(sW5GUrG3btRxt%`=Yf(tO3N-qrHD;zj_k2b5v+g76KC;p5XlB}jilTp1H5{T zO?^?kMO-F+ipWD7Vb;UUiMNjHedv{xd7QK4nrvp)CvhpY4o!N=XdX+$IlLQ(!xWWf z)hK%Aw)yz|cfc8571X&Kcb)m(8uKKp1q6Fo47ur993q5~nV!wf;5BTHeZBpd1;=P2 znm9(K28hbeMYM0%t*nRAI*sqHw=oHDmn%B5m}WEwZIf0lB~(E$WDjE8h?8Gx0BNcg zaUwCnjr4a0x)rWkIU>@P(k|1Ljt(qhMIMoxT2*BK9Uno~@K8gvAWs8~rclpcy(;NY z)Z28cp-7qqWQ-utk)CeZz4KnvTsw%SnKwF>zkL{7;aR-quV$ASD=fx-$h>dnpYNZ_ zQOUiT*y{gh>}0=Z6XYO_gj_WvqMInEZJUbWH#G>;HWj)VMk|C)F;#q*f(#Zb-LmWB z$tahsX2!4+tLj@4d?KYb%96rBefwN@j0*c%+CcICEaj23x~k9 znu=^VZPA%N?axk$aZG=t42>yTNN7{dsFFWh$?q`wM~1R<@4v$ua&tZhz4eM(NL(=2 zqD`Zo%+Az!Nj0=(JAdvJ_pn-32N%HNSGiyz#ZVD^>iuRt! zJ=c#&vdxu6l7bK&3F^ho}1PR_Dj%fjBy$UiY1Blgl4*TXSm))))w60vA!|5*Ce>ZjJ!Q60C!3w^7)8p$Nf1S@!}d}&Wwh~4A$f4EzMtr^ zRK`=wutmt-X05(dfDH1LwrV%R#9hms3gqI_Dk4=&lePkS?F4IV$bosaYu2t_xn}8x zm8&;uUS;g0r(zTc_nZ$qO0W)RW%16DY<;=hg*35>6>Oi)bew65U;^uPrp!l~SVId`+a|iWXaYHfn3FwxDQHtJ6~3?C#md(v>wiZ=@_vhov?a@rx+# z?Cw~{?71vT4)Su#?j84b@WIgNd)y_k_e+)fWwW5HQbm+?j%V%N5?o?c*6Irh!K0b7 z=b(r(&1jI9tvhFVK4$~L3^p0u|7x^!|NMNJSpw1FE_NWCPe9QfXXAjX!K$ofNhGvD zE00$mY$@l}mR1+woUbfc>^mZYTNI*WOgjsismcg-NS0V7lSJM`plZr~1cYds^}0d| z%2@x|$@i56rC#mf8_WG$)> z+bO24nsB^6D~VAWsWc;O*l>HFT1yBytY1$WV3WAKao5wqnQS9w(EC$crFQo)nSptk zZ+Yz^_7qoL1*W0CQ~7kOf^X5jwTFG3BWGCbp02=(bFT)49X-a;?o%f|W63`~`DzEW#h!h}p}VUgRgs8TMady`DBV=z&B zNzxr~aoB^^EY^R0R3t;bK!KZa6I^7oLp>wE6Ll+!Ute)hruL<+7lCM$gf?RoEC4xG zbbSDV#d1ZNbW8)o1hcJCY;?FMghpHuCXMk`5c6{|4mH^G{pt{AkJ!590xiNI78Py0Nm@UYB;hA)Vk@(9a{Qgttq z1u(f)1K|lNR3cB;a2=+A$femyP3x3>J0*E5jneS3WJo!Mp-ctOM?(K=gXPHP!Tay< zMaN_&(@ve#1B&ZUmd6LMSg)g3VGcZX6)0UjYxA-dW5W4Jt)TCI@%4q+Ru`ctJVsV= zgUx2D{1Mb}TQ_Kd%@b^?O*6tcnMy_5ZYD7;%}sZ+#ueIF%3CMvWjV`X={x`$-ISn} z!7KePn_(70MGKO0OKzWGh+UQxD)4QmE9#3{Pp>4IeVLTePKTWUC6~|@Apw>0y-Gv48L`%RMa;cn7)lMaP zeI_cEaf(#sYemY~XXbh>OIocsFU0Ubc=O$iR)Y{f`rX?{Japl_f0?UfV&2KuJMkiFn zYzBr%)S!_#F1jFdq=}-{DqU+d>}(nWdoXZ^hwt|8Ckg-~VbX2HWmD%u)0c ztM>kh+&xZ2Gq6`h!qxbsFHZin)j?=!`PKiX-u z66IOZbBS{kXF^lOc26E!F>oD1p-FGkHni*8R4$DwZ4BKeqDfKMYBR#FQ^U+EaigbE z1SSc#QeIdxkx(k&?y9QnpaINcm41eCd=#KE9PW+S%1WCpeM#Ncw7~=AXx>E9iB3c2 zn!M8dg3wcahYFhoyJ!&yK7$HVz#?f$QSQQoc>^E6D9Y|Ih}D9`#FgsOk}C|Hyd)Cz zxZ?CQ9*@LKAS7q6H2Yt6zMl{h(d;-FW>^2;vt{i&PlDjZkZRHQu==1@n(E|LcsiR* z5-ahU(n!b>r!&sfYw9$%9c0Y3q=z+9`(dt6>1D|CX`9X%mAGEn-#BGOo(wkGiJn^6 zHLA!8>%r=!CN=o*?Z%;^owO;Gn1t!Ls=?PpBAJUPk^fLrjK)Y+$$wzzZ)9h;)&|;h zs5QvpO~$kYau^{Ja^HZf-DvFBryvwkcjo7A~aL}*Yz?PlVGv5 zQZ`*96aknFrhFEZw#1hoh`YOnq2twNMWFg2|YU(R=rIxGmiua^qtF6C! z;~;L;Kq{^e`yFhieG9t7IjPDc)AN$7PqlZY2Rj2}R0x@{1X@|Ug&9z(E@>BbE-S#G zc$4Xz7WpSv>weDmcIgy?AA)C^X)VG>qV@ne)(~>e!+P*o+J+Bzhjce$Q zM+Q=6<#mM_I$WJtRybykzZe3k%e_Q$R_GsUIng%GGzrH;-(rtN!Xat~(N}S1NlJ4q zs)I|0W@=bW6W(Yw+rUv|vK%Q5fBy~YJ}Cl!PsPhcYpU_`=3v70ot890U zGzha#r;i1Uj7(Brz6UWeWu2&FGVgB|^7A^Ic?UuBnecEM-}opeLZJ2}A~!`@@{(Us zWRxbKvn2{oO|MKgyqct3v$!n_NthN*)mkMw8MJWpD$U}<$h=IWmf9P})n}8?7i5jw zqT7mTD-Y>j#tD{IhPl+_*zxL^@-q{U|wtgPahji)M4UENQR3z)C?^S@{@E~ zz42DIJtjR@?A}i|TH`|DM@Mrj+a2crww7nF0C;4nw85zYg$1c|(A)q#857Y&e|7W) zN^*rwT?+fOwU;PJv02Yq-{!8;`m*RgPQ^S%BR3{Do3FPZ+5LJe#v?%U;SP6iWaF9r z#jVCJE$Mg#vn#n`h)eIg!UBnx(AMJISV>%Z2V485XJ?a2E%8s0SL3}I9hd1#C4hpT zMCD9NtsIq}u61^^D)%?VaU&ab@ARQktLnYH?4YP#_rw3#5jqfqW{Oy^yR z!yRSIhFxo&t_A|vId@Yg>x0@Q=V^$};QM-#J0+#2^v6XMR#fp6cHE&k881gUNs16> zBK6`Y)fcCGJXhU_Q|;|vF)Um8p2RdGA3OlpbHzN*U9bvGQnz;+D^MeewPuenA(_W|OmB`%6aQgdN zg|cYp%Jzm$8`Yg61sKT62Co@5=XR8uHErf*jw}4R>`Y1puB{eVSg;KG<_=~rWqhIY zXe7*^x7Fw>UIa;uNZQSEr1LrU5gL811fR&(vOH2}8mHs}>!=G*!4NZ=utGxYNyQU7 zf5u~V8c9m!w2HdA7g)+R0f&`R@OqSTM#!ERd28wsgkvbAAm_5 z#FQaIBlN`s)seP|VJ_Dor_M`_f)u3?15LTzpJni@)n&OA2PZ8|XppuD zS`m-&eZ|R~M*`0iVw|AH&Bye*w1&jhoi~_|67nd;5UQz~dg9gYyrCb>;;YNn0V8|a z3tl)bUqle4w#K&?kXC6js)(NIG_;B@jY`zoXq3(}5;7QxE0#iKh&b)mB}_h(&1~el zlP!*`${iyg~~K;%DSh8BzKIa6N{9MXsLWG7EfjSW)cARpnPp$YA~|W z;DT9FE1{O|$?tXHPN(f?M#ik5Cq8Ml^>IMN z@)Ng~F&(x5YGX+f{)it?FnLsTI$4ZL{nmux;^e0Yp~Ny$M@h~JFZ+e4a;L8(kh|F& zs%xVMK_u<&h$;cSgP&^K1{G@d8GoA{a+`qIu)iTCt_Do6m8z`drPk?r#Lc|qIaz+8 z6os`gHhdwZUFRiCUPhUdO$lj8u zRJp5EkA_xNf!bnb)c5J88o1iq82?IWqPDV}A!5O-Z-MnH5ru?-ldyvIywZsnuq4K` zd*?l-`3NDp2at?xCx)6@SV<8TBu^kI!gw^0K4k%~EADnEr;h1<<8+HcV!luk*MuoX zrBl<)Jd(ytVavq$86(KpY2z!^inl6U>BcLee`vdLqHIMQ)2e`w+v9fj z=^r+ABjx2tPy3dJOOU-83AcGH^M-tYmzyii4Cc&inA!9=RZ110>mPGb63@?uZ_gW0 z66W(4Nz3;_jZND>cMuGgiMrx|FtyP?wv^5^^?Pe9CZulzi-MJ&O<94Q(xYj-hf=W_ z*BPsZb!u0wNt~v`8%lwBJIrk=GTGL8(}vp3R*f^>A#vZ)C zRHjR}KkC!UOo)(xc1qw$VXcbLj7CQ>7CF#-eAC#e9O?E(yMR>YJRK}SLc3r-+z^+g z6{^`6@%8zj$R>em^K*R<+?q3kXaz2%M{)R#%bddSP8mT=M5etl&LgGEZwspfyFS#g z>XY3F?r>D-C0^yihhWuW<6Iks#jkj?_L)uII)~bt*j(f8ZSrBnk8lel;-uvf$J!_&M4xSJ}v5Z-J!*PQS95p67E`F2{z;@lUfy z|BAWL4aLf-rlh{`HaA<(6V}&ap^#VfcJJ7!x9NFGM2m?Y-A}-}fASIOCbp+&IyB_xE1kU)%U|sPh<1Zrn$;tqr8sV9zya z4Qdqt9e2yh2+dMW+E0{dak!Ll9BW$I{)m;`^iM}xq_k1bU`{nRtB7p85Tie?M&Mz9 znCB=^C{fRI>S>E%hQFBX-r|$R6=*8kuv4x6T8Pp(8e7PKujUw@TFR9bGNaK}7C;<4 z%^Y4-Eyf$`mJ=y3&N)1Ff2)#{1GUw7N$M+l?N_iv$RBG2c@FXzqmjMA&=zL|(yvrw z;MOr#dyX(1>{bJiT3JREjqOJ8Z;M9&oo7j+j>e+X#ibS#ParSDC+GkUI>-R<;Nrg2JcEC3^nQ!eb&SIslzEm`R+_Z&cHW!NMDUXasQ!ck* zQ#wZiNpP(fxQ>pLB$g2uhUg(>JXd@oOpR8hQ^;8)w1dd-czwJ`ygWd8EFQ|^>G(`0 z9mT9Iv3+TD1+3V}O-<|p7fa=g!knY?w9W-Fbbu;_=2pzprs&+Bk&t?DCR}jkCilSG z^#C)m)z3ockPD;MhBpAKm7~$Z=!e-Bhzq46XfihhJX%EjH@iE6wwL&m1c(L;&YhuE zVQPwH7LY!=AXf-6oPvw|2h8L_>0udEt`*$6M&!D-FuVOLYX3@U{|ei`vM{=2tltRN ztBW6P>|Ed8-B7{gtM+2T(k^xi`I1NS5K^h4eQ3d;=8j*h7l(Knz=5<50{hJ7(k{A! z^&!pUt^3e{?#HjB2HV7sVqfhjZiG$A&%CM%4YCZCMb911XFp1tg8KcoVeKJ~%ZGM+ z5z$P3Bc5{_i^R8ti5}K@p3WUkOT;uza*X}PZoO;ZI6QKi+(AGr^k(?SC~#)!vtW~K z6(YK$^9TQ?i)=D#?qZZ&w6;8^kj6K_3l}nX7X^LE6;0MF5hd5|Sh+AgV0BH$s1oFp z>wNr)^|ai0(rgo~Skw>0<&hCzj1+(XrD3Z>3*14V!49tWklI2I+qg62| z2^AWxaLBrTE96J_EpF#HjpLNyEzCeAg#|Ezga)46)2~P8Kwm!vVz)|bfYus&L=J%1 z9I(j9lFbh13Nocy@no=$S`~U3RdPEco=T%oR&a&}@rxcWa=s4_{srYq8M+@M0J(@y zdUd5mY5NoR&Mje7&yp*C8Teaj-8WVn3HSlT2s$^rEV$kyck?Nb4rBqZU7VwSA`k~7 z$I~J!>|AV$Otxm_+O#S zjN~9p5?KY#wR(z2Z<&)_cDW;<6#)_P^_1U0VZP=Qg4iJtbv_&Tb$^WGkv#levHaw*d+Wf)n`rSq$x+5j4kbOhh*>1kpkS6GDg)+HgQ_R z>g3sMhC#8Wk&^+U5C+PEvNAu1J&(BmIXZ#_KmY0IGK+)Y<`5EzF54La%=9+Jd4Mx|Ik?f= zd=L>tT*BSHL1Fz1Jcv1tt|iM%QY`zm&1JYUSg6&bw?^+De1VsPL3t=GcEJ?4S4z#r zqtMS$SSAyyEyV^3vBCj;hL^s|XV_0#G@iaOIF+6#07U`r0jXI1;}QFi7EfsiJn)%E z`#fDuSqgwHg>?AubA!FhoREiA(zqsb`Ufzh$j{1D(!dKaIPcPahM1R~RA5a*9dU3f zM-*9PJ>uS%mglNjch=}SA;E+3?-4mou&Owg#mg|V0E2sqC80)*zHYfW_|@TK#_O?y z2R-2=ks64Nh&h`_pVrsbZ*7eJ928nxAc}x;O42mE3<@mir@EU2B2VWFWpDOntbVv9a>5llZua%0Vg(4+M4NsIar z@Xa84<`DBfB;s}yvZlF*MwA*uGcBr!u6f2d_7)(O`6`Jt7)nXj6HBas6IC6a6}Y8z zoDe*bhsL!cV+N=&T)u*<2yj8gO#vpbH1za`dEY`%2=Px5=CoA6M~y$cCQ8WaL>7rai4svM@@HG4AK#kboLX_A{tuVTP!e=TqIbudX=;$63qiq*JNi5 zz7UXfn1pe6KbF|8miI0S17VZ{=;?ZRE7H=P*AgPqHOnDTe8in~}5=qwMeLw*wRZhU)Pv-m~#n1C$ zil?71d;taAx~0cSd8W8Yxx8hErL`8;f@jO43lMPWArqd zclfx|iqH4l`7Ws)Ve*I@G8++HrMW6{djU?dh7o9?)aAeytOg8d24!qd}nfZ7c60~7#K#s{Bj+HgNM_C!Q`bNSbcd1m@62&d+-bR@^vW$y%|5_B@rSP zMKq5~;S4|VLaK5%c1}$;x*%(a{9dtNmAfhm%G-Y)rq>MiV;paExnF9g;4n8so#KJ| z_N2A(z1@x5A1v?fO>W#@@K+JEbaX*XN^ca%V{VAWGE|DN8G`$*Aq%?DadlG<58pQq zb#Lt>7|PbJ-`=>IzwhQna1I0+M4yaZyzWTbvXb)zG05Q%ALw=>;)^QIXcwov`PUdEyVQt5koJV9|H`Cfm_qo7Hw+?%*on7m zAs!*X+lAmh?1odQau7jq4sh><9{@yHDQri$(z8ouw+)|x7c`WDGLU;63TtNyterW{ zcSk~3?6JL9;M$f5#wi2}y$P5MZQmT9Ijy`!RA=VqA%dM9|8a}~f_M%Et2uDh%H_Fv z?FKBHh+FF1l>we4{H>*VqXnHbgYwCT{PxDlPNS2rsF~+Zc2a^FS7}c+f@I?tU4{k$ zJpj9HhJHfbAtru?wNb0KIxM76^8q8s51B5W=mz=>?_@`qDD;U|(r2G18b;SJ*VKBl z4cfTTOn0K?bqu*Lu$FHNkrVn9ZcHN%%7swqGJ8h6-)eEfvj7N0Mc~+Ba%Gz)pS9bgRV?XmlpJjFGGHrj0-mUotrJzFUVDlD#sQ~z8suK zLIH~h`6%ABvzpQhE2bnG;HxGFJw$zf2)9Fbo($-+hDpv!j$4c7=ILP|IsED|2df`Z z*iMuNikpHcnAS_q$iuC(<4e*fP3%voLFjVZfE{jUsgl0SC50xDKx8E*;|R)4zT-lajHUNC z*QV2*Gk^Ng+U>oKGpG2+8}`Q=;$YWVdBS`#BjY>L(UY_iuTN54b9E=8-J;%7k6`jm zcpI&)`NL|83c4Zdcp6d?So%d&qzX*w69h#HzB>Q(0f5(w$?E?!bNMSlXiDcWEW+j{ zmd=&rhohapq?fo2$t)e$oHOkv@QZH+yf6v4`hRGQ&1*T)FNMuHNCtYeJRmMP)dCSf z0SdZbA;EXo(cqix=T5%?EM}oVeuKcd8mG(u)w*jw{(Jy=+;c63(FU6)Q zu8(!_EeT1Twx(s$BC2Qbwng3$l$>((VR*!ct!dx~7BZOD#n_ZixV<9vj?^fa%nxbL z*icv~4r%q08yzQqbLR4gr9$oG^;Jel*``9XLk@w2ktP+=oNpl!FvMN{K}{SEBuEWM z-aO#jq|!!z9mWQ;0v*hcJE`b?BIvX70zpB_D`hXJ=4F>8S$HB1B4b$?TOR%8!B>#6 z!9VsCdwK3h@2+gzK#fr#H)69i1dY42(y`(ZxnUaBBZf>IAl)gIX+pkwYLji6L3Zew z$Xhn|QW{~%ZFanIg1Tcmze_VQD=nhKYmH0%x8@%OV@nwtA%L2e#R6EgtCq-Ki3N4u=nG6pnR z@uflC?}FSyyFrwaMBF53Rm)xT3>X8Puh*KL{T$uappmedp7U{P72 zZ|nk>0rE?7bp=o0Kpg+p=p8xDX%C|B?Q3(bQIapUgs@xBo?^UEv!5xl-+WawewTeN znCsb z@|8!xyzqpqF!%Bh_9Q6`*$9L$s)}=#^3AK61w)*r2nR zHnySi^etfYk4pOIoe!6Gb7guaKmzZd0(IPwrQ94?hUjOBsAq!kz(mC(xKF=-+gk{kodZUBoZ0?+AnOJm`J?C9oIRx&tt%d;Mi=8{=i!C=1wn&NU zLTKD7abpCmxEKLQj0ctY8FmpzG^GhinyN31W2)sS%w=xy)5~`3#2=Hkl_1vYeFve7 z&{x6`aB;As(G_R3%vT4(3~x5~5<9uKoRKEN)K=1$4}I7OK5*O>hv^WH;h_)n`WkoZ z5?!6}O2m6w)uKt9EpRDXw?&oA;$jWB4!zSfBQUE(6tt>{ni6pWLGd#T%<@Qo{c}gN zXs#ZJz0)EVLU$hhz-%B`HC2*jc^rudb#dSd;GwQWw_u3NDT27r7rc`+p+)_K|LtDj zAef205CO=dn=xU1ZMt!DduLyPe>`BAh|^UuWOTB%etYl6#?{@u>)w8%r%=MKDINU` zf%KEjjqN?uakoGn_f6x%K-6sTo-rL{5h=?Mjd*I$KU1>@C^HeyG|3oIzHk$M-$NoG zh(mxE{buS(ga$RePHD<`2)&lW@)jjhRckX>a~J^uDHg2UPOOxBz*-QZYC$`YQdj}P ze}dnYfAyd}K!pfM842@+{KiCQdNCxJ&zvF@hzKveLC>48L}35s*|a4&m&YLebWceA(BUW6%(_KWX$5YM1Uaf3<{We~F zZ)<|5g~u1qFL6)3oA60ha15Ul;SzhjX;=Dt40X5j)S7R8O^2R*N;tVIO?Zx^}oVp@Y+D9hoo=Z%bY=cHII+!vUO`%35A5h6gh z4rNSZ1 z3=LM-&f{+!oZT)oK&BB0Nl7e^SJ?w)m+Dg|Bf>Ox8$+dr%x7QOAQ^zkR2YS?qRiwu zR?ebF!p^VJoiCLkM7H5-00N{;KW7dH=)sJ3!#|JjrHqc@Otlq(Vb$#c>$vr=^tPb~ zg7=p-JRPFM2`xNf=G*KdC#4>QPFJ7EuSu4q6M5_^ij<%n&t!WGwMV>=iuJ~7>JX+q z89iZGZucoOWyCCB-`ihY!g$mDI~$9Wt=%bWye+XB-djY4qPb0VPgTFNsuj2S&NNAD z3=C$=XM_i+XUJS(OBJvC1{IZTNZXqv>N;xQgh}Js6b$x11t&bD!u3JkAch%Y)!n88 zTbMBuVrh@4%oe6ju%5MU?!fqOm##2R6VG?IG8kou6fI(K)8Dx_qRl5%VwA*>?G~Cc zXUM_m%vli9+|?6PcYWRvFXCd~T*AAFiPt8x9^u#QAib+z*6q+^DHft~wWN7#u8}tlPW?kL~WPC~^b# zc&&ciC%<%FYpuiv=x7;)#!3ruG=bUZhtC$SEQ(jWn3gL+zC(eN&m+2Ek-(Va!vi1+ z9#5MYBo)=XV`kqml~V+X=c~8O1EnJDjP4D*fN+2O*JI1<#->Z9IH*)vuqgKl5T%Eg>Id!V;egAyWzAF>{=DsOO4g-Jso+P>G%}KK6XvHSUuTMyl_kzCxr|y#^Z#gkZ z-b#4JNlCIl*a{8;=YR);H-U$MtHJ%imq3b3wt@SCyTH$auYk%o_G3x%F7Q0?ec)8^ zZm<)43pnUxPxo%{bm~70Jc9TuKAt3M;tk*j!6(6&=))I4{v~ry_41wvX>#(_fPW5n z!f5Z;mEch-2do3106zr2^|U0pp8AdkCxVZEB1vdc@*k%s$pzpsW0K_e;C0}0VCjq` zc{}MoIyOm2nv5Lh{kRHLzuz)GN!|^<9Tc4o2j35#1ilTN2#Ow;fFA&-gZqKkfJ#3f zq^e{UxQlvz0$xmb^;zU0{9AA=c+LbbZ`nDH_kl-{?h#P!cm-Syehn0Ti=RxA1HdLw z<2(<%fO3|B8t0##%LR6WpCkUO6O&{(*nWPJTn@e0LX1~={>Mp-8S(!(8JdCTUPN2K z4jOqWxa$(yPx^x|qYs2Xb$OD!2>$NVN%9Tyf9^AkE#c0o&=|aPT9O<~{KDxV;g`YR z60X#fm++4pl4JtqoiHOwRucZ~EN|a?uS}9Q;&;wYl1;=P+ma*;z^+!>L;mKgoNqRR z8qc4D?*&OmIe>Q02 z3l1Xw67Y+pn-0F2b{=(glGG4CY;KYa1uq4~k2irM!Owvsz@LB`j|1j;``-s1Nq97< ze0AV(@b>V0bBO;rIEwf|*Z4dc4<1fHsOJ+wwf728^|glZHK6!!38;SF1uFl;py>SyD1P`ZsD8c*z8%~Rs$IVZ_59Eq zz1)w0s_$4(@t*)S&S!(7_Z6V%*95A*8$i{wG=%R53xwB!%KtS`^Wl4-_~D13%KsUt z@pv6nIs4t@<-7+}eFaeYP6U;26sY>o07Zuj1J;8|-wA5mZv!=M8$pfZ=fm?Kf#REg z1J(Y0Zua`$3#vWCKs_G?9s-^ha8`JJ6R3Q5f@;s>pytuDp!o7tQ1!j#77rf|o=kWG z_;K(iQ0?Cis{P*x_)nnP`#Pxn$pY`s2SBxFIH-D02Su;RpxWCAs+@VC(%lZK-D?AG z0hR9i;9&4IQ02U3q4U8Zp!n!W@C>jPJPy1H)ObDyo(Mh%s{Afc?ffICaXsKxAGh~` z;-@3QBfw)pJ--kf34RI`-z@>vj(fn^5)brQrUAZv%&b zcY^BAHt;C$pFq{K@9i!RP6b8JDWLdoCRhNk10@F@0M-7@;6(82;ML&4OVBOga!~F0 z6DYoT^HOvPco6tD@G?+zs0UTfm7vDsI#BI<9#ngO0%}}d1C{P~pxXJCWzL7EfyWZQ z64W@}4^9BrgQtQ24XVD6E%)&p1FB!=gC~L0!5VNCcs%$O@Xg>KLAB#A;5)z}D_k$0 z1S&iU{17+|6#Z`iRql)6(co7Cz7C4cAGpKy!pA{{F98eSybymsID+tI@S|W4cqDk> zok{Xx@OV)CH5pX?tHHy;`#`nhWv~GL06Yf#J-9D8_%5g0(V)id@zA!EREK-ISfR6EvzqR$Rc z5T^?egmJ^uiTKHZ?`_xljP-~HbHLqPTWC{WKo2CDos!}Ceu`BYHlw}FR%^FsVx z;0Fjl28z$NgQ80}I0*bt@O_|+YnA(cP;?y(9t?gQd^b1=RQd)`^RpFHzImY9wLCn3 z5Y)W*99RHf1vM}K2%ZdnWQ~`11*mz_3O0bt!C~O!CLSV@FZ{{ zI2POis@#1Z^m#D~6u;aAs(p(=wRbJ3`aTD0yuKFjUqQ{^1J`=|iJ<6rDX8&o2i2Y@ zLG}L?@N)1w;AHTahnx>?042v>0mYy1eAxSc3MfAKG^laD3RL+wfEtfg;7IUG0sjk> zJR15)u+suw2P*zaa1{6*a40zFQJ1GDfHj00K-GUIsPcD#%J(Z!EDR3BG~rKx;`242=Iztqe&8-p z`Mw0Iyzhf=0sjkBKmQD>UA518{8a(xf`f>^0aSUnftu$Jf^P*kfbRx3gC<8o&C6Fo zjmK}m8nCb)84I2V-V7eH!N>anP~-3=a45LXM(_VIpz<|=!@>K(qrk6#L%@FrmG1-3 zIh`hhqR%357`Prh9Q-kOH27cOC%_Ls@8dfaRJkj`kAPnQPX)U`_4gw$INgo~-%j{M zQ1f97DEeIv9tz$79ssTeRo^=BSn$i>+rZz0;@9LwFZbi%!34*F6TmA#_4`Rs?f)*Q z_Wu{C{tkZ0={f=2m+)nv=<*rxAaDt&cB}=}k8Pmx{TviO?fp1%3#83_Jq-BB*|q!TrJaZNh&89u8`pSA$CTbx{2Lub}v2HU6C^gTS_@gaT!sByd?U_E#X;j2N7(;vZifN%P| z=YJRYAmO7xJ^vD@`o0PN5BOtHeDDunaJlsd@KD0Xe33c-CS(?PD&a%F?BjnasCjV} zD7risaCdnAfv-4UjsP#@`Ng2hTL&Jq4|)WAJNWCbx<38iule}ZeBJ#{t>8VRKjj;= z3H%;-H2CB<-Jbsr_!h#WzvcZH2dexF!2`i&Q1rPT6u+zh-wWOkD&K|>ei_s_egnLk z_PpuaE^p_32N^+l2l!t+|H0pTJ>UAS*T`zh`A={d`2OGcc#Hu> zrz=45+fAV8vm6`_-V?%K4EXhc-vy`g{6`8?&&j`ae*VONxICK(ioTP;gTT*#Eu^~& zd<6XY@4TNk|K8=%bKnuA`+HFB`7JmC`~ZV1{x}{{$$y+zN^=cZ1^J)u7t-bO^r` zo_`6PLi{(u^S~pRyr+Y0pvrp=RC#{@KL)<#k4~S{K*e7e!k+=>5xxo(9exF>{=;A{ zr8^Q-cti+)3{<Zr{tKvd{}XWkKYRRpL8bc$sOQIks`um& zzA)ft!1oY8JA`ilk0rbWRK43lmGkBB{97UXY6$-Vd5%7e7X9fHesQk^K+I4*h-xl!x5dT!bO`!Vq3aI(;4N&v&_u!%6!TaoE^X!Cx zp9X7)zXeqJ&j;KU@S6dD42lkwfPV;hz?(eZhe16b4ywJM2=V6!{B($K3^*^uF9r`G z{XHSP5!86^0M(DLfSTXm2G#!m0M*U|-|X!^3{-vR1pE}Jd{=@h=c<6$f+}Z0c>WY9 z`aBoHKLsU^UIWL12kg6#@#zJijX!uK@z;SW{~_?*;FF-*vnAk{1AZSA-G2^BuDxl$ zeUc^MFi`n7fok_o@ObdsA^uGW-%k>L8#o@k2$Z~74XU1Rg6hYQLDA#SA^gGpJ>4fj zmD>g?{d`b#SPH8B_kxFm+d!rJF{t`_zy|Qdx9(%>(fdKQ^Y@_o`6uub;DK-3$L!AY zK|TKzsCw!^(X$0qzgLCl+rslN1pE%DbUy{vkNpSjW9zozpvw6ScmX&YJQ3UuivGU^ z)sOu!Vl;mb1eO1zpz1pZl$>q?)vnKjqWf1tmHTT@{r*!3A9}z(HXnz8qVL(D>X`>B z-;#hYf~x1I0r$ZOQ23~TpA6UrjwF61sQ!H=;BUk8!{6!gX9R2pRnC2&>e~^*Wl;SY zbfEWRIH++tKHykTbeJ5%SAde!&7k`ISiq;l^XEhO3!wVi z1ghW1fTGJdQ1kzi@O(a~dX|D}_uZiQyP`@hfI^G;CVgF&VHaKPaKKMpG2nIU{xz!?Ec0p|x?8t{HlGTkPS-{rtd_llF1FjADOu#Lm#^KAL%J~f_ zdJV$Z7oH3%eg-K1x&fR9t_C%({~Mkkaj^Gi6ev240X6>Tf#bk7@J#R}P~-BypytI# z4)J`KgX;J65bgw3?{xuJf}+Rz5dK!cO2EH>>c_z!^mJpvcc?t@La+^#9Q^_~8hq!W z-mY`O!G!MsRsM_MaPa$}`k~E!wd)?jK=H#p0XKjepRa=A%O8aBZ$PaB{v5&+ zkMi;R6sY;u3@Tp-sPb+M@%Mx3=fj}t|6Yhc=xCP%hk(j|B&hm^fi~|!m3LXd839Y- z`Fv30aaX{d;6lPZ;3Z(&5a+wEf~vm@RJ#ry>f=8$;ANo6Q&9Ck3W{HMf#R!w2E{LL z9_I4l7*OSm0oBe=fy&{Dcc98SY`D*ZqdZuFi<)HXsE7%DB3{<`e$9X?zgGzr3sC3VRXM;Zs z;llA={`i26py;?1RKAx$wd*zTFz}rxXr<(T?+3=ciMa)em;WI=Xd>=*!cTL>zn8)@ z#IgO=gEz*90VS^y!^wSM1GqfIZx5)mfE`?exQ^h8e@un+?%GJ&_nYfd|F-0@-a@+1aNR)o9f?z`L{NWPOo+)u!Fa^W&c2JyTVJR_9PbVyF({yeU=#Ov>4+{0ex z*YgH8|i8-HRmD%t_*l7IF>Z4L-=IM z5P$3MFT{TZ{1TUR)0KqJ<+_t=HkbaUkY0atz%z;a2kuvcr-4U@XYxDg?-PWJT<_*O zhwB95Mu&1N0sp<9_&wmTMB1{@O`% zdPsLQcv48aFVD7f|5Gm1YO*E7OP=WOS6oZDW`_8u!F|a8kHlRZ;<&ZHak=noF%n$L zHJxiM&zo}by8Ui0&-vUh<+_LKR-WAiz8=#534EULS=9Xpa5mw82cPA-olEj=B=~P! z1@6ajmAS8g`fK4jhcKpD@Iu|V4{LQ5MckriNk8fBST<6%3Hzx zfyCX&#ZoHyK9~NATrYF~V+$c;xSz;%aCm+tdEd&jw-DaIRUoXt1H$tQ1OASzkdY34c^T4tq`{mTodj;6Yv=D zNZM4-b$~MRCwuQS!umUl=MQt;#C;9;VT<+u?f_0F?n>}Mt~1Fqn`GJaIe3&t`JYbo=cTrXM*<`Z!EDa2(gPknrq~UhuD6qq%<0wUM-c=8Au_xOp?z*~A?~-n+mr625}_Pl4BS9Y)+v zu$j185LJk@WLm%yo9 z_j3J9cs`u_--UZ_lUDM-0A33IGx67iXHO9~iTgu{-=T#39n1aW;B{P|Py~PPaj^ei zB>j|-{{Yg?+kJg|vCd;V+Zw`MT}wluq1aSZ{D8Gi=qNO{bQEW{*L6_aoW_n>g>hHb zwajcSOd3CVO5x1*y5{1X*7n&)XKiaP*3YVIX)HCD3aX;BM8>){THMy&NGXL<5o~I_ zrr1vN>3Kurj2XrDVoOH>8qpQ{dS+u&2dQXReO+7K^hP?@s8ZUCh0ybcLdUH3*3Ox; zz+z~U=Q^XVes-~?p*9&ay|oikmy$6J4TVXqbCQ&@rQ{4{rNS9hQy9|NQs2~BYP`BQ zG(MPKq-DkGC++km89QmBu2M3#u2igPY$+96N;K|jy45+o1i@)@saV%uKa1Y9x0XtU zS)B~+ROsJOH@&GiwXtD%p|!oC*gln>h#5+?;ik3)S`Igw4UnL%uDzqBvw3>4o$48s zR>oH?iMNHxO`S8-h;-KMq{z5p;YK-EtFc@ zI||e1)xxI58I5y&w5Qcf^HD06>LDxrt1T1;4I4J5si}2Nv0>D(VTI04b&67XIK1G! zP?f_A#&$&>Hn%d$jk<#g>glD3+1gB_T4pq=Z7m%Pz6NU?RkvuYQ(mu{9pkTVoL(%| zv=^JK6RmAU)oV;M1xE147c;LWGq38K>KK5=mRayp2h7&q+FY2}3eU#`;?KZP{Y@p< zxS>fS8W_{ZCatp2+7c=(z`e$zwFR3nu#+Zdsk5z3G&L@t2VolPbKLLEBiVFVsX>K_ zmFqj(b8`U_c9uF?n;WkY^AxDMxv^AIf1OcC3M;9J)X`iAGbQ6%i=~#MI|`bWR&z^h zOHHYxZpI8v#dcEoJYl2@CYGE-A*pkyb7uho)jOSWrOU4DQELk_3h|}sQWr&+F~PA{ zn*eL8YotaH>9CBqpq`w(S?DhHP(xfn3dBCjWY_6tpiRUN>z>4(`myC)6$zP zEwO1n?i))jolQ+j3)R{?N)mbsF<i*qeQde_vUFfvUr(*iR+(Abjo z$_0MMyf(&D1UhH(`R5f7`p~1;+@?7@15$PrhLl(>DY!wgvn4U z=xFaOPCItmjJl>$(I@Zp*4CzCotVaiIb1NjFr%pzemSMk3fHyIX)F~B9a0k1QU~Xn zB+Ewa3|RD}6V#}-ylj|$(g}zMD1XtUb8AX61>nPK5zSXxkwn-L@PKUOp?yQSvHH;m3<@Dp`&YqTIXlG>xw4<|B7*ap5 zEN4#D&l;M`sX2tQGYy{2f)HD5u4`=Sr#$N;Dn4J9H6f_f>7DbYb~H8@3#X2TW(@g+ z$>$eNK54|r0?HZ%-CT?<=r`AC1Liub*vddiJ`~&ATiZt!t}R}loGr12+;Of)>~=C= zBtN9XqI{`MlhxPNBbPEsODbu%5(Y+{6)h=>8Dn;YC#KbPu0HAtrM6JO?pt6^qS>-4&&s5h_bM4}auQ?Z@7s-xV8<;JAKCYVT8VWUe??2V?zdeaP2XTeya zF=z#J-k1v}AhH|UTA27+X~C=Ed=Nc^<7HWga0#vG9rFal!0b+)%iX-0~tbxC*!!q!I(jug&JJ}f%~ zVH2~NB1f0@a!t|nQKwXQ{MU2rs^YY}5*815#=z)%6`FfU*G3pdLF90-bFgXAe?(nyK6ZM{K0tvY#f-YEB{#*g%-!O2%-Uk@ zAREHC$cUQAt;J$HR&PEhBrF!1TA6mRUF-)U7OSVBv7J>+Yx_JEuRL@?>l*AO569ZA z3BROrG!~11Rw_dAQKc1&s%Y(OuP-V|XG`7H zOaU2AS+`YpHZ`ylAx)_bdkO+Dfshb%ySc6{O!~Cvf#l45l@Q1YzZMbcA+lA7${X zygVC7u4`e7P1nx=x1!e1*6Oe@Dcar>#w8Q97{zu%c$BoR_n|B{qz_QiHDdU%{F_iJ zjA7k;bur;?obyF;F0-yfr3|^OP~QqOG`5gqXmW1x>S9xJZfgtdV~;PbdOT512>P*S zncvuKiTacH$(~CPeWnFLK23|lVpA$8T;REzqnFMYU@gd;v<0-RTG340Kn;ydqD&`8 zNp1Sr=U=XOc?H3;p`)$^!RiA&myu&#Y>UQeRqIN#c(M2(U2`)fL?Pim7)j*bE)(@T z?>3nc-6qC`@}$h@Y%;4PYa6X_PAC<8dE~M`)0UE99Aguzd8LWo6>swB$=VO61sE(O83!`&Z9h#~Q zy)a8FZ5v+AOf3|%H7m0h7f4pR2A8=jvO)>-P@z{yK_ z-uT@nXsT0lvOE)O1+1?6*_xYF5JfygA&*S`EGdF2t32p@n877dZ2_M!{g8fbnuq@A zkQ|CsNbSR5%u7tAlOYve2>z<3r;;$au(M87nwLx}y2TXD1zTA~5mMKHd5++a)zOAR zb#9Nk#4CiN(829^vw@=>Z~cZ3%^a7fyJ1*7+vN(EY&1?E} zpCiX0;)YDp1nb-OPE7u{wIXP30fM+o8_GSb7{))h8!f|k`qDTh6ru?pts54I$$;&!O*D_>ENaPFZiO-MlSj%f{aT?O2+aT za=wQ(bktm7y_q+^tog=)OaOdW8e(P4Eu?em02^Gz=0`|Aci#=bW^ZM(=6rO_+-%Vj zq&`j`DcjDLMp|#O$>%p)28eRDw_0scBNw}QP<&WKvDWsP>^NPMwXwYqXIkr0r6|ci zkiRHnYY{8eNGAE_iB&>vZja2w>S;^$qLzJ{vt*prh}Oj9U~!6T3!iMgY?#_Y(3#rL zYOV{mNmW`SD#R|$YHSPsLG#hZrWl!m*F%zy4ISE6LrqQMeiU@f>>?#7_-IUq{T>N5 z>`Hw8P(s6cbz`ZMmR3`4cwr75m?aU535CzE4(?)A?vz#;kv=JDqsvy6GqqClLVj&X z;l30z>u}w(XtTN-h>`;Ow47GHAsw$d!(t!sA1M!envDk&PLYS0%>@m1Lv4_ z`w%Y9!8wsx#akrQw8p`2iG5j9ML<)Gee#%zE6WDs#PZX%bY2-@jr@%>=H={crcbI| zb8}f$Q<8Z?wd_=z*kVSL!7+No%vUAtH8XI};z7npYb>=j!Na0pudX$;)^|!O*5UHO z^~209u!U>GUKiU^)j?P#_P~wsyqB`hwsNyFHFK50g=y%S2r)(B~ih z8N;-zjx-zF)>;g)2_;XA#g77!s2W%*x~xb!S<7M3GS0heEH@3Zwpk$7jTqI6Fu!V& z{KaZQG0zP;u@`qnIb#zwn=#RS78!I8$`N+WuTTTYf@ef64^=S#eX^;|(YDGCYdBx( znK#9FMIy!>dU^mmHM?6c<&msxjS=RmwuM_lVt6~w%e=m1@s!Pa(Z?JDcC-Q(^=-D` zJ=EC?+(kOn&{3T0+t*@h@7(~TtP){S>ZnQ3B8U-pO$4Wnn6D^Df&~5)WKF6l@^p1u z08tZ*=wGNoBzHcbuUng^%h?qT(*J`*lcACBE@X}wcFnb`FJTsH?QhOT`I2qmTa&~Z zIdvo&l${)ay^7W{lyPg-X)eZ+?&F?-DT`q_6lyVszl>X&+0pK63O{h}S> z+>c!#Mw4=&uEMKk1J$cFu|mqI zvpDAmL$T5mmW;+GiwO zaMFK{_%z9x?cSl#HuyQWe9bA=D4grCcSA$ki_KI*Aj_LufAwFCjZ8m9G;>a@5u-3I zi^0Qli+HZqyl9vP1{dKa?Pn)Y$pmdRZ`78&Aoj_FnIxO3iPIL!n_psvdZ4Rvf6YvW`NOM5ts$66~euI9gX z-j1gx+y__Ph5mewaTlkGUharY9p_c;Pa9P&T$DfhHut!bly`EvT8B;8Ah*NoklGFtjsY|oA`?gk zg@SzCQHw4xT)!BB;Lb=O%_7^lvYsG*^M%0#CVe1I6h6V%(Z}KKA}g#{#C6Q8yoWFI zqN7TSbM4YW?68g+?aMcDYS_Q9*9+3Ysh+K9-G&Bom!ga|!!upp z+7YC@Y*Tlmu|a%T8n`zrx9;i7X)}why!p_E3)Dy!Yc-!~@cTf_%pWMJqgN$VxvkqM zAe_Hs>^NT~M^N=7&98P%Xa|Wb!i7%eC4c5jkb{G5N7*apbQH-oikP<3n7_e z?U;(90j)`CGo&d!1foYxG+HM@hPw9fgX{8S57;3l1Ds?Vf8s|CT_A}#L#KWtB7U^yj)6|j~`>|&d zw|cq8ecfhy;N-;17MsV5Bs#^AOOJLAXMlzWr<~c?n5J45gjp_~Z#;)Ziv`S1L>$`G z8nV=CoLQgb%Xkc)f@F%JDkHKEjpK3f^W<<SZ@Dn??uP( z={aKFH@{HAVaq-@2+n()R>Vv0=29ShRPdS3ul4<6KZ?+MFj0550JSA;usPy_Fc?`- z+xZ?=GT|;Yhvsb-z-eo+V7~AKrmT(y>#COj`yx5XBAABe{I$W%uSFfX# zIWJY3Hb)U>W9`)Ct>BE_KF7~jf(yLUfip8>Fh}(K;?%Z=T-0*_L{2Q2Hm>LL104wv z*AwyR4}I(9m!e)Kd(Ch&pvCPuvhs~SJ3mp0@^tEzE#E(zy0rv-c zx;oBfe4Ls`b>TdrZ2K_6^f4RO+*#wSRO$(DR`hNs^_lNh_6RSNBCo^b={;@?aj)Zs zzR)7az^XT8^Ejt7|DH)$nRCc$Hb6V(6ltO_b|FsWO1FII2>T-5f}C{WVcvKnvs}xm zfl3(|61D?qCRPw11B;W%pS;NHtL8$deQ7p zEs?29bJV5c#dR?1$bB9YUWAS`3e{!vVLw?L$?^LN~W>5xnwe|}*iPRT;4rLL_s ztF@zVj7c6l%aK6rWU{?#8=x>`!nkzc&D$X%W{Se+&(LJD-h`cOYCK`nsgz7XNYA#n z>9m}Kb8VB#L`7%mh{7ct+m_jdQI84KU?}9 zdLO2ZaeY56d*5XW^b4_Z0qX*5fCG4O1qcs0WA-|X7p)XTK`<_SNoBTY-q~u-PkU<{ zd#ngeIMC4hSd<+Q3+gEISRkDAT2ni2;~=w`Q{gQ$SCL}y{*LQu*{Ti5+C(ZRFj>?r z@LghO8ZVLt&hG4tWfF-~MbAs3w=+}7t_b3Tm@6G5oO9tFF%_h$3OHqAzTsY)Nh)D0Yk3X9@wjQpsjImILKnF(-A{?M%m;g+o(zYThl{v&o#D0Ig? z&Dur46~@YauHMjNGbZB(cih9Kd#ou7z!wB+S zq$iF#TXOM6bZ>p=lZp}3MG2jA_EJvZ*7S`(GtzwuM4loE2P&eYoIy=L)lfA<)4h=3 z*zWbdo9nCo&T3;dK_{Atb>cfPeP)%@(HvXJC9`;OnRSq@bmtA>{Jwnlyvxji?2(a* zqAV-0p$W%J^g0dtJG{!CZB?ZPyOmDL`1u2`Ei%4aBJfa5CX)I2Z_@+D+&b)CMMJfz zj`K~N2=|4m&0f8R#Hq+&)3dp!ciK3i?Xn}pCo&`TZZ|h31L9fpBFkB-o(A(E|G6>V zDNY+89m!G#qZO2OwYHQ?eBZ-%B|ka@89be12KK`J)V8M1_PVB_r9}C#?c>X$$msYM zb)cB$Qy~AI5(nw*nt2a}hIE16p~N^A=_oKsZ2;0U1Um3FhxNI=7id1MkTqnHI1=B7 zVY5#4dK4v)WrRzzBXP=H^%Qd3hf!n}#}$~7!-~(hJU%UY2C_eL#+#}LMZx1US{0TDH6p7jNGuNJCE8L)8Z8%YRUn;6 zuDXit@oCY@Vt%GmD|8e0Zf@H(d-s;dTER9HriFx4^&ydICOf8O{(@<>szK%E$QCJ# zNQ)xx|5#k4`5Tw$&FRBIG-T9jT^(cu+)9iNeruyiG?k7fAb6Wh46SNUrP zshD|6%x*uewBZSF@Vg|-=@=~rG?_T9%{pDF33)k*bh}y|M$uM{>6DGjc2eO`Ojx!1 zTT>Fh3dPr3gD65ADQ=YVz_D-GELlPgL@Q=7(PhlUcD$+ zESsc?HdWHifqoO`SSKuKz0Rl~=rFUIM>b`WhT`5^uW>gHpNSnuVKEiX9GaODh9RgL z+L5wH$S6S;vTC`WrjIMc^au-i!w95?p>tju%oQy!C@ht7UYaJdPw$ApK7FFaKKaPV zKGktj0a>yt_DK`=YCNnG#BEHGW1h6ETwGwNeo_a9%ASP5)rSS4LXeRC&8jR*%5y|< zA{uR|Hs}uHj$0W6OjDKsskfT}NoN4Vn!N#|aZHa*Xi0=kOA&Z(*q@<@%;bRMe7`oF z+LvzOJfq%dQ3Jw0f==XD1qwNH#JoTq5{^!G9bok1xOm;k6%R+IY^gYVWd>KWz0;-$ zHd*UwWBSI7teY$}kNY?JqFdaAAZgg7LC$9jIG?OhDD`S&+)qe&bIgtk`qv9<>;rP) zYyk)PI8NA{n5;HGGyXk3Um=~x?CMD0kj7qlbk@b2 zLQqSk^bvQwAs|bX-9TBW;)%GN3EzZtsSr}4y7P<^{WL~kR0rSJ>*bWG^%@4qSF4ZH zO@mSEi&KLefbZ4$83W($Noychn$h=FvbByVidh*lpOP!Dt!|!laIQRTaGckr;9j6W z-W2JukHuIk@yo&OeC|=Ue`Huc!P|eVbGU|?O$cY~_{kTIeq!I1OEe98eRz;J;k598 z*uf`gY{@(}n@&3hdar(OGDdmPCokXaa}&#VF!WgkI7sJS#6$=NT4mEUia+1~YD)4a zW6a|_s*oL!8J?YvA)%Z)(P7cgPKu|<&g3&pdS9gE-)~GeLz3!mo<*0UxY15;6~fm; znE^7HDaFn^mXh=pFYiZc1z0?zl1jyp)V5u6k+XPpu@&pxh+iv4sQe~`;;l~ItS?-Z^xiWs@ zmx+zFuIUMj$OEiEdo0mEUBVU9KJAi$(5Xb zW1-yp^9*hXWYQoLh(3A)WV2z=do75eEVEaF_2O@~OWnh+xid0wNHll2waK60N75zk zX=-it57c6aF(8s7utd6q|Iq@RA2ng$j&*%EoGpb@k?qQSYGLFEeXzhjE<37lBAKvc=I4jI$9G;5m9M*fY{4Vc0f9|JxOYY{ok2WUw&js{F%{IKVz{n+#aW{CV5 zOzi<$6;m;D->9TLJrB#IJtr~8*+AqmYkt7|zL*;Dab}(L?I!a_ZY3>7%-focgJe?X zfYJvul0J)CV&*nBcQzNo8&)RA+~7+PLiR0(M90tuN)sPpb;qL22=*PvK>ohVWt(iN zT&qoN+myHYxskD1*ThW=lbU6-S#gQYLjC9N0tv3j`t~f1_C<76%CJ;z;WWOlM6`61 zfV0hl+N4UxB-z2Jl$42^ABkC;_|&vGQ|=RdB~K!kRPXohqPoV`anC|Sq3>I8yw}EO{Y|BtbCUsY@m;>!q}4uL%$g)O zb?v01iC&|UjO<=Z&nz3{30$9==O#(XDN@qaurG)6zZxq6|K}z#tyxG&<$0`Z0K{C%eV zAMX zBbyk)HuRfMB2ko2H@-vHN=nT`=t!4*t6e*_a5j1!+QoF(AUSjPugnxhf5M7gAN8Y9 z@k1eO<{OoauOXPzZ0f9beiEWkg9oL<4ryc5gdd~mT}Uk43vk;s)WbKp?7JozlSx)M zA)GVSbvO_PIKJwdwBEM0GaR4#!+LGkXAi>hsVr$I%)G>wOn0cMY=10^jdTw$AgB=I zU;KYCG$-Kvdq8$Z(v)_bZY0#{{9K0Iq81M{3pJt_g5FLrq`|{DnnYG6ql(3oW zI`faFvmxF{V41y|q%lzyq^Gn(_3^nn7>7MhP;y7p&`c;f7HEK8j{}<6SJ25Rc?Yvfh?N(H=e&Kc zy_`tEbl28$?BRJ7)@hP{cay72={HI5f~wD*SbKUWscLLh6@8!V>4a72eO0DjbsdX! z5W1)-)km3H`_d8F!#o;b-sH-zYR3PeNI2L=RqgFvX6)UbX1upFEu^3EpmBR$5GR3f z)95`nG431NQ>jlU$JI_`Gd9&Z^P1ARvFA^k3~%dHLFNwEZdTmgB#i_c2P~tF*Uyu< zZqqOA#9x#!ug0Fzx|8~^$zi6*Uew`Bp*Jo$HJ{%&X(}DwIH}8ty-e4SIlLDgj4b)a zmBf^0bRoZtERZguongUPU#z$>3)E{C@`IC{gfHre2MRqxZi=zK0jPD z4---EoXB@#I!#k!fGmO9{p9e|Zu!~UYpI7pX`e9Bei)zZ4I4S_#XV*G8?yKm+Utxy zllD4!B-!3~CY@J%U58Jvy-r>|0siW2ng@SvChQz!sb1x0(VHJnR;l_KJs7C(sM5|j zmHwLg!i?JMEIzTq$2RvmSD0pdoj#pyd(5H30f8i%bAR*X*sF5>?=9Jjsk4Wc?8Qvl zL+-tsSbHd7@8;Pa3fPNjw};$+#Vp*5Qr>VLwEi^jUHIWlJARyg;vib7y(2O|rg1XIHHvy?b2=M_v$b?B zX(NIqfBZf|C`U`%u&~V?+DZ!#?bFsluOmvn+V+9Qvui)X>Y>@iqJ1?2--dr0DpJv$ zBbKI=0NT#BUw6z5b997t-Os8>y_lNeS1Bw#4&m&OIP#R&fzx*rqbJ+w5LidM?CBT0 zC_>+c5m0c#+kyJ}3g6h})_$Rs=EU9AQlcps_ifD~q=6jXi6cf2fVc$!# zjz`hv(YCDTbV*xqKCxNC2>4RrZ%H01O(-|_3NHspf@`&KWIW~4HhU=V^3H(?U~+d< z*b9vQevF+tQRDV_fP~z}^c{8ly0EguT5Qi+Kek%SQ5U_mtxCki@r`x#pOWvfbYt96 z19qjq#)o|vZ%Xto<=U{v`ub^~J3-V2rcU*td~>(=nq`*GHAj49jSr0K1z8%jsc22+3RDj&lR(!ZzKUL_bpp%du>ZNyb$XZs7 z55JDV#$()KK*#y7K-sUMge`r&{ak8o(hG3e1|^dba;HA5@L&(-QJ}~huI2pW>~ujd z7wJR>oeC$aq@Rs9e7ihNxmT%pX+mcJ`zbAQI=$2H6;K6?ZfSK4J(Cxq2T7+JO_5ay zv)ilxFn6+_PwUOZRfp6qb@iDFi_#26h6n$9v?#6c-al#<+GX3FX6UGZ>{lXkJ3MKU z0)~Q@MOS>wJe~_okN)YHFjI+_0Qfa&J{zLXqlqA~^Dg*YY>877mn{KoH;ylqW*g4& zftfNv4yC%nt-UCnW_O0fFuRT^#*>UT3U-{)Q}S4c=GCP5J-cYpg#t2K@wpNsRAg{x zp))sw|K_S^&MQlc@buaTd<-`Y(=a zR|m6(jS`prlA)THN$=#6YDSUth*0<>UUVa~(7<-JLDLzBf!^CNmW{KaHc8np-iS3} z^)z^GyfaGVPmRO}c`G%>LF{&3WsBzlf+`G(IWDU?=;`MLt`DhAD(aO!-!wD1SHZmZMWJpcpT*T0Oz#lQDR7{x zlb2u866{=)ifEfPucY7ch%>^ER%f4ti?&AEuj(SAiDr|k%06S5S$D)1TYYAh>F859 z5^0BF!rX0-N!2$hrRjc7HES61-StZ-G^Vtl?g$fFq6UV@j$lcD>zh%%i_g;M-YYi) z40>A0%=-AF)@eUd!iQIqOrZET8YHjsm58_!H+t%CcKAu=bd*BJjdC;i#I^sLckXrj zQQ7+>5;uH@lb;a8Cx%4RPsHcKRqr_Fs1w;wzB40TSg?mK;^r%|KiiORb}G!|ZfkDi zjT*~%L_SURo*wF7>&~=_Jrl8^)u?N%fLM*+@L_D@F&X1%pDndks~K^TTKXKgy&E)1&uf}-pP@lm9Kl@-@p_8AB}XcyiUQ)=mjY#;*Tk4mn!MbgZwx0yi)=`B)7o1-+si^P8u}LuwgL_orxDm&lSTkZ|&G91&BaR<++{cdL zEc%E+=c4awrpSWCN^EVX@UzaJRNy+}qVvwbxNz#&^Us?yX6%&H&%9{Tcw#0@svUd& z#M8*;UmB~K!W-qI3TI53FlEBzvkT+TJL_EG8)X|+xMo%j(xEhH;)IFgv!0ElLu2)o zsPHS=qwIBxV_AAMwwz)wtzq_$zG%vsH7953)OdcQqGmilt*B4Yj4GTwy|H7^1@=vp znlm{mRT@=j@lT|bMjv+yD;a$)W%Q7i!V#kjBZrgSQ>yzcXZuIX?b=|#g_ts@y z>mTk~u`v5!>&5mf0p$%_x}STv>;7B1pIlg8y|ZWa!q?{C)V<;HG+0@_V)xF~ySFa% zQp$_&E#JEJwfQ$z9-ZIy;v?LY7p*RDvzXN{R_@tYzH>==(L+6}9viTx@@;FoZ{9&Q z<@Go3-n^{pgUXeM7gip8Ip3VhnyuwUFVn8dq7|=iUsB%k^6t%BcW+)=Ua^E^mAjVi z-mzx)j$O2_hZ1+(MPzyFay4_wJ>^yF)SF$mR<=Fnwf4-vpJ1r+OnXJ)3_f9pG%k2Y zNuQJ#ya2r_i|*LH?U|&qXDRX}w%El>d&e>aU5m-N{*lU}O%&Vp!ZsgwD&Cho4T1_8Bw$z>^MNbDPbgzD}`+>V+NFOmPR2JP+dFa-zXLlw>@_Wn6H&I^C{dZGR_Y*f(mfZ>Y zt<-xf>tA9Vx*ygclov1U+CHD5D@?1IRv@nHv8_F;mXel-g~Fg=!^#V8>|Ve5_3if$ z8)ib5o_BA!g|fwCE0%UWxse;MS}~F9cJEqWxqAySySHtsJhYvgp8J=>G)d2brCmGL zC*3#R4b{V7me=3Ed&}ag`QX2tUFcf9nelOUQcrTTq3XA_3lOMl+mn^WyI_&RMBe*o z3ZJHeIn%jPe(V;_wNQ3>{e!!A+_ii2Z4~S^Fl^nsRxltURBk$ymn^8<{!HcW4V5J~ zme+2j3OE|lrR^%;wyr|wBZJcz(PH@qI>szf`48OOvuXw9R~XW@cR`Wzc9A$?=$Rni z^_~YFEN^;T6KCtz@*VdP341D0<)JN=rR&SLF6?@EJ%#DC&axmUcB{fjm)ygu5Y}69u4l?_o4geqEVL&xJvcK28(WCIiC#j#p1aqV z7d&o+>UrXx@`6R>jSqBhSn2Z6Jou7Os~@U7`xv9Rd)wo?w?EV~|4yHk$CjVf6t&(j zDQ~{Hyzy@ORayCBWu;BEm)3XPw1xXn+B6Py7pEON&0eI0W=qN|o+vL`#Y};m6xH?2 z6Nr&Ggu{lN!TRf@6Rd4iT$ncfq!XC=VmgwWG*B5Ewv?BxEkAiXopDaE@4S}RFD@@w z2M5}B7f(8&(6#-Zu7_^)!jT-icixW7;Ky59+eh1A@q%-M5vzosZ}iNLnvo+c7=MRw zbYn}+<%8$&^4DPcICwfgkkir17hDEkp=5)sak(R>qtkJ(sXOc9Sq)=HUOD}^xwHAy z6a4O+-gVo{%tYr~h`a~MT3)gRStKPvW}j>7S=CHQAKd*C;<)Fg^}Dyd?0T#JvY+3{ z49yDmq$nh~p>prbJ@>v?ICXS^Q7=rGe175NlSYgzRPKGevSuw6d-IcivYhq?S;}iR zBGr5-dhTA;y=Gx-*Nf38~^Rl)u7$J|ukWAeA7$X-_b#1?^{Oo-$(8K^w+~oXK zS#m2vjP{AA5sxn~pd-kg^74BWT)z`x9`df-h>*%kgj34T&3FA(S^IeR2CNclTeGgb z^=`=BweEK0B`VNciNz5_kXt?`_o>!fM9v_@H_z|dc8mQ)K-be7mJt*mU+>UXgUQnQ7e{p6J@PaQCirVS{ax$lV;y<$4QSkxO)&^Mmv7x6S-k!JAmTBCcPzy~=y`Zc*Xs2>53G_jTD`u!Vn)v;+>+yqK#>lo>-LJ_?+sxb!*qMjsDB(CyY3u5NG`oH{iNox}~xe z<8djoeu8PoNVoE0iBtL8VfwT@<7>%eLkI?9%)*m&etb06y@_VbAi-%lpc;#KpKo zWfTN7xG>mr6$V$DbSmk3Se9?OWG zx05VYRiV0V%L>z~7AeyTmBpVcKew`b{u1O8^|;Jq@yjfAq3hF!4)(MBP8Zv*@Cy2= zBmLm9elI7jJ1kX9y?6)mN(Q6KwQsr}>0ZC9=U%j>+!9W>^75rUPb^Y@%v?9#vE_Mr z#VuV=F3nZv)YOmhhM$Slipoi0^@~a-Lsdqe^rERPZoDoYJITCbm8B~sY{=|$*;8VX zE_m6ekg}UU6xd~sd<1X$*af@Gns`k~n#Ru5X+D!X>sWiAo=5*>a(W1Z%!ND~#&tN2> zx?5iVa?i?Lh~Lcrm%EqyreHrZ;8MxCH_Wf|^_CHn%znqlofau`^mPnMy4%{Ft(J@M z3z;WQ92aKHGXFu9SYF^1nC;f5+zpe75}QjnKAb7&y$?9dg5^w+d2?4x zu^#5o0sf4Fn=$AC@1<9n)?qATveSE*+UDt86bl&Zc|VxY-WX&+RhHDGveD5Hm~u-U z#_5{CWk9vI5QXwJVpnOH?qjvm+u0k&GjkuYaUxMSFfozXSN zjH0eNk5ePVc~9EP);}46qi?jla|Z^IX3z5F-Mi$%33*LY6D;2iIp>oG?=9u*-hLk* zqn?MiLPFX=@54&8&&rvVaM!k5$>NOAw{3m8YE`-j$z~bl;(2CGwC%3SgV@^7rsWc^ zdt)JA(9j@P9So)FTk!JkZTEzjZCksZzMXO^&phltb*c#3X3@(Sk{+3oHSpnro4u8y zAnbvvS#po}#~02jsbcTXat->W=$@HDGzwj5yLh!0Lz*!RbjkZb?uqI?YX6al=Em zcCX)v-1qUuSnhguaWqZv3p;Nb>!pT?Q^7eU?RH8XkEcN{)71f6|H)mw;02sOY8fN? z+%_+e62x3C4i+xxxp|$Jpq6b|h~H4;3ufBw<;Qna?%Ro`^WLi4#_tpo+6p^_hNdFt zo?9yqKT0oI{ie+g<71{BS)y9X>`!&TGWyI?H{AVh3ufH)64T3XW5mjlcha7)779wk z5{q6B-cC2XKwsIpP1wC@LwV;dR+pU8HfY*M@}g3C6Reg^o60K|QJT7K`vPhePK~$; z*Yn5&=r^9GS~T^cq|}k)Dw7fB_GRc85KX=NZ|Oy#z-)|wPjVwR_ayW6iWj9ay{I*d zJ-&F`}1t6>UOP?ZoTbuVi1JDV@oR!s3oaDtgv(FW-A^8 zV;pfr&XYzVY4@@vS)L2zdW@4zPKU(^!YX6mi}Ng=ARX{9)RxPKPQnshY%#rf$2mOM z?D$~O`<~I5)}^T?SZ-HG)~qk|j5_jv+q%<7wX%8_b5M+9`bM(JR2Mvw7E(1!okC1# zCJ*c0K!w=(bkYXHYYKma>vf0qCHIjG@Zu}Bo#u*EA3-pQy^)Rs8wp}bV7 z?P7V272|8~PI<$2xs{?B=M0`MnSJh>T>9B#o@#Ysn}eRL~PaX=waRd%FBX z-|5EuGwxDQf@*0>OwVeR%**(S* zAEriv>Bb~M%tlJ~^qH|6x6E~w2XUrg4Ke1uATl2YtJKhbZud&s%1Krc>jWz)qM6|Kk3!u zVJD!gqAD;w_43hb{apQ2u%`wv6!)=9T$Q63bJHI^ zp4Jg3$D*EF??7e2!s#H`GWEuMvs|J=cs8L~*vd7%h7H-p&K_=S$5|UhIt`FF(){U8 zHgBq|e;W|*8~P^rd-Lja#S(Uw+>;>N1AV*oiOK_OD-S%(?9XVN8!sIVa0L^TVe|{J zYw3eat%bq<5HBJ2su2dt5j%f7dtr78q5Gvx!5_CxDigJbwWD3NXkUlz{W})nbq{i# z)$~qnd}b;DG6lA`p<-(JXjc}`@4>whrDEllU6nPfE1MUv2}gc+d<9Wvs?}4%hay3a zKrXob+zW;KX`WE*vx|Ki!vtDh`#}XGXs`6X*`GDWCV$oqw-Y#6#6U^R*$D|1dh?F* zV{4rU;R5K6xr4!&r8Jr0qD#k3%%n+$N199~l&_|Gi-u*r3QWa%T8L~_p9HaaqE6Hn zC^V%sT5D!(eR}t{9nOipW{C@k-P@L>t-@q4B;~b)D9OiFVjQJ3vs*%ce z@gMZ;WB0Qy=E=kk^S7rXj0Y9&iRED1QYfovl4uhg%C>8c-1@lcA<^al*moY-TF0Sr>YG_uBFuJIZ&g!!nm6 zG-r@ylx23sMw=JPT{E`M%Qu}2RXaD%Gj1<6^mQ&ZO{k7Kn-_ z&V4#?)`8WrpK=g$+9tBt#K@%T;2j#U{$3W^>KY!<&0FDNCQG2k-D}Ndr86Hom6NY5 zqdkstUrgGbeX#+>Ad&)dmT7QCHpx4X@fC(34L66 zL*2YL)^BN1C#_rvww)e1By=b`MEx9#8dR+_oGH99fi>cCA)QyA7vDNfb+zQJmDuCN z=YnU-+vhV?x}VglLfiwsK@%K=*Uaf>P^J6dC;Ukj)tJ7sZu5Oa6V>$EHY1F-GZ8wfp27bdWySHz2 z3o7lN_c^7A7|`dKPZiEncduj6Bt_JNt#^CZ$&en<4;c!@iyQd~MjcS|qvu_V7vY#x ziIBoS3gUVLhc8FVy_#^g$TrQD)DL4a8!C4#)3yVzVl241yzA+%1y3e!rc(YM6R{@5 zYh|vuP+9~Vsxn*tl#z!g~+oE?1@MFKo z4!^$|AklEsI;SJ^%$YRrTG->usy;@E+Yl0k#-XhJ&13;h)25}TYlL)qj`5#6i1L^M^q_$RSv1%qKI_Io+MQ~fBuOpcYBRlD=$LWG3 z@3%;o2yx8=b6paCsXfvvr7E=YYVsvy%iVa2*OxKAo)jP1`yP^$WSq( z8=Fz^(Q%bUA?_p56koiBDeuj$D$2!dZeJihseoE@f@y_llyn=|c?01I@q@R@h*)0! z6kZbNFb(&n=QIR4XAfC;{fc)yv{c)9Z{@yaWKV}l(=$)*U}2!OO^)|RacAq4&V5N2 z8sjRUzcs9LpjR7A085`qUTr%N5MFS}%^qr&(X(b< zY6zeM(nI6s|FILwCX=g%h}SS!%SdT1;{CEku6(<1eWASZ4vbfR2*wUm%FS%j&ZtQN z`8ReDdcM6Xxs)1$B+6@km;YgYRyHixp1Ls@wYU(hEV&8$TSuWP&p)hKGuSA`35P&| z9ocbWeyHb|6qKtSr@{U zhd7PpFIn1i3ws9VOc!3_lWA?f2j-timRVM?cg!03?UN#3OUKdR^!AbT5rOLI7)gNs z&4vDL#lo&-zv@Gq!Ye?2LIy==@{=(b#5bR7@dy7a?c;mv5VBsp>(D2g#Uu|cz9My5f@%t!K*{5tT@(6i?Jb+W> zRjN{zO_Eg>0t^TQHa0dOkTIV|#(+$aZ6O(W8D=C_d4>G`=YP6y-c2aK8%lbeCp}!b{-2+}?%v%{P%HkR5v~*`a>mDYK0#f( zJQQ@bL=RhU0Ds9Jgv5jl+dqq43lCx+hANvS{IvMLwkhB8;An@S*;8*{ev=Qmc_b%X z+_qlk9dz{iD)W$TqOs)_!C_@YzKuuccab}Amp$6KIlCkdi&=QOw#i)ThV^<~;qX58 z52v^8y}R-C|GPC?xVfjjzSKZb@(BZ8w>LU$VlosN4@7?ol1MEi|0o*z)ji_i^Er9E zPld8PHlh*qF3WR{W-s%zj?&bXNe>V%~*RP zLS){3`}6b#IPNuTWmzA&hVYr$kL#5xLxxBV$O1(cT~&J)`izbL%$`!8DrZUAY>3{Ed@Rs{b752!n~} zaw9c8E3AtuzR=d_nesQM41Q6g(A}vm7|3#Y%m$$7wQDm8xzE1m)0J|f(t#c-9YjgMidoH#2MN25|-`ASqZ26R9cuayL=hFtxH@*N)bo;IB44_k*?@rf6GvBc?qK zy~xicvJ&VtqzfZlT5^NOk;o;>EP6YzUT?+Fn`Qw;O>uWH0z>+n)XS+>@2W zj)k`Thrk;QkrG$<5dgw>C8Ufp{gE2}A}XIXFP%L1KP) z?*`ognJOs_8{FxKs`R{Y+4sbbV#cI-VWPm1rX`j?27K~MW*Y>)U-gaR?bY5(`wl;5 zwvW80xd-;|6c2+mZFEC-0p$K0mTcIB38_rpnZRktiCt;40p`XwIJ@a2oQI28Qc zaZb;kyatKqBTJQ=K4-}5_)l{2=?d+ItGdp%CtlhqnKab1uCn_{owsc&Z^24B|*5;788eF z&2kLy@a6~SB;s)Y1Bbt|s~Lx=s!H>dnWUmF*5$cG{BnG+AmBmMsK?M&s<*6CD85T7 zS=e4u$}3)U~)<2w}xv6{&SCLa<8-EW&Hvza?t0l}aZ{ z?8e|E$i+U?Nl4PSqx)w&3CHUP9by)CG&Z$fclTw9+NSTydxkiUH*lSwER;lT7n8__ z*Smz9Cl!%85&b;(KYeVIqWKU9*QB|@Th0;>cE!we{DE`A6T)<}mCy@1w~?{I)FggBdcUQoqUkBJ4{=XYv@_U@~^IcO0fM(7`JbEa`Qx!KL2) zi~goy`jVB=Hv?dbVrbL5--$vQ9-ggye2&?GfZLbvK4E6^%nV}H3_6Kg=mDH)b_VPS z(M$42dRDyN^8=m8URzrEr?4<){GPl#2@s6{U55BXVz?6uP}jk2o!s$Dn3THn2hd&X zgP~eN{p~4d=%f7!e`GCC(I^M3d>|BcGRr=@xriieJvJ#?b<52m5nD+P>39Kpz-51p zpr;JYnJ<<&7*r?gw~TuD8e!+m9W*xmeiKBM66L}=~TLi$iZOph|9Iv+GG%$ zT_aHoLIx6CZS&`n2)r1pBHTn3;4*cY?TCXnBKx8+ay$@~_z{j77bA>crA?Z-*%xn| z&#ee~!S^h&unc0nozWU}psbUB5>n^8!V$E_`QQHIIc>#vcg$j4Dm+ z$5w$~0Rxy+2W`cPZNqHaQk}#mZ}-;+b@Rc3K|T}%_9xr2+U1l6TQ1dxVQ^{9uihXr z^m6V6jkc_zbQsoi576DF8%RX59&S9r3xY}OYg<>$L$pM;LaLlo&@3+BC?WP;O#aOQ zP6tMm3c*n^a#=aJ#%0MFJ(2ETFW&nGHnP;HOU+sbbEuP0<~ss!a_=EmT)%_G$S53+ zy?823FTap3)YLnE=$7(3!=w37*^1_Om`a)MAda9~HGnrTWckaP}vqzm45q0pCE5sikSn5}RI*wW0ljg4U1= z7dyr%_uCbSxaZtG=zQ*&Xl)BPo7G?a%ut95-?pEoyK`cE3@N zEA+MGOHceZ?Zsmzstq9Qz|_h0vqWZy94i6PiReN*F%qti(4qSL^rXLYnjgV$Tgg4d zc5*WTB;UHNBn38jq|?}C@+v+~oqX_92ySfFbStU~`C=u6sgZi=;Nbon#r=f-)+|$x zbk@GqV&0NURVP2;b-f$f36<8orhJ~1&l^Q5J)VWRNetddEVhXmx zpRbWjlE&VHy;k9>?XO~n3oYHCTdW-*)rt)gh`Mxi@iYm&vC4QVh9=>6)2}a() zrza@dE?g@Oj(^PJbhRE2qis_97`&(7C?jJVS(CD3#%f!=Zo98EtStdjv46``G&;O- zBFHX&WqY>3szWHp!(bVG7_8F82n|#$VCfW$O}K-#{^#%iRWEP%)G8l8zJ%>ATcwwg zDQwlZRk}E4Ak8teN-rY=X*by_T^uuzvh7ysVr&#aq^mS;-XHK`%UG=XOs{gNbNP(U z^$w{X04Ei5)Z}mg7huA#AVjrb8lFf|U<|-828JeEQ|+T@yd?c2g(&VmD$-qXCSiPS z0gR!z5^()X1f|;UjxGc8Dv&ijR;Y=*2?IX-cAvPaEBN&lzY5^sM;oZD*aBq_mcvK5 z4i%O0tGfiX3)1jMYl@;ATMuUY&Jsq~J70xIinTcdISv}9-M|aL4SKk{$(j%z`u732 zH5W`VZXmq$JdU@gfZ(kjVxv_EIqxmdBHkecsGR64U_q=+=9Y0-1#}2}$2=fQ%1S>? z?=41>z>nb4NFZk4OgX&2`kc1XsjDQEQC`Pat&>`MZ34n9zfK01GDAc*#ZOCba?i-l9--l+n?$1!^g*-~4#iC!ghbpju=@?-(yS9N zz8D8BK=5oISj6&vnVcMsJzs>g^mHrpsJ)>$d|6osV3Kb(@pDqx=(ZGH`*O7V5(PD3 zX-{GXgQV^r0DeLwg?6EDHXMDhiUrv*oMbuOWe1y;D%*O!lNm-B<#{NsW=SG^nsow5 z78ylG=K|Vl_so5EyN!$0qnxF+=N6mEO76y-rPdqZ85&1ncrM^L&xx{6ooG0A`fU9L z-EO!~el-HwS?#AEf0?(tKBn;DuG%x^ZW_kPsD|EfPuxd;{l~(6!_YZqY-OsofK^>x zY!~M>#YG;^uZQvnz($d*h7mOaqIuTvW13>Q3T)|mk>*>2=-NKo;>t~@-`@n%GEAT! z*Ef@K_B|26O)O34IPRR>!GpX2s(KS?)#Sroy#jf!y~Mi1H*k#4dOvzf#6EBn_iFGj z0Oj=TXTS|GKF3jhse z5Wq{N0TtpWYf}BkEC{A^Vm%*_XRxyvdM}77ZPlX~=k~}93-KwXuRN&$4x; zQ@uDq|Kb;F#HmtxQa3grWpX*#WHIJQ!8Oo=IaSkL)IX)Mb+$qL!3Em2K$;dTFrHj6 zX0}ci)&pMG;Y{=!(8o83$ex5(BQBgP7a0Bqlh#>*T-0$FB+SC4%)Y5Ox`oDP# zcwaDQYc`uK9I@>32|?mrZNrEi6zbVcN2XegVO-vuTHKG7TPEP;Bdwf6Scv^C#nc}$%LIH(wiwLJp-4C|Zc!LXZCiKFegpq;< z6>TUrLJTyYMJ8c21W7dR%TT4sRp?zyF7VDXJj2qA31b9r+-6HC@nr6LUdfKNA-ks1 z&#-UtO2dp13`G2{??<6}2|T@7?&ejOVe`wIcpZD~c`!{u>v^Nn;^n+rj!y_)*tW-; zDTsxYl)24Sh@VW)UFP1e`1;e^4&ZbplR|s`iE2pja)E5D600>Zx_29k173tyD8R(8 zpksz;E0SH7;*MSKA9A><7op(zAuI$2%8@uO^zb_~6tPY#uYzB@v0V!jP_k&;cYNhD z`Qi@abd8~xjw3|XJDYqq?R5FvjnCbBOn#%hG$lsdPN+Y~&)r!a=_Qt?%b!B6v)D(2#i*7AqWZYqVLv}>Ru8n9R>N@|zGiDu1Lhb0? zvi}-5p&nbu;mmgX8108Ua`W}o9pt!rHm8c#8gZqwg=|u9t>u0+B`V3gYngf5X0;NF Lzuoj*wkrHDrOvPJ diff --git a/core/urls.py b/core/urls.py deleted file mode 100644 index a1b30b22..00000000 --- a/core/urls.py +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Any - -urlpatterns: list[Any] = [] diff --git a/blog/__init__.py b/engine/__init__.py similarity index 100% rename from blog/__init__.py rename to engine/__init__.py diff --git a/blog/docs/__init__.py b/engine/authv/__init__.py similarity index 100% rename from blog/docs/__init__.py rename to engine/authv/__init__.py diff --git a/vibes_auth/admin.py b/engine/authv/admin.py similarity index 93% rename from vibes_auth/admin.py rename to engine/authv/admin.py index 551ab544..35877903 100644 --- a/vibes_auth/admin.py +++ b/engine/authv/admin.py @@ -25,11 +25,11 @@ from rest_framework_simplejwt.token_blacklist.models import ( OutstandingToken as BaseOutstandingToken, ) -from core.admin import ActivationActionsMixin -from core.models import Order -from payments.models import Balance -from vibes_auth.forms import UserForm -from vibes_auth.models import BlacklistedToken, Group, OutstandingToken, User +from engine.core.admin import ActivationActionsMixin +from engine.core.models import Order +from engine.payments.models import Balance +from engine.authv.forms import UserForm +from engine.authv.models import BlacklistedToken, Group, OutstandingToken, User class BalanceInline(admin.TabularInline): # type: ignore [type-arg] diff --git a/vibes_auth/apps.py b/engine/authv/apps.py similarity index 80% rename from vibes_auth/apps.py rename to engine/authv/apps.py index 150780c2..5b0c265a 100644 --- a/vibes_auth/apps.py +++ b/engine/authv/apps.py @@ -4,11 +4,11 @@ from django.utils.translation import gettext_lazy as _ class VibesAuthConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "vibes_auth" + name = "engine.authv" verbose_name = _("authentication") icon = "fa fa-solid fa-user" priority = 89 hide = False def ready(self) -> None: - import vibes_auth.signals # noqa: F401 + import engine.authv.signals # noqa: F401 diff --git a/blog/docs/drf/__init__.py b/engine/authv/docs/__init__.py similarity index 100% rename from blog/docs/drf/__init__.py rename to engine/authv/docs/__init__.py diff --git a/blog/elasticsearch/__init__.py b/engine/authv/docs/drf/__init__.py similarity index 100% rename from blog/elasticsearch/__init__.py rename to engine/authv/docs/drf/__init__.py diff --git a/vibes_auth/docs/drf/views.py b/engine/authv/docs/drf/views.py similarity index 96% rename from vibes_auth/docs/drf/views.py rename to engine/authv/docs/drf/views.py index e7229433..88f9198f 100644 --- a/vibes_auth/docs/drf/views.py +++ b/engine/authv/docs/drf/views.py @@ -2,8 +2,8 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema, inline_serializer from rest_framework import serializers, status -from core.docs.drf import error -from vibes_auth.serializers import ( +from engine.core.docs.drf import error +from engine.authv.serializers import ( TokenObtainPairSerializer, TokenRefreshSerializer, TokenVerifySerializer, diff --git a/vibes_auth/docs/drf/viewsets.py b/engine/authv/docs/drf/viewsets.py similarity index 97% rename from vibes_auth/docs/drf/viewsets.py rename to engine/authv/docs/drf/viewsets.py index e8cead2b..ec103179 100644 --- a/vibes_auth/docs/drf/viewsets.py +++ b/engine/authv/docs/drf/viewsets.py @@ -2,8 +2,8 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema from rest_framework import status -from core.docs.drf import BASE_ERRORS -from vibes_auth.serializers import ( +from engine.core.docs.drf import BASE_ERRORS +from engine.authv.serializers import ( ActivateEmailSerializer, ConfirmPasswordResetSerializer, MergeRecentlyViewedSerializer, diff --git a/vibes_auth/filters.py b/engine/authv/filters.py similarity index 94% rename from vibes_auth/filters.py rename to engine/authv/filters.py index ed366c2b..3528b514 100644 --- a/vibes_auth/filters.py +++ b/engine/authv/filters.py @@ -1,6 +1,6 @@ import django_filters -from vibes_auth.models import User +from engine.authv.models import User class UserFilter(django_filters.FilterSet): diff --git a/vibes_auth/forms.py b/engine/authv/forms.py similarity index 73% rename from vibes_auth/forms.py rename to engine/authv/forms.py index bd8f5e14..82611693 100644 --- a/vibes_auth/forms.py +++ b/engine/authv/forms.py @@ -1,7 +1,7 @@ from django.forms import ModelForm -from core.widgets import JSONTableWidget -from vibes_auth.models import User +from engine.core.widgets import JSONTableWidget +from engine.authv.models import User class UserForm(ModelForm): # type: ignore [type-arg] diff --git a/blog/graphene/__init__.py b/engine/authv/graphene/__init__.py similarity index 100% rename from blog/graphene/__init__.py rename to engine/authv/graphene/__init__.py diff --git a/vibes_auth/graphene/mutations.py b/engine/authv/graphene/mutations.py similarity index 94% rename from vibes_auth/graphene/mutations.py rename to engine/authv/graphene/mutations.py index 1a8f99a7..9d9aacef 100644 --- a/vibes_auth/graphene/mutations.py +++ b/engine/authv/graphene/mutations.py @@ -1,6 +1,7 @@ import logging from hmac import compare_digest +from django.conf import settings from django.contrib.auth.password_validation import validate_password from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core.exceptions import BadRequest, PermissionDenied, ValidationError @@ -12,18 +13,17 @@ from graphene import UUID, Boolean, Field, List, String from graphene.types.generic import GenericScalar from graphene_file_upload.scalars import Upload -from core.graphene import BaseMutation -from core.utils.messages import permission_denied_message -from evibes.settings import LANGUAGE_CODE -from vibes_auth.graphene.object_types import UserType -from vibes_auth.models import User -from vibes_auth.serializers import ( +from engine.core.graphene import BaseMutation +from engine.core.utils.messages import permission_denied_message +from engine.authv.graphene.object_types import UserType +from engine.authv.models import User +from engine.authv.serializers import ( TokenObtainPairSerializer, TokenRefreshSerializer, TokenVerifySerializer, ) -from vibes_auth.utils.emailing import send_reset_password_email_task -from vibes_auth.validators import is_valid_email, is_valid_phone_number +from engine.authv.utils.emailing import send_reset_password_email_task +from engine.authv.validators import is_valid_email, is_valid_phone_number logger = logging.getLogger(__name__) @@ -67,7 +67,7 @@ class CreateUser(BaseMutation): first_name=first_name, phone_number=phone_number, is_subscribed=is_subscribed if is_subscribed else False, - language=language if language else LANGUAGE_CODE, + language=language if language else settings.LANGUAGE_CODE, attributes={"referrer": kwargs.get("referrer", "")} if kwargs.get("referrer", "") else {}, ) # noinspection PyTypeChecker @@ -109,7 +109,7 @@ class UpdateUser(BaseMutation): name = "User" raise Http404(_(f"{name} does not exist: {uuid}")) from dne - if not (info.context.user.has_perm("vibes_auth.change_user") or info.context.user == user): + if not (info.context.user.has_perm("authv.change_user") or info.context.user == user): raise PermissionDenied(permission_denied_message) email = kwargs.get("email") @@ -158,7 +158,7 @@ class UpdateUser(BaseMutation): "is_staff", "is_active", "is_superuser", - ] or info.context.user.has_perm("vibes_auth.change_user"): + ] or info.context.user.has_perm("authv.change_user"): setattr(user, attr, value) user.save() @@ -174,7 +174,7 @@ class DeleteUser(BaseMutation): success = Boolean() def mutate(self, info, uuid=None, email=None): - if info.context.user.has_perm("vibes_auth.delete_user"): + if info.context.user.has_perm("authv.delete_user"): try: if uuid is not None: User.objects.get(uuid=uuid).delete() diff --git a/vibes_auth/graphene/object_types.py b/engine/authv/graphene/object_types.py similarity index 90% rename from vibes_auth/graphene/object_types.py rename to engine/authv/graphene/object_types.py index 71c32035..e9f6e827 100644 --- a/vibes_auth/graphene/object_types.py +++ b/engine/authv/graphene/object_types.py @@ -1,3 +1,4 @@ +from django.conf import settings from django.contrib.auth.models import Group, Permission from django.utils.translation import gettext_lazy as _ from graphene import Field, List, String, relay @@ -5,12 +6,11 @@ from graphene.types.generic import GenericScalar from graphene_django import DjangoObjectType from graphql_relay.connection.array_connection import connection_from_array -from core.graphene.object_types import OrderType, ProductType, WishlistType, AddressType -from core.models import Product, Wishlist -from evibes.settings import LANGUAGE_CODE, LANGUAGES -from payments.graphene.object_types import BalanceType -from payments.models import Balance -from vibes_auth.models import User +from engine.core.graphene.object_types import OrderType, ProductType, WishlistType, AddressType +from engine.core.models import Product, Wishlist +from engine.payments.graphene.object_types import BalanceType +from engine.payments.models import Balance +from engine.authv.models import User class GroupType(DjangoObjectType): @@ -46,7 +46,9 @@ class UserType(DjangoObjectType): balance = Field(lambda: BalanceType, source="payments_balance", description=_("balance")) avatar = String(description=_("avatar")) attributes = GenericScalar(description=_("attributes may be used to store custom data")) - language = String(description=_(f"language is one of the {LANGUAGES} with default {LANGUAGE_CODE}")) + language = String( + description=_(f"language is one of the {settings.LANGUAGES} with default {settings.LANGUAGE_CODE}") + ) addresses = Field(lambda: AddressType, source="address_set", description=_("address set")) class Meta: diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/engine/authv/locale/ar_AR/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo rename to engine/authv/locale/ar_AR/LC_MESSAGES/django.mo index c5a01497c40f60fdd2c11b6d1927735300470528..ccdbf513e0f1b19d1a5de6e9b546458c9ad33c6d 100644 GIT binary patch delta 1510 zcmZY8drXaC9KiA4X{3@$m!ooUq6@m{9(7`8brz8>#N@iU9t=}s>y*=MM@B8yY_-f} zW3!p$_(yCE8Jj=Sv>2Og%$WJZ*t8+vU+=*m&d%P?^Stl#KF{y@J-_!<xI_a5A33DcFs{*n^RH8|ULwT!cR`1ao7IKpe(>>W=NGJE}%~ZiwFgmC-i0&p9&R&zvz^L=a z&k{+;RJ8bsY{G@~-L5#1B{Xhe5Pn5ncnr%iakj_@UO0sNaSPk%5cEh~ zsQu%(m2sU|MgJ#Jlwn0O$AITB55FU|D$(R_sJJDSfyahmpA?C6)8SYSbO? zL0zyJiA_2%7;j-EKEh0lO*6)op}w~XbzD8>v%WNsH%Kv-@Zcwwp<{u_8f?cR{D@Xe zBaeFK^G-KbR`mt_>uLe$Tu z6!mB-u?jb!F4%**lYZ0;3?f;TZ#WO*vN)LLsot)aVlMWQP1`Pmf{F%>XQqM+Bu9G*m=}U^3}?w$?km|ct1F>c6(i&bKlO|wDuNr%)g%ZqPf`LKQlcuCoS9i+0tOn_&acg iePv0ty~MGq(fY#k{HE3Q-;>Qn<;9Lh@7b)cLB9dDxWga- delta 1512 zcmYk*SxA&o6u|K_W|?Mg)0k_GmMvy#V`*w>rebQ-p0-hnEl!9*O;qSGZQ4o;L|`Ch zFN%bj(?UTdSr0vAP)K9F6j72C^$-z3(Es>Nkc{)Y_nZ6Od+xdCUUOY=^~CwP^F_oN zDH4dc&>tUSDE4C%zQP&!1yj&GS!5P2!EkioG;BaKw&5c5;8^^QU$Nwek~G{G++{5Le0p1 z)Ij^(G)~ZXf#b0<&PZ()YRXSxJoaFXNn`*^>D#6lJ8MKirXyD*3K#W~s#xq&78FoJfprE!jU7z^<=S}~S9 z>X|P>k|e881KW#XcoMZ1TCg0iqmKK9-54`ZiD9U#al<4W%{T{1s^p{AT0LqFb!U-(jd&TQ zs5&tPucA)y9FO9#&)wM~)SY}qD_U~6T9}D?w!K(}1E{Hw&NXUh2WnvFP&3tri}7)8 zr7@9SdJQ1KryX^ILpTYaqVDt!zD0lD)&Sq3rt~*zjUXrZZ zSKzrgKFeeh&$Gb(;OONAD@xWEloYRZSr0gzwbt!Bc2@7Nb6OibcO#3&jm=0+Pfhoj v;u|Av|BW1K^4_yH{ClviaAi@k%j)eII?n$QZ\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,260 +13,264 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "الرصيد" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "الطلب" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "الطلبات" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "معلومات شخصية" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "الأذونات" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "تواريخ مهمة" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "معلومات إضافية" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "المصادقة" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "الحصول على زوج رمزي" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "الحصول على زوج رمز مميز (التحديث والوصول) للمصادقة." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "تحديث زوج من الرمز المميز" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "تحديث زوج الرموز (التحديث والوصول)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "التحقق من الرمز المميز" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "التحقق من الرمز المميز (التحديث أو الوصول)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "الرمز المميز صالح" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "إنشاء مستخدم جديد" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "استرداد تفاصيل المستخدم" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "تحديث تفاصيل المستخدم" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "حذف مستخدم" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" -"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة " -"المرور" +"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة" +" المرور" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "التعامل مع تحميل الصورة الرمزية للمستخدم" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "تنشيط حساب مستخدم" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "رابط التفعيل غير صالح أو أن الحساب مفعل بالفعل" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "دمج المنتجات التي تم عرضها مؤخراً المخزنة لدى العميل" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "كلمة المرور ضعيفة جداً" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "بريد إلكتروني مشوه" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "رقم هاتف مشوه: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "تم تفعيل الحساب بالفعل..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "الرمز غير صالح!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "المجموعات" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "قائمة الرغبات" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "الصورة الرمزية" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "يمكن استخدام السمات لتخزين البيانات المخصصة" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "اللغة هي واحدة من {LANGUAGES} مع {LANGUAGE_CODE} الافتراضي" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"اللغة هي واحدة من {settings.LANGUAGES} مع {settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "العناوين" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "إغلاق المواضيع المحددة" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "فتح المواضيع المحددة" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "مفتوح" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "مغلق" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "المستخدم" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "الموظفون" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "النظام" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "بالنسبة للمواضيع المجهولة" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "موضوع المحادثة" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "خيوط الدردشة" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "توفير مستخدم أو بريد إلكتروني لموضوع مجهول." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "يجب أن يكون المعين مستخدمًا من الموظفين." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "رسالة الدردشة" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "رسائل المحادثة" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "مطلوب بريد إلكتروني صالح للمحادثات المجهولة." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "يجب أن تتكون الرسالة من 1...1028 حرفاً." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "نحن نبحث عن عامل التشغيل للرد عليك بالفعل، انتظر!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -279,170 +283,169 @@ msgstr "" "يمثل كيان مستخدم مع حقول وأساليب مخصصة لوظائف موسعة. توسع هذه الفئة نموذج " "AbstractUser وتدمج ميزات إضافية مثل تسجيل الدخول إلى البريد الإلكتروني " "المخصص، وطرق التحقق من الصحة، وحالة الاشتراك، والتحقق، وتخزين السمات. كما " -"يوفر أيضًا أدوات مساعدة لإدارة العناصر التي تم عرضها مؤخرًا والتفعيل المستند " -"إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " +"يوفر أيضًا أدوات مساعدة لإدارة العناصر التي تم عرضها مؤخرًا والتفعيل المستند" +" إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " "حالات استخدام محددة لإدارة المستخدم المحسنة." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "البريد الإلكتروني" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "عنوان البريد الإلكتروني للمستخدم" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "رقم الهاتف" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "رقم هاتف المستخدم" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "الاسم الأول" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "اسم العائلة" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "صورة ملف تعريف المستخدم" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "تم التحقق" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "حالة التحقق من المستخدم" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "نشط" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "قم بإلغاء تحديد هذا بدلاً من حذف الحسابات" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "مشترك" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "حالة اشتراك المستخدم في النشرة الإخبارية" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "رمز التفعيل" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "السمات" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "المستخدم" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "المستخدمون" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "المجموعة" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "الرمز المميز" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "الرموز المميزة المعلقة" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "الرمز المميز المدرج في القائمة السوداء" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "الرموز المميزة المدرجة في القائمة السوداء" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "يجب أن تكون 'السمات' قاموسًا" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "مُعرِّف الأعمال مطلوب عند التسجيل كشركة تجارية" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "بريد إلكتروني مشوه: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "لم يتم العثور على حساب نشط" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "يجب تعيين سمة token_class على الفئة!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "تم إدراج الرمز المميز في القائمة السوداء" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "رمز غير صالح" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "لا توجد مطالبة معرف المستخدم في الرمز المميز" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "المستخدم غير موجود" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "إعادة تعيين كلمة المرور" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "الشعار" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "تأكيد إعادة تعيين كلمة المرور" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "مرحباً %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "لقد تلقينا طلباً لإعادة تعيين كلمة المرور الخاصة بك. يرجى إعادة تعيين كلمة " "المرور الخاصة بك عن طريق النقر على الزر أدناه:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "إعادة تعيين كلمة المرور" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -450,7 +453,7 @@ msgstr "" "إذا كان الزر أعلاه لا يعمل، يرجى نسخ ولصق عنوان URL التالي\n" " في متصفح الويب الخاص بك:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -458,22 +461,22 @@ msgstr "" "إذا لم تقم بإرسال هذا الطلب، يرجى تجاهل هذا\n" " البريد الإلكتروني" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "مع أطيب التحيات,
فريق %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "جميع الحقوق محفوظة" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "قم بتفعيل حسابك" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -482,7 +485,7 @@ msgstr "" "شكراً لك على تسجيلك في %(project_name)s. يرجى تفعيل حسابك بالنقر على الزر " "أدناه:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -490,22 +493,22 @@ msgstr "" "تفعيل\n" " الحساب" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | تفعيل الحساب" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | إعادة تعيين كلمة المرور" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -513,34 +516,34 @@ msgstr "" "تنسيق رقم الهاتف غير صالح. يجب إدخال الرقم بالصيغة: \"+999999999\". يُسمح " "بإدخال 15 رقماً كحد أقصى." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"يمثل طريقة عرض للحصول على زوج من رموز الوصول والتحديث وبيانات المستخدم. تدير " -"طريقة العرض هذه عملية التعامل مع المصادقة المستندة إلى الرمز المميز حيث يمكن " -"للعملاء الحصول على زوج من رموز JWT (الوصول والتحديث) باستخدام بيانات " +"يمثل طريقة عرض للحصول على زوج من رموز الوصول والتحديث وبيانات المستخدم. تدير" +" طريقة العرض هذه عملية التعامل مع المصادقة المستندة إلى الرمز المميز حيث " +"يمكن للعملاء الحصول على زوج من رموز JWT (الوصول والتحديث) باستخدام بيانات " "الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد " "المعدل المناسب للحماية من هجمات القوة الغاشمة." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "يعالج تحديث الرموز المميزة لأغراض المصادقة. يتم استخدام هذه الفئة لتوفير " -"وظيفة لعمليات تحديث الرموز كجزء من نظام المصادقة. وهي تضمن أن العملاء يمكنهم " -"طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " +"وظيفة لعمليات تحديث الرموز كجزء من نظام المصادقة. وهي تضمن أن العملاء يمكنهم" +" طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " "المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -548,29 +551,22 @@ msgstr "" "يمثل طريقة عرض للتحقق من رموز JSON Web Tokens (JWT) باستخدام تسلسل محدد " "ومنطق التحقق من الصحة." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "تنفيذ مجموعة عرض المستخدم.\n" -"يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء " -"والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة " -"المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. " -"تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة " -"التطبيقات القوية." +"يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/authv/locale/cs_CZ/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo rename to engine/authv/locale/cs_CZ/LC_MESSAGES/django.mo index 7ee73750eb45e88d02b2fda4ca504b84138dad1e..1bf2269100a8cf3fbbe80b54bba2632de2839012 100644 GIT binary patch delta 1504 zcmYMzZ)lBS7{~Ez!#O+c&oQ$x8_w7aW1F+X(q?t!WaUq6PBMvNZIjv9P&SU#TFES= zSzhhMBqe_y3h~AoDTEAfR->f7puC{uPrg6riDf?b^X$Iw=en-@x}P+BX}Fe~7~5!O z?OA3%e25eAIr?z~r{f2lhre+V7ECjnk2RQ%9XJyH?u7jw|9n{f2 z#Y}vIeeClIOL&fT1|H<5K*E6B5nJ^2{!=u$+UYXf~D~KZ+fs<>k2< zwf+EhGB1Wfo_~_XVk{|SEp9`;ZRe20Vs?{3882RvbxWlB-=tI&%PEKn-z{tjpk)JFZNKpd>XXYSuqX#hoDhU$SD z)P}oJN3jpJ@p0D^sG~ZA+II-g;wVOOUlHq6%0~=3@hvLzD0fU>HA_Wl(Qbv=YPEiXps#oQ8cw%}Xn${_4(h29>x0^}!z3epGi4qORK= zR3Oh#_kA3dSt^~Rd4-sQ6{w@CM%{`!RK=Q6J<)|L@pcLI_cQpx3z@`4*^r%)MQ zMrAmRs>nE|<5z4!FZETxhft;LMjGC(q1L~4n!Fhax^Py+?<5V}pRLa6r1FG>u=ChA zl;UfvZ*Onf+t5~g_GDJ}|0icKYn8_nEDbI#4mqE5FZ+xBO~|%C~<2 delta 1487 zcmYk*TS!z<6vpv2nvJ44rZryDI+a#lQqv-g((HoL?V%{a!YsQuWC%4Cq;VqCh^VLp zpCap}3k1dlLD6;eA+anXAA0Pe8xcj&LlpG?Iuj(>Z|~zid#|>kLCb8E~j z95hS9+c*v%U;v|-g|BcHe#R2a$TXXSOK~EGa3*$O242F&7{LVmisSJIYW;6a$3T|3 zHif|qPLb891&zpA)`rR0g%j{Brr<@Kgg3AVA7T}L!c@%9_5!Iy{#hOWY5#55jYqH% z<8xeZqoy1$qW!4Idr*NyW4=Zm^d1S`(%DUwDneykhRSF;>b*^|c`Fi=bzlMZqAGG1 z73d?E!3hSVn1~IzUTK?AB|nLIIDjoav*%dOyke?Z8n&RWDvYYo@tEgPnfIfv_AXAw zLF{9nH(18p-RDq#23JrEhma&~6c^wpjE^&Orkh>k#e6QBqS>>2?<&@kmY;be>izB5 z$+|YIVE&OT=3?$_vxT?{IopmQiMe)}K_w3!q7MF!$|#i%TY^(@8g4)%bZoQ~L zuA{#9K~!cRQ0wC8s1yvMu4*Rgt5|@lSUsvInsFIkD5L%X24g&s?@)LB0~J`1`W?kG z+=&CI4TD^88Wv(bE_bBpX$+(uxM}^IFXVzCa71GVDfW z*pI5nAWp;=*p6>e0k5adD&=;h;q4Ua{acZcKf^b9Gea)b68Qc1QyV##xX|ab$kU`~ zO7@!Cb#)tS>sD?!;v5QvTb&&{cWpb+7Ir!!cY-U%CsdY}mzGC-c{c+8uiWn(jNWf) QZ9g2nxtEn=B~$!=09y8}7ytkO diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/engine/authv/locale/cs_CZ/LC_MESSAGES/django.po similarity index 62% rename from vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po rename to engine/authv/locale/cs_CZ/LC_MESSAGES/django.po index 221f7535..276e8288 100644 --- a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/authv/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,259 +13,263 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Bilance" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Objednávka" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Objednávky" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Osobní informace" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Oprávnění" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Důležitá data" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Další informace" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Ověřování" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Získání páru tokenů" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Získat pár tokenů (obnovení a přístup) pro ověření." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Obnovení páru tokenů" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Obnovení dvojice tokenů (obnovení a přístup)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Ověření tokenu" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Ověření tokenu (obnovení nebo přístup)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Token je platný" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Vytvoření nového uživatele" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Získání údajů o uživateli" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Aktualizace údajů uživatele" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Odstranění uživatele" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "Obnovení hesla uživatele odesláním e-mailu s obnovením hesla." -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Zpracování nahrávání avataru pro uživatele" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Potvrzení obnovení hesla uživatele" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Hesla se neshodují" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktivace účtu uživatele" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Aktivační odkaz je neplatný nebo je účet již aktivován" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Sloučení naposledy zobrazených produktů uložených u klienta" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Heslo je příliš slabé" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Špatně formulovaný e-mail" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Chybně zadané telefonní číslo: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Účet byl již aktivován..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token je neplatný!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produkty, které si tento uživatel prohlížel naposledy (max. 48), seřazené v " "opačném pořadí." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Skupiny" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Seznam přání" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Atributy lze použít k uložení vlastních dat." -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Jazyk je jeden z {LANGUAGES} s výchozím {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Jazyk je jeden z {settings.LANGUAGES} s výchozím {settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresy" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Zavřít vybraná vlákna" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Otevřít vybraná vlákna" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Otevřít" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Uzavřeno" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Uživatel" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Zaměstnanci" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Systém" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Pro anonymní vlákna" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Vlákno chatu" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Vlákna chatu" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Zadejte uživatele nebo e-mail pro anonymní vlákno." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Příjemce musí být zaměstnanecký uživatel." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Zpráva na chatu" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Zprávy v chatu" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Pro anonymní chaty je vyžadován platný e-mail." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Zpráva musí mít 1..1028 znaků." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Už hledáme operátora, který vám odpoví, vydržte!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -276,182 +280,180 @@ msgid "" "for enhanced user management." msgstr "" "Reprezentuje entitu User s upravenými poli a metodami pro rozšířenou " -"funkčnost. Tato třída rozšiřuje model AbstractUser a integruje další funkce, " -"jako je vlastní přihlašování e-mailem, ověřovací metody, stav odběru, " +"funkčnost. Tato třída rozšiřuje model AbstractUser a integruje další funkce," +" jako je vlastní přihlašování e-mailem, ověřovací metody, stav odběru, " "ověřování a ukládání atributů. Poskytuje také nástroje pro správu naposledy " -"zobrazených položek a aktivaci založenou na tokenu pro ověřování účtů. Model " -"User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " +"zobrazených položek a aktivaci založenou na tokenu pro ověřování účtů. Model" +" User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " "správu uživatelů." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "E-mailová adresa uživatele" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefonní číslo" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Telefonní číslo uživatele" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Křestní jméno" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Příjmení" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Obrázek profilu uživatele" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Je ověřeno" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Stav ověření uživatele" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Je aktivní" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Zrušení výběru této možnosti místo odstranění účtů" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Je přihlášena k odběru" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Stav odběru newsletteru uživatele" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Aktivační token" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atributy" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Uživatel" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Uživatelé" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Skupina" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Vynikající žeton" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Nevyplacené žetony" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token na černé listině" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Tokeny na černé listině" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` musí být slovník" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Při registraci podniku je vyžadován identifikátor podniku." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "nesprávně formulovaný e-mail: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Nebyl nalezen žádný aktivní účet" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Musí být nastaven atribut token_class na třídě!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token na černé listině" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Neplatný token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "V tokenu není deklarace uuid uživatele" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Uživatel neexistuje" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Obnovení hesla" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Potvrzení obnovení hesla" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Ahoj %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Obdrželi jsme žádost o obnovení vašeho hesla. Kliknutím na níže uvedené " "tlačítko obnovte své heslo:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "obnovení hesla" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující " -"adresu URL\n" +"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující adresu URL\n" " do webového prohlížeče:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -459,22 +461,22 @@ msgstr "" "pokud jste tuto žádost neposlali, ignorujte ji.\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "S pozdravem,
Tým %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Všechna práva vyhrazena" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktivace účtu" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -483,7 +485,7 @@ msgstr "" "Děkujeme, že jste se přihlásili k projektu %(project_name)s. Aktivujte " "prosím svůj účet kliknutím na tlačítko níže:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -491,22 +493,22 @@ msgstr "" "Aktivace\n" " účet" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivovat účet" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Obnovit heslo" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -514,28 +516,28 @@ msgstr "" "Nesprávný formát telefonního čísla. Číslo musí být zadáno ve formátu: " "\"+999999999\". Povoleno je až 15 číslic." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Představuje zobrazení pro získání dvojice přístupových a obnovovacích tokenů " -"a dat uživatele. Toto zobrazení řídí proces zpracování ověřování na základě " -"tokenů, kdy klienti mohou získat dvojici tokenů JWT (přístupový a " +"Představuje zobrazení pro získání dvojice přístupových a obnovovacích tokenů" +" a dat uživatele. Toto zobrazení řídí proces zpracování ověřování na základě" +" tokenů, kdy klienti mohou získat dvojici tokenů JWT (přístupový a " "obnovovací) pomocí poskytnutých pověření. Je postaven nad základním " "zobrazením tokenu a zajišťuje správné omezení rychlosti pro ochranu před " "útoky hrubou silou." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Zpracovává obnovování tokenů pro účely ověřování. Tato třída slouží k " "zajištění funkčnosti operací obnovení tokenů v rámci systému ověřování. " @@ -543,7 +545,7 @@ msgstr "" "limitů rychlosti. Zobrazení se spoléhá na přidružený serializér, který " "ověřuje vstupy pro obnovení tokenu a vytváří příslušné výstupy." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -551,29 +553,22 @@ msgstr "" "Představuje zobrazení pro ověřování webových tokenů JSON (JWT) pomocí " "specifické serializační a validační logiky." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementace sady uživatelských zobrazení.\n" -"Poskytuje sadu akcí, které spravují data související s uživatelem, jako je " -"vytváření, načítání, aktualizace, mazání a vlastní akce včetně obnovení " -"hesla, nahrání avatara, aktivace účtu a sloučení naposledy zobrazených " -"položek. Tato třída rozšiřuje mixiny a GenericViewSet pro robustní " -"zpracování API." +"Poskytuje sadu akcí, které spravují data související s uživatelem, jako je vytváření, načítání, aktualizace, mazání a vlastní akce včetně obnovení hesla, nahrání avatara, aktivace účtu a sloučení naposledy zobrazených položek. Tato třída rozšiřuje mixiny a GenericViewSet pro robustní zpracování API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/engine/authv/locale/da_DK/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/da_DK/LC_MESSAGES/django.mo rename to engine/authv/locale/da_DK/LC_MESSAGES/django.mo index 9e350889e731b99c2f26b60663d904ce416392ae..0d82ed6eaaf18a10c74c2584bdfc22e8fc44d62e 100644 GIT binary patch delta 1484 zcmYk*OGs2v9LMo9mg7u5#z&5iRJ1fLAE{U&NM)sgMK7^1ky>av6lIPOC^kJ1krE3H zq)3X=R*^C8Y?DzLi1ffsAk`vjlTwQ)$m;v^UN9N_oOA9y=l=iy`@i#z1II^GLIMYj zF>PLB-1r=q<16&w3?||yT#J7&53>@C$-#pdgB`dAdod0lVHrNdPz>P^C%RDgdoUI= z5>3FYVo<_@+;87-5_y(6hv9e~Bk>MK;6q%Ak8wS|#!~!^QMf6|3Zw%0nOgqod_Q(! zA0EN@e>Y;pL=*2vxlEy%h?nXVJ9TmW3+=oN<^*MVzmAdKO6`~H@ ziaM~;p6|8iHAw8H9@PU~*oi~93sWd>luFsa-~{@$fbVVR(8YWK!_i3{t1uSbSdVJL zCRE@jk^VHDNU~-SOYjL6;ty0H+4Z5Yr-9|M)F9hK1-M&LNAniVE}+#$z8w;xMYGf~deIu^PV>P=9r4#RluMszr7C8C*O7TbK{yG4zs# z?mvr*uL!p=A3_B>Yden=%{XW*^-ex2u|23js!^YDbJ1aIaNb@RL-%REUfgCLv{#^bkpe z4_Pk>QxpXy`A~@zAwpnKZ-E#sLQhG3f8Co5e$F{_@43J8pZ^_c{&s94#m~FV7}F7N zOb9;275E&Za0(M}7T4n*7= zd995alB`7SsN|PWL8ffyP!IZogf}tlrb=a@PMm`}Q3dM01NOWH$z-~59gd(X@)Q+x z(#v3g!8;7b+7zp_ji{1e##EfZBMxKU;zs8AYplu~LRF>(L$S+V??VNZ)R@jcAc*71NbKgiICL`~ z<`n9gNi4^&$So!}(-^0=s$r1FLKo_{8b>94iMnA932PGQxRqFh>W!VKiXBFZVp>oY z=*JSghG{sBYUV{$z~2~z{*=+Bql7U~(qhyDj-vvc!@W3Ye?M=phf+8FcB!ZhU8oHU z?D-aZUXElpyHGuF277Q2Js3iHBUQ?M3{GOB7I4OP9)p=LU>Gi8G5*02ET*n%!g5q_ z57M9JAaY34j)iy&bMZYYh~Fmb`(*U$#!3b%SqmZGym^g$%o6{! zVH)Mr`@b0#v;pJr1V&&ls;91^f{kG{&bX<+y40Cty;g;&Zm+_B8{lc?z1WC9P}lG0 zI11E^rFb3{^oi{>QY7;c)jPp7m=2bS3gSk+#ua(B)}Y>AXh#JYL_(T-sNePjM&oC^ zfIm?u?aa5{o<7tA?;>xqnf0{>#X92Z8ERQC*8jgU-*9k|!(n`HLZ-qKtIGCxYRWu2 us(YMgTRU2uM~^i(b+&alyM2%2D+2=x+_~;tpCdIb>Uy>-(YM?6D)293*`M|R diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/engine/authv/locale/da_DK/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/da_DK/LC_MESSAGES/django.po rename to engine/authv/locale/da_DK/LC_MESSAGES/django.po index 6c59e216..cd25be55 100644 --- a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/authv/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,261 +13,265 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Bestil" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Personlig information" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Tilladelser" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Vigtige datoer" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Yderligere information" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autentificering" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Få et token-par" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Hent et tokenpar (refresh og access) til autentificering." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Opdater et token-par" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Opdater et tokenpar (refresh og access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Bekræft et token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Bekræft et token (opdatering eller adgang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Tokenet er gyldigt" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Opret en ny bruger" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Hent oplysninger om en bruger" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Opdater en brugers oplysninger" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Slet en bruger" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Nulstil en brugers adgangskode ved at sende en e-mail om nulstilling af " "adgangskode" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Håndter upload af avatar for en bruger" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bekræft nulstilling af en brugers adgangskode" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktivér en brugers konto" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Aktiveringslinket er ugyldigt, eller kontoen er allerede aktiveret" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Flet nyligt viste produkter, der er gemt af klienten" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Adgangskoden er for svag" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Misdannet e-mail" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misdannet telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontoen er allerede aktiveret..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token er ugyldig!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "De produkter, som denne bruger har set for nylig (maks. 48), i omvendt " "kronologisk rækkefølge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupper" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Ønskeliste" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attributter kan bruges til at gemme brugerdefinerede data" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Sprog er en af {LANGUAGES} med standard {LANGUAGE_CODE}." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Sprog er en af {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresser" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Luk udvalgte tråde" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Åbn udvalgte tråde" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Åben" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Lukket" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Bruger" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personale" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Til anonyme tråde" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chat-tråd" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chat-tråde" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Angiv bruger eller e-mail for anonym tråd." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Modtageren skal være en personalebruger." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chat-besked" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chat-beskeder" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Gyldig e-mail er påkrævet for anonyme chats." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Beskeden skal bestå af 1..1028 tegn." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi leder allerede efter en operatør, der kan svare dig, så vent!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -285,198 +289,196 @@ msgstr "" "aktivering til verificering af konti. User-modellen er designet til at " "håndtere specifikke brugsscenarier for forbedret brugeradministration." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Brugerens e-mailadresse" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Brugerens telefonnummer" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Fornavn" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Efternavn" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Billede af brugerprofil" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Er verificeret" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Brugerens verifikationsstatus" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Er aktiv" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Fravælg dette i stedet for at slette konti" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Er tilmeldt" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status for brugerens abonnement på nyhedsbrev" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Egenskaber" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Bruger" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Brugere" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Enestående token" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Udestående tokens" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Sortlistet token" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Sortlistede tokens" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` skal være en ordbog" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "Virksomhedsidentifikator er påkrævet, når man registrerer sig som virksomhed" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "Misdannet e-mail: {email}." -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Ingen aktiv konto fundet" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Skal sætte token_class-attributten på klassen!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token blacklistet" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Ugyldigt token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Ingen bruger-uuid-krav til stede i token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Brugeren findes ikke" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Nulstil din adgangskode" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Bekræftelse af nulstilling af adgangskode" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Vi har modtaget en anmodning om at nulstille din adgangskode. Nulstil " "venligst din adgangskode ved at klikke på knappen nedenfor:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "Nulstil adgangskode" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende " -"URL\n" +"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende URL\n" " i din webbrowser:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" "Hvis du ikke har sendt denne anmodning, bedes du ignorere denne e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Bedste hilsner,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rettigheder forbeholdes" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktivér din konto" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -485,7 +487,7 @@ msgstr "" "Tak, fordi du har tilmeldt dig %(project_name)s. Aktivér venligst din konto " "ved at klikke på knappen nedenfor:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -493,22 +495,22 @@ msgstr "" "Aktiver\n" " Konto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Nulstil adgangskode" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -516,10 +518,10 @@ msgstr "" "Ugyldigt telefonnummerformat. Nummeret skal indtastes i formatet: " "\"+999999999\". Op til 15 cifre er tilladt." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -528,16 +530,16 @@ msgstr "" "brugerens data. Denne visning administrerer processen med at håndtere " "tokenbaseret godkendelse, hvor klienter kan få et par JWT-tokens (adgang og " "opdatering) ved hjælp af de angivne legitimationsoplysninger. Den er bygget " -"oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at " -"beskytte mod brute force-angreb." +"oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at" +" beskytte mod brute force-angreb." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Håndterer opfriskning af tokens til autentificeringsformål. Denne klasse " "bruges til at levere funktionalitet til token-opdatering som en del af et " @@ -546,37 +548,30 @@ msgstr "" "tilknyttede serializer til at validere tokenopdateringsinput og producere " "passende output." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp " -"af specifik serialiserings- og valideringslogik." +"Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp" +" af specifik serialiserings- og valideringslogik." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering af brugervisningssæt.\n" -"Indeholder et sæt handlinger, der håndterer brugerrelaterede data såsom " -"oprettelse, hentning, opdateringer, sletning og brugerdefinerede handlinger, " -"herunder nulstilling af adgangskode, upload af avatar, kontoaktivering og " -"sammenlægning af nyligt viste elementer. Denne klasse udvider mixins og " -"GenericViewSet til robust API-håndtering." +"Indeholder et sæt handlinger, der håndterer brugerrelaterede data såsom oprettelse, hentning, opdateringer, sletning og brugerdefinerede handlinger, herunder nulstilling af adgangskode, upload af avatar, kontoaktivering og sammenlægning af nyligt viste elementer. Denne klasse udvider mixins og GenericViewSet til robust API-håndtering." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/engine/authv/locale/de_DE/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/de_DE/LC_MESSAGES/django.mo rename to engine/authv/locale/de_DE/LC_MESSAGES/django.mo index 113c06b64c197e8d45d65886c2055d315f4c1367..c2974a8f5bfe5b60a0fb3d88c0e8172008dd40aa 100644 GIT binary patch delta 1510 zcmYM!T~Lfs7{Kvo8>&_4LtC-fkjY1Bw@oz)4V9q~mZBT9lbyb3w;2k{j4(!-L>O0? znBjt~3l}bg@-fDgnWif<`KYd#aTPNL|EG6lXJ>!synEhrp7WgNeQ(yjtbJe&@t2B- z&mv;RKAeL6I1>jk0Y`8#{>J5)950fB+b|lNaUr&1EOuiq_Tp3wVUkb`M;$*CV=yT} z{4$4zlMCwB;D8!rEjf-6cp0bT4UEM5I18WPQXIe>{Dm`cWug&C0rHh{esq2>w%`Ta zjd8R6#zY5a8xggjMt&7F(!ro(s0;l>HYJOgO*55?y5oG*9l22NI}q$QAu&lSCgW|? zjJ!n+^u3?P85$ok96eSewGF5#zm9Y98CIG^hB1SF!8~JvBN#>hENZ5%1?|H5^t*%o z0n|W0;1KhC$5i_M*EXXujygedl94JqZlGU+TS7!S@v})}l!I>L`Wv>R0hbe{p6x!I z*Z^K&Tm$BCJtRdW8*_0pHX>hn!OtSrm#;K*K+F;&;!UV2tHxD$3bnYNqNex@atbnz z;TXfY=#k7pGiG2h<{=BnIn*P$j~ZwX>JhxcEY_EI6Ak`cW~6#`&*GwDNy$S2hLljw9KWvMugeiKGw z3+hfUqCSpyQLDHIb%HU}`z>~n1?a#CbfNBeFX{%4qGs+iYVqDeHxAj!zfPRzFmBj^ zde-%5!wzi6M|cPexmyEzjB(hHr8tWEKFD?&87M(5zG~E`pbIr)y{NVI4mF@L=PqNy zDVfF}R@9wjBH58L)Emzt?+j_jOLz}8Lu*$W?}ZZ7j2uQ?@J_%J7Hf*5HBkauZ~s1f z0`1{hCR2XkwfT9Z+3WWCJatvxw2t$Z#Q(iOmt}ous3YBxndS_9vvx+?CkGbiZ!U7> k7Zq$jW~=r1Y&+{4+@3nG&s|f~SXX6ho*WmrmG&p>FN5#9N&o-= delta 1465 zcmXxkOGwmF6vy#1RyvlJk2D{pV_B)yXpW^;RMNu~(L{V;QQE^2G>{Y*QX`c{o1_P= zEVW%lQBDs?GSi^PqKJr~MJ*D75GsONg?)ehCmH5*kMqCxo_p@S|7WdNTW>E6@ozG- z_IR^!yo)n&6zAatCg59KhEuo_V;7iZ;AV`*W?X_@7>fhA0RuP-zhfx=LOuTnV{l%A z`7N2oVrG#WQ4iE3b6E?{!IKz?eHek4aXwzhEPRZG_!Z}3dZLqv5BXRzUmCv=d+-?6 z#!n(Ex^w%&H@{Kmj6FsIZAjtS!!=9P;m|R z@!Vc4B>uMCtN=4J%*t^e^07O7r8B>MprHq*Q5hFxIwh;a^~7zc!*vr?;y1`H*d)4f z8nq>E_9q-YScX~11lEb#l73X8w@_Pf5A&JdM*cO-exgdfVufP~?j}BjoA4=8eVfS@ z(1dBI0Si%yY!1dH7)HDk>0))Lgiqle9KZ^!r2bLNZ$mV?aTt}U&+F{zHq?r0FcKSZ z3m!pDIE*@kBdE%Zp%(BKnZtfyDW+s=rCd|wnAs5WlRZM6KbxXahVC4**;tJc*nnDT zE9yG-Alq*Jr~$@N{eR$Mj9l%Up&ZnTH=q_!i>h2B>hK=NgE+jJ`fK2XT&F`eYOhPt zgGcZj_F)^Q(OU^!z&N~tmG}hpK8Ve8Dv*IXeA`iHsvA|YLDY4;hDvBWuhtpxQ}Bo1 zsFg&m;ZCCu)p0-a&af7|h`p!^C9ief3mK@2RG}t35oivJb;a$XsUx8C_W!RaaL%3Y za#`R-_(VivSy6d$by4xQs$-tc=Jvy$0|%QLJ6hU3U4aMjTSI60ygA;SfNRmE=nI41 K)WCD^bl6{@eWfb^ diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/engine/authv/locale/de_DE/LC_MESSAGES/django.po similarity index 62% rename from vibes_auth/locale/de_DE/LC_MESSAGES/django.po rename to engine/authv/locale/de_DE/LC_MESSAGES/django.po index 9e39f342..8eef9fb2 100644 --- a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/authv/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,269 +13,274 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Waage" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Bestellung" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Bestellungen" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Persönliche Informationen" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Erlaubnisse" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Wichtige Termine" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Zusätzliche Informationen" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Authentifizierung" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Erhalten Sie ein Token-Paar" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" "Beziehen Sie ein Token-Paar (Refresh und Access) für die Authentifizierung." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Ein Token-Paar aktualisieren" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Auffrischen eines Tokenpaares (Refresh und Access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Überprüfen eines Tokens" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Das Token ist gültig" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Einen neuen Benutzer anlegen" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Abrufen der Details eines Benutzers" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Aktualisieren der Benutzerdaten" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Einen Benutzer löschen" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Zurücksetzen des Kennworts eines Benutzers durch Senden einer E-Mail zum " "Zurücksetzen des Kennworts" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Avatar-Upload für einen Benutzer verwalten" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktivieren eines Benutzerkontos" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Aktivierungslink ist ungültig oder Konto bereits aktiviert" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" "Zusammenführen der vom Kunden gespeicherten, zuletzt angesehenen Produkte" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen " -"hat." +"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" +" hat." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Das Passwort ist zu schwach" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Fehlerhafte E-Mail" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missgebildete Telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Das Konto wurde bereits aktiviert..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token ist ungültig!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Die Produkte, die dieser Benutzer zuletzt angesehen hat (maximal 48), in " "umgekehrter chronologischer Reihenfolge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Gruppen" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Wunschzettel" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" "Attribute können verwendet werden, um benutzerdefinierte Daten zu speichern" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Sprache ist eine der {LANGUAGES} mit Voreinstellung {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Sprache ist eine der {settings.LANGUAGES} mit Voreinstellung " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adressen" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Ausgewählte Threads schließen" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Ausgewählte Themen öffnen" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Öffnen Sie" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Geschlossen" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Benutzer" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personal" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Für anonyme Themen" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chat-Thread" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chat-Themen" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" "Geben Sie einen Benutzer oder eine E-Mail für einen anonymen Thread an." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Der Abtretungsempfänger muss ein Mitarbeiter sein." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chat-Nachricht" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chat-Nachrichten" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Für anonyme Chats ist eine gültige E-Mail erforderlich." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Die Nachricht muss 1..1028 Zeichen lang sein." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Wir suchen bereits nach dem Operator, um Ihnen zu antworten, bleiben Sie " "dran!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -295,200 +300,198 @@ msgstr "" "entwickelt, um spezielle Anwendungsfälle für eine erweiterte " "Benutzerverwaltung zu behandeln." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-Mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "E-Mail Adresse des Benutzers" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Rufnummer" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Rufnummer des Benutzers" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Vornamen" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Nachname" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Bild des Benutzerprofils" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Wird überprüft" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Verifizierungsstatus des Benutzers" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Ist aktiv" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Deaktivieren Sie diese Option, anstatt Konten zu löschen" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Ist abonniert" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status des Newsletter-Abonnements des Benutzers" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Aktivierungs-Token" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attribute" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Benutzer" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Benutzer" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Hervorragende Wertmarke" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Ausstehende Wertmarken" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "Attribute\" muss ein Wörterbuch sein" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "Die Unternehmenskennung ist erforderlich, wenn Sie sich als Unternehmen " "registrieren lassen." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "missgebildete E-Mail: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Kein aktives Konto gefunden" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Das Attribut token_class muss auf class gesetzt werden!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token auf der schwarzen Liste" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Ungültiges Token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Kein Benutzer uuid-Anspruch im Token vorhanden" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Benutzer existiert nicht" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Ihr Passwort zurücksetzen" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Bestätigung der Passwortrücksetzung" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Wir haben eine Anfrage erhalten, Ihr Passwort zurückzusetzen. Bitte setzen " "Sie Ihr Passwort zurück, indem Sie auf die Schaltfläche unten klicken:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "Passwort zurücksetzen" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die " -"folgende URL und fügen Sie sie in Ihren Browser ein\n" +"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die folgende URL und fügen Sie sie in Ihren Browser ein\n" " in Ihren Webbrowser ein:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-" -"Mail." +"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese " +"E-Mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Mit freundlichen Grüßen,
Das %(project_name)s-Team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle Rechte vorbehalten" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktivieren Sie Ihr Konto" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -497,7 +500,7 @@ msgstr "" "Vielen Dank, dass Sie sich für %(project_name)s angemeldet haben. Bitte " "aktivieren Sie Ihr Konto, indem Sie auf die Schaltfläche unten klicken:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -505,22 +508,22 @@ msgstr "" "Aktivieren Sie\n" " Konto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Konto freischalten" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Passwort zurücksetzen" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -528,39 +531,39 @@ msgstr "" "Ungültiges Telefonnummernformat. Die Nummer muss in dem Format eingegeben " "werden: \"+999999999\". Bis zu 15 Ziffern sind erlaubt." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Stellt eine Ansicht zum Abrufen eines Paars von Zugangs- und Aktualisierungs-" -"Tokens und der Benutzerdaten dar. Diese Ansicht verwaltet den Prozess der " -"Handhabung der Token-basierten Authentifizierung, bei der Clients ein Paar " -"JWT-Tokens (Zugriffs- und Aktualisierungs-Token) unter Verwendung der " -"bereitgestellten Anmeldeinformationen abrufen können. Sie baut auf einer " -"Basis-Token-Ansicht auf und gewährleistet eine angemessene Ratenbegrenzung " -"zum Schutz vor Brute-Force-Angriffen." +"Stellt eine Ansicht zum Abrufen eines Paars von Zugangs- und " +"Aktualisierungs-Tokens und der Benutzerdaten dar. Diese Ansicht verwaltet " +"den Prozess der Handhabung der Token-basierten Authentifizierung, bei der " +"Clients ein Paar JWT-Tokens (Zugriffs- und Aktualisierungs-Token) unter " +"Verwendung der bereitgestellten Anmeldeinformationen abrufen können. Sie " +"baut auf einer Basis-Token-Ansicht auf und gewährleistet eine angemessene " +"Ratenbegrenzung zum Schutz vor Brute-Force-Angriffen." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Verwaltet die Auffrischung von Token für Authentifizierungszwecke. Diese " -"Klasse wird verwendet, um Funktionen für die Auffrischung von Token als Teil " -"eines Authentifizierungssystems bereitzustellen. Sie stellt sicher, dass " +"Klasse wird verwendet, um Funktionen für die Auffrischung von Token als Teil" +" eines Authentifizierungssystems bereitzustellen. Sie stellt sicher, dass " "Clients ein aktualisiertes Token innerhalb definierter Ratengrenzen " "anfordern können. Die Ansicht verlässt sich auf den zugehörigen Serializer, " -"um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende " -"Ausgaben zu erzeugen." +"um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende" +" Ausgaben zu erzeugen." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -568,29 +571,22 @@ msgstr "" "Stellt eine Ansicht zur Überprüfung von JSON-Web-Token (JWT) unter " "Verwendung einer spezifischen Serialisierungs- und Validierungslogik dar." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementierung der Benutzeransicht.\n" -"Stellt eine Reihe von Aktionen zur Verfügung, die benutzerbezogene Daten wie " -"Erstellung, Abruf, Aktualisierung, Löschung und benutzerdefinierte Aktionen " -"wie Kennwortrücksetzung, Avatar-Upload, Kontoaktivierung und Zusammenführung " -"kürzlich angesehener Elemente verwalten. Diese Klasse erweitert die Mixins " -"und GenericViewSet für eine robuste API-Behandlung." +"Stellt eine Reihe von Aktionen zur Verfügung, die benutzerbezogene Daten wie Erstellung, Abruf, Aktualisierung, Löschung und benutzerdefinierte Aktionen wie Kennwortrücksetzung, Avatar-Upload, Kontoaktivierung und Zusammenführung kürzlich angesehener Elemente verwalten. Diese Klasse erweitert die Mixins und GenericViewSet für eine robuste API-Behandlung." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/engine/authv/locale/en_GB/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/en_GB/LC_MESSAGES/django.mo rename to engine/authv/locale/en_GB/LC_MESSAGES/django.mo index e4f23e2aa43aa475578bca8c20c303f2b1d82015..338e0883c0a9f9e9710768741faff197b0b75227 100644 GIT binary patch delta 1484 zcmZA0OGwmF6vy#9X5&oijOHV?v9h#><14d7kjyBEFiIgsT?Eo&#Ik5+QA*CHAq+%% zNK$PIbRm(+tb&3vii(1=6e@(Cv?zkwL{i%K=l>r}kXnEXn!xs~- zHO7R}jd9}xjKyc@#c|BQPq-4Nu>kWH8M7MeFc~{>1@>SHj$kF;$N3n;CQfvr)_ZXw z=46<#SB4yI!$iD-2{??YcnkCKIac6r^x%d}E0C?oziH${`v)gIn1_R? ziabFDIu_>P6c6vvg{?lTv`0}Tzl7O1itP?#-r^F*JNZy0+EJD1L{+NWp6^3d@G7eG zH!%(GV1Rul(9bwrwamJ^HdIEvsDR$P{zbC>aISb0+_~fOkHK&T@5BN4xpOzII3dZs4F;& z3vdt>_z33UB&yUi=tK{l8;5C_&-o^M_Q9BKsJjcI?lOYa*pEx`wf+4Rs^kfzp$)T8 z2j`&fw!oe*MZH&nw2f)R6Bxn<{DEH1H{0o~L)e7c_#wvQ1iJCPJ^vMJ8Bf{sHKeJM z*P|-ZjB2(vBw2G3bp_Xun9VCx^Tsf#E6KvJO1F`RN~}X=(2L5f4^@%NsES-i`qbP- z?#@i24xCqLHJcCP8LvYnQiTb)1NC!lLSi?Eu>vm^Qh(jeOC}V^2UHLIL>-h|#4iF1 zu@NtzHu{bV$XRR!o{0*y-Zp?br~{Sp0IE{AQRj@J_L(T=BJ|=HCbZ!n)LkW&SQ+|J z6{$rJHeeg>M;DHvO8W-sR};I|`g!`Jt#K(1wef5(YKwn=&CxTia)+Zj`pA7R!5!Qe q3bnQ$2o{~2$>rR$5zqThVUp1H67TbSWbbp8dTgsI{H delta 1443 zcmXZbOGuPa7{>8;EXVOSrlvVwvdq-Ho0$lfnxPPF%~B|p3eAMD(uK)%!Niq>fi1LF zwFo3*?1Bpm28tw-lAsnPt%P*Zq6<+$|7X4tncsKLobR0Xa%QpXZr5yPgul+rE~J`8 z;~Z|p1x&yorr|Q?;W`#$@)olKtj9#`!5uh+$#@5AF@TZy4c+(?wf-L_VM3buErW*~ zPLcaj3)+yg>@3FOHH^n`jKgW%jQ6n+pJ5GtMK9+1oIom(e{1GL`*-394r3c`NcTG% z9Zz>6I**F{Ix3K0*!QS|R*~Q>iQQDGLR7|OsEis>?;Qz`yOEe|2zTO5R7K`dfj;;1 zFv`OcdayOqDQyR;XG?g5#*t-@_D~!EW{m zVi9A1@iwP-M^PDFLM^<4S}=*rdI3-3WDXlJ|Cfdlm+w=krNZC9gnLWH0Kn zH6cmb2~-P4kyvdGb$LIbTJi(^DxHs2wOE46;0!8*bEt|8qAD_m+*6xEdS_2j2YyCf zwqF>F-V!H~bc|zMfcm*sA+g&btig*V)L*@Mz=Q%>K;40NsDswA2R)@`$FLu@(Q8yd zUr>R6M+I6@=Gcfjs0EerWmKhZq0X5`?enmVM(D*COlZRos9vq1GIW, 2025. -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,259 +17,264 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Order" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Personal Info" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Additional Info" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Authentication" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obtain a token pair" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Obtain a token pair (refresh and access) for authentication." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Refresh a token pair" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Refresh a token pair (refresh and access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verify a token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Create a new user" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Retrieve a user's details" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Update a user's details" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Delete a user" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "Reset a user's password by sending a reset password email" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Handle avatar upload for a user" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Passwords do not match" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Activate a user's account" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Activation link is invalid or account already activated" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Merge client-stored recently viewed products" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "The password is too weak" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Malformed email" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account has been already activated..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Groups" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Wishlist" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attributes may be used to store custom data" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresses" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Close selected threads" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Open selected threads" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Open" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Closed" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "User" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Staff" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "For anonymous threads" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chat thread" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chat threads" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Provide user or email for anonymous thread." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chat message" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chat messages" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Valid email is required for anonymous chats." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Message must be 1..1028 characters." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "We're searching for the operator to answer you already, hold by!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -287,166 +292,165 @@ msgstr "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "User's email address" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Phone Number" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "User phone number" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "First name" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Last name" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "User profile image" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Is verified" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "User's verification status" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Is active" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Is subscribed" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Activation token" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attributes" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "User" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Users" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Group" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Outstanding token" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Blacklisted token" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Blacklisted tokens" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` must be a dictionary" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Business identificator is required when registering as a business" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "malformed email: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "No active account found" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Must set token_class attribute on class!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token blacklisted" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "User does not exist" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reset your password" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Password reset confirmation" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "We have received a request to reset your password. Please reset your " "password by clicking the button below:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "reset password" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -454,7 +458,7 @@ msgstr "" "If the button above does not work, please copy and paste the following URL\n" " into your web browser:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -462,22 +466,22 @@ msgstr "" "if you did not send this request, please ignore this\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Best regards,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "All rights reserved" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activate your account" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -486,7 +490,7 @@ msgstr "" "Thank you for signing up for %(project_name)s. Please activate your account " "by clicking the button below:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -494,22 +498,22 @@ msgstr "" "Activate\n" " account" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -517,35 +521,35 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -553,28 +557,22 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/engine/authv/locale/en_US/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/en_US/LC_MESSAGES/django.mo rename to engine/authv/locale/en_US/LC_MESSAGES/django.mo index 2547a992d82f4b3fe551f37997c226d07f1b50cd..3264ec03dd191f2afdba41ac13d1e22b6bce3c5c 100644 GIT binary patch delta 1485 zcmZA0Pe@cz6vy#9qT~Pne^Rqj(=^S|OcOyWC2L`%22v(PiILMEt#ngTuSHUrCK7>I z3ni?j)qrh^AgK@~Op&6MF3L@mL{U;i-=FV=kjQ-QyK~>Y=bU?Hpz&GbgA_lj))>>C zU`#N+M1P#ZNSwt){D2$q4{pNDRmNoFK8(f=T#r2%ix063Utj?Gv56alQ0pTx2GbIa zWmYpNVnWt93r-|<<=Sn_Qi6&HK&Y~)1IrG<173@cqegxxj z6r0&+5_7e_IMu$pqo|BJQ470J3kGpUFQ5V#OlJe;12XJPT2KeHqd#_F1?w)OdS#5X z)fN zLmiZbde4KjjoFJA(Tn?W0V6rzY^SqMV>N2yrx=P87>sY7`FX76`HM4OPMRut6{;dN zsAfBYBx}y2u3!j>*}O(I?+?_KMDnGj(rsZ-hPzQ2T|s5gg{nv&sv>uhJ~gAr-I;0B zfj?2r7M*7Yo{dVR2*a=f^>eL8VmD1#ioJQ%Uw1RkgaUbo>VZ$FgWMj=@E3Erf$n=0i;WgJ9h)QozsB{mKtF`0hcjAN*ZJVOOK zW$|!@hxeF>tp!eLkD^LGgoQYP$6UtD;CjZDe5expQI+XHRVosjKaZ;5Agc5?FbnTs zn0=mNfU)J<==5$MDx=e=h38NUhH+Le;Bg%Gu>teHX}B_JFLn;-M7u$_r1G>m+D>flhmWlANjfqiIuil^nSioxhixkHMON~jxy{OB17*(+dss(+x28U3A zk6{r`p-TM~-S`U=@E`g)KU#0~Ho%pR_72s{Fg9X8Zon6@@8?k^|ADH&3hLlE($d(2 zIw%wMUOsYdOf3#z3%24MdUbvor}ttVYU6QKFP~r%zK+e$U_Il{vH1ehRLM(F6$zj& zTP>2DIe==x1tdmuA9Z;@pjxtsmP+SgRUP_J85}`nZ~|442&y6%QLPw3dS@P@4xB|@ zwk1r)xN;{EFQzaqMEzX-NbIH_Yp|!B`l~m0nNT1$M(+UXpaty46+DC|E1Zp9p#u7Z z3j8}N(2}6z4%9(=P#O23Dm9EcXA~9Cz2HITh38CY!*{4&eL-cojH*ac$hkzNc#83M zOvKx$(mp`$shLB5S!Ow8_avmdvf6p3%F#U_`qyZWBv!jz#(tYLopLQLkZV8A-sO(3 Tst8qtY*(S%6P>FJq`LnDV`7+X diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/engine/authv/locale/en_US/LC_MESSAGES/django.po similarity index 61% rename from vibes_auth/locale/en_US/LC_MESSAGES/django.po rename to engine/authv/locale/en_US/LC_MESSAGES/django.po index b26c5a32..0cc780f6 100644 --- a/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/engine/authv/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,259 +13,264 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Order" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Personal Info" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Additional Info" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Authentication" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obtain a token pair" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Obtain a token pair (refresh and access) for authentication." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Refresh a token pair" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Refresh a token pair (refresh and access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verify a token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Create a new user" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Retrieve a user's details" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Update a user's details" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Delete a user" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "Reset a user's password by sending a reset password email" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Handle avatar upload for a user" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Passwords do not match" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Activate a user's account" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Activation link is invalid or account already activated" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Merge client-stored recently viewed products" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "The password is too weak" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Malformed email" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account has been already activated..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Groups" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Wishlist" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attributes may be used to store custom data" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresses" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Close selected threads" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Open selected threads" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Open" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Closed" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "User" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Staff" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "For anonymous threads" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chat thread" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chat threads" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Provide user or email for anonymous thread." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Assignee must be a staff user." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chat message" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chat messages" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Valid email is required for anonymous chats." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Message must be 1..1028 characters." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "We're searching for the operator to answer you already, hold by!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -283,166 +288,165 @@ msgstr "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Email" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "User's email address" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Phone Number" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "User phone number" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "First name" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Last name" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "User profile image" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Is verified" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "User's verification status" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Is active" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Unselect this instead of deleting accounts" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Is subscribed" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "User's newsletter subscription status" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Activation token" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attributes" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "User" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Users" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Group" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Outstanding token" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Blacklisted token" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Blacklisted tokens" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` must be a dictionary" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Business identificator is required when registering as a business" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "malformed email: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "No active account found" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Must set token_class attribute on class!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token blacklisted" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "User does not exist" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reset your password" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Password reset confirmation" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "We have received a request to reset your password. Please reset your " "password by clicking the button below:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "reset password" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -450,7 +454,7 @@ msgstr "" "If the button above does not work, please copy and paste the following URL\n" " into your web browser:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -458,22 +462,22 @@ msgstr "" "if you did not send this request, please ignore this\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Best regards,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "All rights reserved" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activate your account" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -482,7 +486,7 @@ msgstr "" "Thank you for signing up for %(project_name)s. Please activate your account " "by clicking the button below:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -490,22 +494,22 @@ msgstr "" "Activate\n" " account" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -513,35 +517,35 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -549,28 +553,22 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/engine/authv/locale/es_ES/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/es_ES/LC_MESSAGES/django.mo rename to engine/authv/locale/es_ES/LC_MESSAGES/django.mo index 1acd0aff14d3765767a1d71b027994c255ae7a72..a53237bd9de7bebdf78dbb0ea7e4e0b2644dc932 100644 GIT binary patch delta 1495 zcmYMzdrZw?9LMqRY1BDWN_17JNN(MWX|WaQkF13?xeOaEEeaj}5DuGGf0SmX+1Sj; zw9IA4mbv|*(JV|E!)D25Hmv*=wr1X+&RN>oc|FhXJU!3%^89YpzOKC$7vNcEX6{Hc z7e2))_zFYu4MyV^oR5ET38qAuEx`3S0~>KJw&6^?jRp7wr(yt`1fmnQJ`}?-DcU?X zn?WuQWVwIA9^@=LhSTsYhTtU(#+x_`AK)S!z~wlO({X8xFOXv7W1INW{teiK?YJ2u zVm-c%_Qm=lYC=VR4i)Jezh6-Y{XvqldF-Z26`(RML}gTg`oG=&`C%j`Yr_=0imJ$S zRG@<%2F(nH(TO#2zS15*mHa%$<73?AF#CiV%!?CzEjox{%$qO*J5ZInj(qGMUqSdD zRk300WuGz3VeYw?Xtt2S2r9DZB;SDvxRQARmIlyc>~fg((deT*-%mOUcocQOZ@-HA z8S9+5n&*S5W@#A3g~`WaBv(6*iJWg27-aL{A|MvlUo|I=B_p z^UHpFP#gE7HXiiP-=Q)eLS4cTUY$Bj#qHRE;hb+{3{Ikp)#~LboQ4-M7`ss!+{Fs) zLnp?k`<#!o(=t$%DnnKD5Efw<=Hd^eD3-(p((77^9%Wk3K&5WMDfj}_(?JZy52%)W z!%Q6ao5m!W`8HGwPM`w2h`Nl|P%V3e>iKKT!cnZnq%7*MlDF|xb|Ux89{T4)xR?1a ztimeNQVaS~E%=P3IEE^55m#FKY{jMMMg`c7O6Vmjptnd7?R(C~iCbtf)JGZQqe@eW zRLhQ_GU~=~yn`*+hpJ3@p6@l?ffU7>QJMC5Yl3DvR0E^?6W2mx{cZ7{b}n-`3cb%< zy}_=AD!03)uDT)pOlxG!|CzTla&=%}c4l^7daidQZYV5ya^c#-vXY9zlHv_V6L;3v OB{oj};Qg335cCf{`MXH~ delta 1478 zcmYk*T}YEr7{Kvo=KM%&=2vQ3%gj=1E?0?Jrl|=TMPvyYmYSjX5tI?NWPxT0fhk?+ zMFdg#0f{lA5XxX^7-6VH7aCni1X0jMNrXZFXYYb!?sv}1**WL=cxUT}>WAa~Tzf^N zIa(wbN6;T%pane`gR_{7UvUdYtQOgfxws1Ja05Cq0`KB(bfX!+V*oCquK$DKXo(S* ztYMJIDQXVtf->YRX}}O{#TD3zp?C))aS&5+472bHuEeBR<01~^BSn1a{*`zQTd)k5 z#kq`)D&mYAokzWSJL*L|KHs4p^clIlgtMDwDit;2bkvCQQGa*bH?KwRBu?Cjw^1`P zih9wPE(X^byu~0ajW<$z3N_^&n1I7rZ4#NnbmkdrjS^L181r)&g{`QW>P0@%$5$Xu zpk{0eJ?yi94(6^tt4IoiInO#~eEI~7tqn-1m(mN38My;&}wPtg;AAjH;%uX{7zJyxy zTR!ijZu|^&<1ycS95wPcs7?4An=q1B=p?pcIOod(gEm}5t)-J+h2TvL#U9iM9-u}x zf^v8bGnm$4cK0z(X zINI^O&mbm=%(GBSa02yWm(kmds3q$~t@#jc!`E1kOPYU8c`Z-Xt4NnE4nvEnys!${CcGm?)n4-#c3IEy_|NipaT|t>9lei~? zJ)yA&^9~gq%PT58+G4#}*Ia8oU2~@LLPN9F>3$kr5MXxL>^8gGl<+Yu?7x-OXPa2y IXPXZE3p^37;{X5v diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/engine/authv/locale/es_ES/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/es_ES/LC_MESSAGES/django.po rename to engine/authv/locale/es_ES/LC_MESSAGES/django.po index 8cf3392d..cc2ab01c 100644 --- a/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/authv/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,262 +13,267 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Pida" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Información personal" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permisos" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Fechas importantes" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Información adicional" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autenticación" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obtener un par de fichas" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Obtener un par de tokens (refresco y acceso) para la autenticación." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Actualizar un par de fichas" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Refrescar un par de fichas (refrescar y acceder)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verificar un token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verificar un token (actualización o acceso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "El token es válido" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Crear un nuevo usuario" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Recuperar los datos de un usuario" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Actualizar los datos de un usuario" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Eliminar un usuario" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Restablecer la contraseña de un usuario enviando un correo electrónico de " "restablecimiento de contraseña" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Gestionar la subida de avatares de un usuario" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirmar el restablecimiento de la contraseña de un usuario" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Activar la cuenta de un usuario" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "El enlace de activación no es válido o la cuenta ya está activada" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Fusionar productos vistos recientemente almacenados por el cliente" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "El uuid codificado en b64 del usuario que nos ha remitido al nuevo usuario." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "La contraseña es demasiado débil" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Correo electrónico malformado" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de teléfono malformado: ¡{phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "La cuenta ya ha sido activada..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "¡La ficha no es válida!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Los productos que este usuario ha visto más recientemente (máx. 48), en " "orden cronológico inverso." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupos" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Lista de deseos" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Los atributos pueden utilizarse para almacenar datos personalizados" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "El idioma es uno de los {LANGUAGES} con {LANGUAGE_CODE} por defecto" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"El idioma es uno de los {settings.LANGUAGES} con {settings.LANGUAGE_CODE} " +"por defecto" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Direcciones" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Cerrar los hilos seleccionados" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Abrir los hilos seleccionados" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Abrir" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Cerrado" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Usuario" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personal" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistema" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Para hilos anónimos" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Hilo de conversación" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Hilos de chat" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Proporcionar usuario o correo electrónico para hilo anónimo." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "El cesionario debe ser un usuario del personal." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Mensaje de chat" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Mensajes de chat" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Se requiere un correo electrónico válido para los chats anónimos." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "El mensaje debe tener 1..1028 caracteres." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Ya estamos buscando al operador que le responda, ¡espera!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -287,166 +292,166 @@ msgstr "" "verificar las cuentas. El modelo User está diseñado para manejar casos de " "uso específicos para una gestión de usuarios mejorada." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Correo electrónico" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Dirección de correo electrónico del usuario" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Número de teléfono" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Número de teléfono del usuario" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Nombre" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Apellido" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Imagen del perfil del usuario" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Se verifica" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Estado de verificación del usuario" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Está activo" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Deseleccione esta opción en lugar de eliminar cuentas" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Está suscrito" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Estado de suscripción del usuario al boletín" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Ficha de activación" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atributos" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Usuario" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Usuarios" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grupo" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Ficha pendiente" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Fichas pendientes" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Ficha en la lista negra" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Fichas en la lista negra" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` debe ser un diccionario" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" -msgstr "El identificador de empresa es necesario para registrarse como empresa" +msgstr "" +"El identificador de empresa es necesario para registrarse como empresa" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "correo electrónico malformado: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "No se ha encontrado ninguna cuenta activa" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Debe establecer el atributo token_class en la clase." -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Ficha en la lista negra" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Token no válido" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "No user uuid claim present in token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "El usuario no existe" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Restablecer contraseña" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logotipo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Confirmación de restablecimiento de contraseña" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hola %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Hemos recibido una solicitud para restablecer su contraseña. Por favor, " "restablezca su contraseña haciendo clic en el botón de abajo:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "restablecer contraseña" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -454,7 +459,7 @@ msgstr "" "Si el botón anterior no funciona, copie y pegue la siguiente URL\n" " en su navegador:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -462,22 +467,22 @@ msgstr "" "si usted no envió esta solicitud, ignore este\n" " correo electrónico." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Saludos cordiales,
El equipo %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Todos los derechos reservados" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activar su cuenta" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -486,7 +491,7 @@ msgstr "" "Gracias por registrarse en %(project_name)s. Por favor, active su cuenta " "haciendo clic en el botón de abajo:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -494,22 +499,22 @@ msgstr "" "Activar\n" " cuenta" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activar cuenta" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Restablecer contraseña" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -517,37 +522,37 @@ msgstr "" "Formato de número de teléfono no válido. El número debe introducirse con el " "formato \"+999999999\". Se permiten hasta 15 dígitos." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Representa una vista para obtener un par de tokens de acceso y actualización " -"y los datos del usuario. Esta vista gestiona el proceso de autenticación " +"Representa una vista para obtener un par de tokens de acceso y actualización" +" y los datos del usuario. Esta vista gestiona el proceso de autenticación " "basada en tokens donde los clientes pueden obtener un par de tokens JWT " "(acceso y actualización) utilizando las credenciales proporcionadas. Se " "construye sobre una vista de token base y asegura una limitación de tasa " "adecuada para proteger contra ataques de fuerza bruta." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Maneja la actualización de tokens con fines de autenticación. Esta clase se " "utiliza para proporcionar funcionalidad a las operaciones de actualización " "de tokens como parte de un sistema de autenticación. Garantiza que los " "clientes puedan solicitar un token actualizado dentro de los límites de " -"velocidad definidos. La vista depende del serializador asociado para validar " -"las entradas de actualización de tokens y producir las salidas apropiadas." +"velocidad definidos. La vista depende del serializador asociado para validar" +" las entradas de actualización de tokens y producir las salidas apropiadas." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -555,30 +560,22 @@ msgstr "" "Representa una vista para verificar tokens web JSON (JWT) utilizando una " "lógica específica de serialización y validación." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementación del conjunto de vistas de usuario.\n" -"Proporciona un conjunto de acciones que gestionan los datos relacionados con " -"el usuario, como la creación, recuperación, actualización, eliminación y " -"acciones personalizadas, incluyendo el restablecimiento de la contraseña, la " -"carga de avatares, la activación de cuentas y la fusión de elementos vistos " -"recientemente. Esta clase extiende los mixins y GenericViewSet para un " -"manejo robusto de la API." +"Proporciona un conjunto de acciones que gestionan los datos relacionados con el usuario, como la creación, recuperación, actualización, eliminación y acciones personalizadas, incluyendo el restablecimiento de la contraseña, la carga de avatares, la activación de cuentas y la fusión de elementos vistos recientemente. Esta clase extiende los mixins y GenericViewSet para un manejo robusto de la API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/blog/locale/fa_IR/LC_MESSAGES/django.mo b/engine/authv/locale/fa_IR/LC_MESSAGES/django.mo similarity index 100% rename from blog/locale/fa_IR/LC_MESSAGES/django.mo rename to engine/authv/locale/fa_IR/LC_MESSAGES/django.mo diff --git a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/engine/authv/locale/fa_IR/LC_MESSAGES/django.po similarity index 58% rename from vibes_auth/locale/hr_HR/LC_MESSAGES/django.po rename to engine/authv/locale/fa_IR/LC_MESSAGES/django.po index d1078724..e9881d71 100644 --- a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/authv/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,257 +16,260 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -277,225 +280,225 @@ msgid "" "for enhanced user management." msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -504,7 +507,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -513,17 +516,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -532,10 +535,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/engine/authv/locale/fr_FR/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo rename to engine/authv/locale/fr_FR/LC_MESSAGES/django.mo index 54c6cff8c09c5cc277a1df8bf6635506e451f103..a7b420bf66520f3bdb3254d77d9f1ee74577b5fa 100644 GIT binary patch delta 1484 zcmYM!dq~q!6u|K_%juYpd~MEGTAG=rHs?%{!b%FvN-@HMATV+yCC#D-Hu_`rhpq<} zX_8=21pd)t5ClRGDUu@XAyh(?7Q;Uh`bUT&`ksCR$JpoIyZgKM+;h+NpmVx2m=)z~ z5|J*Ohy|bHQk=v@oWgYcj;ru5mSBNhWHmNp5}v`87{C;~kG1#=qcMs_%ovM0KM|8L zFI{|+NyEi}x+^lF1KCT?q7|=UJPutQjff)l@DFti+;R> zdoeA;XDrm2VMOFdjl3T<(y54H)Qx^2hmw3&(@fQ(p12P6M7vR+Ymf9#BQZ$;3-AtV zMqZ%?`qoF|0*$X2i=HeawZ~9XK8V@)6x&Q9U$BaPeU5QO-MEZ?0CnRb)IfsBTgLd% z)X!i(&fy2vNmwqjj=nFPD^fwjk!MV7M18OYThNQ=qeNcdPm{<_RtYd(M|4^<6R3fI zM7^pR{KmX_tf&8uLeY&JMIw#ZfSQQ`q-K2bh=!AaSzLiO@~n4Tjk>@NEX1p*CmTi0 z$OP)fKTvCB0WBC`OdX*e^|^M`3|&Su4r2`7MK}9P@P9)jjA?w4Ly7BxE^NjI+=xR+ z_T@9`o&H7*Aa$*=U^eOo1(ALU*3fsMK6e!RuopWpx0EYne+kg&!JDX&7L^&*UW0m~ zZD_@2Jb?RAi{~+F5l*0H<~?e)hf%N8R4%d^E3q0+A@wUE+={PJ>rZT4ke<|udLlpS z#urf+?nlkc2)ghIR^kFuM^fT6igi0`pkCBKe5jcmK%Eyv&B!Eb2CNn2UyJP|;Zk36 z9Vr8Oi28>zi^nmBT@Pb7>cVrFf=h^^3GJu{@n9PIaRUw_hm=pKfmz)~2JA?EiqpNv zD3VqNav3;>6s+9BP52VyFoEA(GG^ipEX5=oM-6xynJUrijbBe~$P<%d(om#WhqV!T z?F(IrtumSFLgSXPIE(jSSC{9=A#Z74ug$U83*EMDF`J#`&dO3(Xg=#i^5R#0ZDoav Ky--itNbEm&m9WGB delta 1465 zcmXxkTS!z<6oBD1UPdRK)G@DVjb=`1Ip#eJZBp@}vWuEw5=s}G@SN1MF~ex70x zX^j@K;9U&BaSX#rjK!Cjia&52M#hM&!7UhpZd`?(7>PGK!cZK*WjKUs_y9NJcU+1oaYi87$VbZg()kSY=Kn9SHc=^)Q zPhkqa#y8CK8#mDROxs1WX_%9YfrZFDabXqKW4E8k2+oxDB;_(lq1vN9>n1k0b7hm8?49YT!)qxsl1!^F*sF`d<9oK`Jkzv#f%w~~)Ew)O+rM~1i zQU=nG`hzl#ZTJz7;XYQ^i63DkzQ^4-kGhdkqS8R?u?X9dy~zk_V6&(hm`CbUta&v? zk>uow*tt-L6s&aNR=kCw_zi8ifLGDNI~ajCQ3D=DZpjDK4aNA}L6N4Y{WR10*H`}k zpUZbSINxLv-xJGZXxw&JMR~QWysWaze!|__Xg_rLNJCpwtG&~AFS^tmn4OWCk?Auf Pw%htnIUPQ)b2#`f?Wd@A diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/engine/authv/locale/fr_FR/LC_MESSAGES/django.po similarity index 71% rename from vibes_auth/locale/fr_FR/LC_MESSAGES/django.po rename to engine/authv/locale/fr_FR/LC_MESSAGES/django.po index 779642aa..66287a92 100644 --- a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/authv/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,164 +13,165 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Commande" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Commandes" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informations personnelles" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Informations complémentaires" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Authentification" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obtenir une paire de jetons" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" "Obtenir une paire de jetons (rafraîchissement et accès) pour " "l'authentification." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Rafraîchir une paire de jetons" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Rafraîchir une paire de jetons (rafraîchir et accéder)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Vérifier un jeton" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Vérifier un jeton (rafraîchissement ou accès)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Le jeton est valide" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Créer un nouvel utilisateur" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Récupérer les données d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Mettre à jour les coordonnées d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Supprimer un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Réinitialiser le mot de passe d'un utilisateur en envoyant un courriel de " "réinitialisation du mot de passe" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Gérer le téléchargement d'un avatar pour un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Activer le compte d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Le lien d'activation n'est pas valide ou le compte est déjà activé" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Fusionner les produits récemment consultés stockés par le client" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "L'uuid b64-encodé de l'utilisateur qui nous a recommandé le nouvel " "utilisateur." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Le mot de passe est trop faible" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Courriel malformé" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numéro de téléphone malformé : {phone_number} !" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Le compte a déjà été activé..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" @@ -178,106 +179,108 @@ msgstr "" "Les produits que cet utilisateur a consultés le plus récemment (max 48), par " "ordre chronologique inverse." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Groupes" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Liste de souhaits" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" "Les attributs peuvent être utilisés pour stocker des données personnalisées." -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"La langue est l'une des {LANGUAGES} avec la valeur par défaut " -"{LANGUAGE_CODE}." +"La langue est l'une des {settings.LANGUAGES} avec la valeur par défaut " +"{settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresses" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Fermer les fils sélectionnés" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Ouvrir les fils sélectionnés" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Ouvrir" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Fermé" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Utilisateur" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personnel" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Système" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Pour les fils de discussion anonymes" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Fil de discussion" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Fils de discussion" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" "Indiquer l'utilisateur ou l'adresse électronique pour le fil de discussion " "anonyme." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Le destinataire doit être un utilisateur du personnel." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Message de chat" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Messages de chat" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Une adresse électronique valide est requise pour les chats anonymes." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Le message doit comporter de 1 à 1028 caractères." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Nous sommes en train de chercher l'opérateur pour vous répondre, attendez !" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -297,154 +300,154 @@ msgstr "" "modèle User est conçu pour gérer des cas d'utilisation spécifiques en vue " "d'une gestion améliorée des utilisateurs." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Courriel" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Adresse électronique de l'utilisateur" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Numéro de téléphone" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Numéro de téléphone de l'utilisateur" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Prénom" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Nom de famille" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Image du profil de l'utilisateur" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Est vérifié" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Statut de vérification de l'utilisateur" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Est actif" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Désélectionner cette option au lieu de supprimer des comptes" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Est abonné" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Statut de l'abonnement à la lettre d'information de l'utilisateur" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Jeton d'activation" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attributs" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Utilisateur" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Utilisateurs" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Groupe" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Jeton exceptionnel" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Jetons en circulation" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Jeton sur liste noire" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Jetons sur liste noire" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` doit être un dictionnaire" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "L'identifiant de l'entreprise est requis lors de l'enregistrement de " "l'entreprise." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "email malformé : {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Aucun compte actif trouvé" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "L'attribut token_class doit être défini sur la classe !" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token sur liste noire" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Jeton non valide" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "L'utilisateur n'existe pas" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Réinitialiser votre mot de passe" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Confirmation de la réinitialisation du mot de passe" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Bonjour %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" @@ -454,12 +457,12 @@ msgstr "" "Veuillez réinitialiser votre mot de passe en cliquant sur le bouton ci-" "dessous :" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "réinitialiser le mot de passe" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -468,7 +471,7 @@ msgstr "" "suivante\n" " suivante dans votre navigateur web :" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -476,22 +479,22 @@ msgstr "" "si vous n'avez pas envoyé cette demande, veuillez ignorer cet e-mail.\n" " courriel." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Meilleures salutations,
L'équipe %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tous droits réservés" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activer votre compte" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -500,7 +503,7 @@ msgstr "" "Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte " "en cliquant sur le bouton ci-dessous :" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -508,22 +511,22 @@ msgstr "" "Activer\n" " compte" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activer le compte" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Réinitialiser le mot de passe" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -531,7 +534,7 @@ msgstr "" "Format de numéro de téléphone non valide. Le numéro doit être saisi au " "format : \"+999999999\". Un maximum de 15 chiffres est autorisé." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -547,7 +550,7 @@ msgstr "" "vue de jeton de base et assure une limitation de taux appropriée pour se " "protéger contre les attaques par force brute." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -563,7 +566,7 @@ msgstr "" "valider les entrées de rafraîchissement de jeton et produire les sorties " "appropriées." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -571,11 +574,11 @@ msgstr "" "Représente une vue permettant de vérifier les jetons Web JSON (JWT) à l'aide " "d'une logique de sérialisation et de validation spécifique." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -591,10 +594,10 @@ msgstr "" "éléments récemment consultés. Cette classe étend les mixins et " "GenericViewSet pour une gestion robuste de l'API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Vous avez déjà activé le compte..." diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo b/engine/authv/locale/he_IL/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/he_IL/LC_MESSAGES/django.mo rename to engine/authv/locale/he_IL/LC_MESSAGES/django.mo index 45f37b6861eda71abb3c69bd5fd0744cb3f8808c..a8f728e31e5906b9290f280be8d7b235a9f132c6 100644 GIT binary patch delta 1484 zcmYMzYe-Z<6u|Mbo2|QMiL1Ll(%Ln(HOuGvD7S}@7(`%!m06V0ONg@8kRG@MnFWfN zNP!TDB$1HG_8}q=lme~D5{c+b1(uNn^+kfH{>OVmk^7sOJ9p;HnX~sBCL124SVKES zq|q(nz-JhN6BvV2n26JuiGOe{W+aICa2LknMO=mL7>7d`z^Awvtt?_gJL>!xbfPy= zLb9BOp8>VXoNyA^OPX;BcH>g)#b_MFczl9u@HMW--?$8mlZ-$rkbkM+q3Z{+1v_vb zx{^c2LJi4AL@lV1-$IRa%Jd8BM!%3lNjj@(rUIxZE=N64HR^XK%>D%=CTYhE>_^SW z3)Dd0glM$V_=t9_Pcc$^7B%HPn2IBK#3J$m3+Y#^Fg84onu#{E-)r_C;yT91P}iM9 zy&_pD@`-iQv6yZs(krr=#wOH>&6tg?xE;e7vWoo0IScJ{kxs^&h)(A_R*OWT(=-)_ zndif8jL-N)vM`@VCDx)ItPgc*8KMWH$=XnMix(rvzC-$0FPl2_MzV8J9Obs zbfBF)YjHYJH}YUKW@9OqqF&({yn!89g=skyCHqT|hNiRw_2k}MW1#?QiYra4@DTkP zjKRm|_&93uO(JC^pOHPpnkTXw^RNtCk(A3QZoz2`Y05M6jZ{~lo}df$1h-L(W&riW zSLneXsMYK&5TPEW6g6|zsNY?}SiFvUwLR#;LDb@%!2K9eNd7gIb&OJw(u5woiJFN= zco`@099H{{_s>zko5h1@EiwW;j2g%l+=v6{!LO(Xi=yQ9z%JC9@)z$Bp-|-j0~EHj zU>e>-y}OsF#bPTlPU6CD`dOHO!${f4Thx><;v+BShwCHbEG}B}uk|PY|F1UOX)m!@ z%EM!h(P&5TXk%mjspG+%t~PhlLN9#Bz13zb$SWwy@rS>s1f2`7y6SQ>7JA{Uxp(dV E07p=+2LJ#7 delta 1465 zcmXxjOGuPa6u|K_zVb0T=%lHseVXQ|Xi;ZV;CmKn1N&?Un%9G>o;H@_F^^q z#=6agYGcia+EF9#M-61o>jLUV-;m%Xg4Hxr>8K}mqMm3E>U)*melrr2bYlwMM9s)! z)Iew5G%nG2hk;lXXQs9uHRV?@9;fi6MdU4J)6YsUH*7-9M3=XJ&D+0=+ZdllUH1#> z6)odu)(PJvl1JbD(-6@b$VfCNp2iIN9e4mo(e1 zxen$ZG? z^~G^C@C|A;FC+CR_AE1VF4Xs`FdQ3Eul5`oconsHC$I*WvdF)tvXD^}BSVX@c4SbGzu&<~GUO}xXTV53fMx%iL0);L0 zn1p?(cQ=M%_zCT}g2U*SZx-V%q-^9NYRW&N24eNJtg~ApkJHqj^)LVbQ{ov6%(qy? z^EznG8gsCuy!2>E>As3y<9tg;v(b2}siCvA!|3+RMC}dm&(3sZx;&Qn_K2ZgXNqUS HITrXAF\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,257 +13,261 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "מאזניים" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "הזמנה" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "הזמנות" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "מידע אישי" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "הרשאות" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "תאריכים חשובים" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "מידע נוסף" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "אימות" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "השג זוג אסימונים" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "השג זוג אסימונים (רענון וגישה) לצורך אימות." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "רענן זוג אסימונים" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "רענן זוג אסימונים (רענן וגש)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "אמת אסימון" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "אמת אסימון (רענן או גש)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "האסימון תקף" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "צור משתמש חדש" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "איתור פרטי המשתמש" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "עדכון פרטי המשתמש" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "מחיקת משתמש" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "אפס את סיסמת המשתמש על ידי שליחת דוא\"ל לאיפוס סיסמה" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "טיפול בהעלאת אווטאר עבור משתמש" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "אשר את איפוס הסיסמה של המשתמש" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "הסיסמאות אינן תואמות" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "הפעל חשבון משתמש" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "קישור ההפעלה אינו תקף או שהחשבון כבר הופעל" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "מיזוג מוצרים שנצפו לאחרונה המאוחסנים אצל הלקוח" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ה-uuid המקודד ב-b64 של המשתמש שהפנה אלינו את המשתמש החדש." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "הסיסמה חלשה מדי" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "דוא\"ל פגום" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "מספר טלפון שגוי: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "החשבון כבר הופעל..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "המוצרים שהמשתמש צפה בהם לאחרונה (מקסימום 48), בסדר כרונולוגי הפוך." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "קבוצות" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "רשימת משאלות" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "אוואטר" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "ניתן להשתמש בתכונות לאחסון נתונים מותאמים אישית" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "השפה היא אחת ה-{LANGUAGES} עם ברירת מחדל {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"השפה היא אחת ה-{settings.LANGUAGES} עם ברירת מחדל {settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "כתובות" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "סגור את השרשורים הנבחרים" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "פתח את השרשורים הנבחרים" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "פתוח" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "סגור" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "משתמש" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "צוות" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "מערכת" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "לשרשורים אנונימיים" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "שרשור צ'אט" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "שרשורי צ'אט" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "ציין שם משתמש או דוא\"ל עבור שרשור אנונימי." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "המקבל חייב להיות משתמש צוות." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "הודעת צ'אט" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "הודעות צ'אט" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "נדרש כתובת דוא\"ל תקפה לצ'אטים אנונימיים." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "ההודעה חייבת להכיל בין 1 ל-1028 תווים." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "אנו מחפשים את המפעיל שיענה לך, אנא המתן!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -273,172 +277,171 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"מייצג ישות משתמש עם שדות ושיטות מותאמים אישית לפונקציונליות מורחבת. מחלקה זו " -"מרחיבה את המודל AbstractUser ומשלבת תכונות נוספות כגון כניסה מותאמת אישית " -"באמצעות דוא\"ל, שיטות אימות, מצב מנוי, אימות ואחסון תכונות. היא מספקת גם כלי " -"עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " +"מייצג ישות משתמש עם שדות ושיטות מותאמים אישית לפונקציונליות מורחבת. מחלקה זו" +" מרחיבה את המודל AbstractUser ומשלבת תכונות נוספות כגון כניסה מותאמת אישית " +"באמצעות דוא\"ל, שיטות אימות, מצב מנוי, אימות ואחסון תכונות. היא מספקת גם כלי" +" עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " "User נועד לטפל במקרי שימוש ספציפיים לניהול משתמשים משופר." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "דוא\"ל" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "כתובת הדוא\"ל של המשתמש" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "מספר טלפון" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "מספר הטלפון של המשתמש" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "שם פרטי" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "שם משפחה" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "תמונת פרופיל המשתמש" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "מאומת" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "סטטוס אימות המשתמש" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "פעיל" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "בטל את הבחירה במקום למחוק חשבונות" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "מנוי" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "סטטוס המנוי לניוזלטר של המשתמש" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "אסימון הפעלה" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "תכונות" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "משתמש" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "משתמשים" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "קבוצה" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "אסימון יוצא מן הכלל" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "אסימונים מצטיינים" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "אסימון ברשימה השחורה" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "אסימונים ברשימה השחורה" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` חייב להיות מילון" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "יש צורך במזהה עסקי בעת רישום כעסק" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "דוא\"ל פגום: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "לא נמצא חשבון פעיל" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "יש להגדיר את התכונה token_class בכיתה!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "אסימון ברשימה השחורה" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "אסימון לא חוקי" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "אין תביעה uuid של משתמש נוכחת באסימון" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "המשתמש אינו קיים" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "אפס את הסיסמה שלך" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "לוגו" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "אישור איפוס סיסמה" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "שלום %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" -"קיבלנו בקשה לאיפוס הסיסמה שלך. אנא איפס את הסיסמה שלך על ידי לחיצה על הכפתור " -"שלהלן:" +"קיבלנו בקשה לאיפוס הסיסמה שלך. אנא איפס את הסיסמה שלך על ידי לחיצה על הכפתור" +" שלהלן:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "איפוס סיסמה" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -446,28 +449,28 @@ msgstr "" "אם הכפתור שלמעלה אינו פועל, אנא העתק והדבק את כתובת ה-URL הבאה בדפדפן " "האינטרנט שלך:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "אם לא שלחת בקשה זו, אנא התעלם מהודעת דוא\"ל זו." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "כל הזכויות שמורות" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "הפעל את חשבונך" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -476,28 +479,28 @@ msgstr "" "תודה שנרשמת ל-%(project_name)s. אנא הפעל את חשבונך על ידי לחיצה על הכפתור " "שלהלן:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "הפעל חשבון" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | הפעל חשבון" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | איפוס סיסמה" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -505,10 +508,10 @@ msgstr "" "פורמט מספר טלפון לא חוקי. יש להזין את המספר בפורמט: \"+999999999\". מותר " "להזין עד 15 ספרות." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -518,20 +521,20 @@ msgstr "" "(גישה ורענון) באמצעות אישורים שסופקו. היא בנויה על גבי תצוגת אסימון בסיסית " "ומבטיחה הגבלת קצב נאותה כדי להגן מפני התקפות כוח ברוט." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "מטפל ברענון אסימונים למטרות אימות. מחלקה זו משמשת לספק פונקציונליות עבור " "פעולות רענון אסימונים כחלק ממערכת אימות. היא מבטיחה שלקוחות יוכלו לבקש " "אסימון רענן בתוך מגבלות קצב מוגדרות. התצוגה מסתמכת על הסריאלייזר המשויך כדי " "לאמת קלטות רענון אסימונים ולייצר פלט מתאים." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -539,27 +542,24 @@ msgstr "" "מייצג תצוגה לאימות אסימוני JSON Web Tokens (JWT) באמצעות לוגיקת סידוריות " "ואימות ספציפית." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "יישום הגדרת תצוגת משתמש. מספק סט פעולות לניהול נתונים הקשורים למשתמש, כגון " "יצירה, אחזור, עדכונים, מחיקה ופעולות מותאמות אישית, כולל איפוס סיסמה, העלאת " "אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins " "ו-GenericViewSet לטיפול חזק ב-API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "כבר הפעלת את החשבון..." diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.mo b/engine/authv/locale/hi_IN/LC_MESSAGES/django.mo similarity index 74% rename from blog/locale/hi_IN/LC_MESSAGES/django.mo rename to engine/authv/locale/hi_IN/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/engine/authv/locale/hi_IN/LC_MESSAGES/django.po similarity index 58% rename from vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po rename to engine/authv/locale/hi_IN/LC_MESSAGES/django.po index 30e7f518..5c1eac79 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/authv/locale/hi_IN/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,257 +16,260 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -277,225 +280,225 @@ msgid "" "for enhanced user management." msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -504,7 +507,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -513,17 +516,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -532,10 +535,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/blog/locale/hr_HR/LC_MESSAGES/django.mo b/engine/authv/locale/hr_HR/LC_MESSAGES/django.mo similarity index 100% rename from blog/locale/hr_HR/LC_MESSAGES/django.mo rename to engine/authv/locale/hr_HR/LC_MESSAGES/django.mo diff --git a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/engine/authv/locale/hr_HR/LC_MESSAGES/django.po similarity index 58% rename from vibes_auth/locale/fa_IR/LC_MESSAGES/django.po rename to engine/authv/locale/hr_HR/LC_MESSAGES/django.po index d1078724..e9881d71 100644 --- a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/authv/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,257 +16,260 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -277,225 +280,225 @@ msgid "" "for enhanced user management." msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -504,7 +507,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -513,17 +516,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -532,10 +535,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo b/engine/authv/locale/id_ID/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/id_ID/LC_MESSAGES/django.mo rename to engine/authv/locale/id_ID/LC_MESSAGES/django.mo index b471d663abdc38e90ba81a42591a90553f2ae287..a3e9c99eaa71e1055ce482881561c829da432394 100644 GIT binary patch delta 1506 zcmYMzNl27o9LMqhNR3W8nweTQ1w{$z{V zR0frNA?p(hnvq!6f#dNkdhrUTVlPg@`#2Y0<6``UX}EBTlSm!%u`T@5{%v>+dvGge zN7Z&0*R7VC- ziN1+4IKkjEreKrLX>BX2*(WSvUN_z8NF?DARA){myo9R!CMM%!RAK|z z!#*EzKJ#eU?^JdXRnaq4>jzMQhA}OP>hjGxc`%=YZsGe|1_TxB=qt=h0I;E^;5Z}Ci2WDlcRG6*(Qdhs$vY%P@}vSBL9S1?|D8Zu4aZ0lbR}_#M^C->8b+Tm&WHLypl( zkyEivsN3Cvx-;ic3Ee^!5<@ROK?Qz`)fmTmEGnh{dT@WKv!EN*svF1)VUI9^L#WC( zP=+?{MOFF`gZK`W;B+pMEJt#;TGT$RsH5pl{C*Bq*v<0IPUa8zLW#UbWg17d&_kc} zU1uTg*C1<)6;_n?)Q~&*Ki=9fTcDVwv7oJC{p0>bnJ>~x_b~U@!?XD=Rs4A(9#eKEu^G6r13aklk3gNF P=7_(2bWLn^@v!?3&fKz@ delta 1465 zcmXZbNl27o9LMoz%stmJcg<q(nhoT7;JG&v#^)&-0AW`}~*ZdFR^3+Qza%{1wI+Uy3nN zIDw(~7~^po({L8o;1?{!q*PuEQ8y~{3#de%_GShJG-e<`KXGEQ5998o;wtrw<9^39$byrP#u{V^+R%;KVT0Vf;IEF`T#=OEJ=A|pGjllIKsKh35h<#q* z2Il@IhgI1Cs-g*0>nBlx-e6paG5_!q55{rOC;9zGp0z%fvUIj~Q~~MeWt|gCn2%7! zdVG%C@jK?=#6j6$z$tX$BC5j$9J~tJiGJPYGYs4~j0!l5YUNv0#qUuG{X~w>L~}7X6;pz` z-3_Qa<3%MjfGXq)#^N1R;Con(Gq?|J#q?hf?k~0$cu=kCLtY4T8+|y1jaW<>+ISFE z=}oM`aa4l8gT`>7$kpVa_SuU%8V_on7gbn)NxhZ%4SrA}4^WxTpj!A5^TWTsS{ka3fk>xg<3Cu)I$E5FZ*VfdzYjzyy sb)5G2+8sxawY8q=@Hu({k5a0`!^(TlgXTKPMug`v3p{ diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/engine/authv/locale/id_ID/LC_MESSAGES/django.po similarity index 69% rename from vibes_auth/locale/id_ID/LC_MESSAGES/django.po rename to engine/authv/locale/id_ID/LC_MESSAGES/django.po index 4ba94c52..8c8e42e7 100644 --- a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/authv/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,161 +13,162 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Keseimbangan" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Pesan" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Pesanan" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informasi Pribadi" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Izin" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Tanggal-tanggal penting" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Informasi Tambahan" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Otentikasi" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Dapatkan pasangan token" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Dapatkan pasangan token (penyegaran dan akses) untuk autentikasi." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Menyegarkan pasangan token" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Menyegarkan pasangan token (menyegarkan dan mengakses)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verifikasi token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verifikasi token (penyegaran atau akses)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Token tersebut valid" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Membuat pengguna baru" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Mengambil detail pengguna" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Memperbarui detail pengguna" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Menghapus pengguna" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Atur ulang kata sandi pengguna dengan mengirim email pengaturan ulang kata " "sandi" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Menangani unggahan avatar untuk pengguna" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Kata sandi tidak cocok" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Mengaktifkan akun pengguna" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Tautan aktivasi tidak valid atau akun sudah diaktifkan" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Menggabungkan produk yang baru saja dilihat yang disimpan klien" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "UID pengguna yang dikodekan b64 yang merujuk pengguna baru kepada kami." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Kata sandi terlalu lemah" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Email yang salah" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Nomor telepon rusak: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Akun sudah diaktifkan..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token tidak valid!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" @@ -175,101 +176,103 @@ msgstr "" "Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan " "kronologis terbalik." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grup" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Daftar keinginan" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Atribut dapat digunakan untuk menyimpan data khusus" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Bahasa adalah salah satu dari {LANGUAGES} dengan default {LANGUAGE_CODE}" +"Bahasa adalah salah satu dari {settings.LANGUAGES} dengan default {settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Alamat" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Menutup utas yang dipilih" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Buka utas yang dipilih" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Buka" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Ditutup" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Pengguna" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Staf" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistem" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Untuk utas anonim" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Utas obrolan" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Utas obrolan" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Berikan pengguna atau email untuk utas anonim." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Penerima tugas haruslah seorang staf pengguna." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Pesan obrolan" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Pesan obrolan" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Email yang valid diperlukan untuk obrolan anonim." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Pesan harus terdiri dari 1..1028 karakter." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Kami sedang mencari operator untuk menjawab Anda, tunggu sebentar!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -288,152 +291,152 @@ msgstr "" "untuk menangani kasus penggunaan tertentu untuk meningkatkan manajemen " "pengguna." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Email" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Alamat email pengguna" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Nomor Telepon" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Nomor telepon pengguna" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Nama depan" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Nama belakang" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Gambar profil pengguna" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Sudah diverifikasi" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Status verifikasi pengguna" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Aktif" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Batalkan pilihan ini alih-alih menghapus akun" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Sudah berlangganan" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status berlangganan buletin pengguna" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Token aktivasi" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atribut" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Pengguna" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Pengguna" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Kelompok" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Token yang luar biasa" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Token yang beredar" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token yang masuk daftar hitam" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Token yang masuk daftar hitam" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "Atribut `atribut` harus berupa sebuah kamus" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Pengenal bisnis diperlukan saat mendaftar sebagai bisnis" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "email rusak: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Tidak ditemukan akun aktif" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Harus menetapkan atribut token_class pada kelas!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Daftar hitam token" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Token tidak valid" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Tidak ada klaim uuid pengguna yang ada dalam token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Pengguna tidak ada" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Atur ulang kata sandi Anda" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Konfirmasi pengaturan ulang kata sandi" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Halo %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" @@ -442,12 +445,12 @@ msgstr "" "Kami telah menerima permintaan untuk mengatur ulang kata sandi Anda. Silakan " "atur ulang kata sandi Anda dengan mengeklik tombol di bawah ini:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "setel ulang kata sandi" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -456,7 +459,7 @@ msgstr "" "berikut\n" " ke dalam peramban web Anda:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -464,22 +467,22 @@ msgstr "" "jika Anda tidak mengirimkan permintaan ini, harap abaikan\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Salam hormat, Tim %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Semua hak cipta dilindungi undang-undang" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktifkan akun Anda" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -488,7 +491,7 @@ msgstr "" "Terima kasih telah mendaftar untuk %(project_name)s. Silakan aktifkan akun " "Anda dengan mengklik tombol di bawah ini:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -496,22 +499,22 @@ msgstr "" "Aktifkan\n" " akun" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktifkan Akun" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Atur Ulang Kata Sandi" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -519,7 +522,7 @@ msgstr "" "Format nomor telepon tidak valid. Nomor harus dimasukkan dalam format: " "\"+999999999\". Maksimal 15 digit." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -534,7 +537,7 @@ msgstr "" "tampilan token dasar dan memastikan pembatasan laju yang tepat untuk " "melindungi dari serangan brute force." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -549,7 +552,7 @@ msgstr "" "bergantung pada serializer terkait untuk memvalidasi input penyegaran token " "dan menghasilkan output yang sesuai." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -557,11 +560,11 @@ msgstr "" "Merupakan tampilan untuk memverifikasi JSON Web Token (JWT) menggunakan " "serialisasi dan logika validasi tertentu." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Token tidak valid" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -576,10 +579,10 @@ msgstr "" "penggabungan item yang baru dilihat. Kelas ini memperluas mixin dan " "GenericViewSet untuk penanganan API yang kuat." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Anda telah mengaktifkan akun..." diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/engine/authv/locale/it_IT/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/it_IT/LC_MESSAGES/django.mo rename to engine/authv/locale/it_IT/LC_MESSAGES/django.mo index b447ca04761d92f86f174c023dbe1a71f407ddd9..af8dba85a6a1a47f50ce7fd2d88fbe784bcb3003 100644 GIT binary patch delta 1484 zcmYMze@IhN6u|K_N!`+%=`^)fnm;Pj1ocQFzlpbbYb6W`)CoX03EN;Cp-B9~Ni)A?J_gFRS- zaY=4tqO(axL>|=0Z=gmx8FUJDp})wcB#qhhq)JeCT#CA*L#Xea4EEcQn4}xiaS-)H z-k=8h&P}6}##c0BgWWjVX4E6Ug=_FR)|o`UU;%yST4SL$jHcg(nzGwSjN(O2$t%>O zpAJ6%jb7%7S|_rF=kAeYqcM#-(4InGFqK;#Ix#au&pxc4=$kQ@^ZFO?R{vW-;WXK z#iKZkdgO@?W8oCk_cBmVq8PcPlG}E?7<2?FGnvDDv{3+V>PaeS?8SQ29Xtv;jJne? z)ReqOVw5Rl4zaO4eZLH~NNdrIF4PotqP}+rsXOr@mjt*~p(&U1*UzaY*Z8cOaXtMj zn2cULhZ9(jJ1G>Mco22sr&xvo)ScVdmj3U+5_F=@*MYjR0gS~V)WFB`4;ztv=7Ao~ zJnBvo_{P|z6rsL&9JTmPV-I$q1`tzde6H!J8Qqo%(d`eBwbt56mM~UUlWH=5 zuq7rAV{9^wt$(mJv#9Zp8M17e*<|zm^`7?b{XEZm-sgFK&-44e^;FMP4Mli3w}?nx zu!tG&<9vLI{y2gmIEJw}g$Za`DzX|gFc2#-1{=|WS1}!3=!rkk3xA`&{||%EKSZ1o zP9vIC)Xk_b6eDX%4f^6KT!`)HhgWbh-o$tu#*O$57vYLfBM>`sNe(xizYJTk35#)F znA4bOUzicman#69qXshK_ATl{Uy$G>h}ra{;!$^;jJl&t)Ny;={R$)|X~dP-g?b{7 zQ3HMEq|rv>HTqydgmJX{QIGsAM&b}2G>N>zb@WrBjD?P10R0Bkl$}FjlwQ=7JU~7A zarg62c$<0tVlvO216HFkj{2f`xd@j8a7)1yjQ0>J$6=F52eY>Dd?(w{ni)fHoJ1Y} z8SnDm6mFv5zsi_@0<-A*Q8-rIg-qp?V>EQ3OSlY2QIGN~=He_emt@Bosj5b;jb_vU zx>0j{&E0>3+vvYQ9T!O6^r%x&1Kf%WFdq|GUkc|M6b5Q8@1f@GCGNnFxB-*b7z_n}F9@GW;-Cjo<{adIhnZ$bhgH?ExPsyM4W zx|3hX<|L4BO$Rzq|Ka3fJC>pb@B^t&c3`|8hnnjmSEaYbw4{V4*`6yCnEP|MF8ZXJ zOyU|fkNAb=IkxBQapYw0ZnD-_)>T*!l^-rUQB!AabUh5t^76DN*^+E7Q{\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,161 +13,162 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Equilibrio" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Ordine" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Ordini" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informazioni personali" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permessi" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Date importanti" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Ulteriori informazioni" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autenticazione" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Ottenere una coppia di token" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" "Ottenere una coppia di token (aggiornamento e accesso) per l'autenticazione." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Aggiornare una coppia di token" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Aggiorna una coppia di token (refresh e access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verifica di un token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verifica di un token (aggiornamento o accesso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Il token è valido" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Creare un nuovo utente" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Recuperare i dettagli di un utente" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Aggiornare i dettagli di un utente" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Eliminare un utente" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Reimpostare la password di un utente inviando un'e-mail di reimpostazione " "della password" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Gestire il caricamento dell'avatar per un utente" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confermare la reimpostazione della password di un utente" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Le password non corrispondono" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Attivare l'account di un utente" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Il link di attivazione non è valido o l'account è già stato attivato." -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Unire i prodotti memorizzati dal cliente e visti di recente" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "La password è troppo debole" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Email malformata" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numero di telefono malformato: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "L'account è già stato attivato..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Il gettone non è valido!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" @@ -175,102 +176,104 @@ msgstr "" "I prodotti che questo utente ha visualizzato più di recente (max 48), in " "ordine cronologico inverso." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Gruppi" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Lista dei desideri" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" "Gli attributi possono essere utilizzati per memorizzare dati personalizzati" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"La lingua è una delle {LANGUAGES} con il codice predefinito {LANGUAGE_CODE}." +"La lingua è una delle {settings.LANGUAGES} con il codice predefinito {settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Indirizzi" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Chiudere le filettature selezionate" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Aprire le discussioni selezionate" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Aperto" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Chiuso" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Utente" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personale" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistema" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Per le discussioni anonime" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Filo della chat" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Filo conduttore della chat" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Fornire l'utente o l'e-mail per il thread anonimo." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Il destinatario deve essere un utente del personale." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Messaggio di chat" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Messaggi di chat" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Per le chat anonime è necessario un indirizzo e-mail valido." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Il messaggio deve essere di 1...1028 caratteri." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Stiamo già cercando l'operatore per rispondervi, restate in attesa!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -289,154 +292,154 @@ msgstr "" "degli account. Il modello User è progettato per gestire casi d'uso specifici " "per una migliore gestione degli utenti." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Email" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Indirizzo e-mail dell'utente" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Numero di telefono" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Numero di telefono dell'utente" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Nome" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Cognome" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Immagine del profilo utente" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "È verificato" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Stato di verifica dell'utente" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "È attivo" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Deselezionare questa opzione invece di eliminare gli account" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "È iscritto" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Stato di iscrizione alla newsletter dell'utente" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Token di attivazione" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attributi" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Utente" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Utenti" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Gruppo" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Gettone eccezionale" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Gettoni in sospeso" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token in lista nera" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Gettoni nella lista nera" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributi` deve essere un dizionario" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "L'identificativo dell'azienda è necessario quando ci si registra come " "azienda." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "email malformata: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Nessun conto attivo trovato" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Deve essere impostato l'attributo token_class sulla classe!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token nella lista nera" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Token non valido" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Nessuna richiesta di uuid utente presente nel token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "L'utente non esiste" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Reimpostare la password" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Conferma della reimpostazione della password" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" @@ -445,12 +448,12 @@ msgstr "" "Abbiamo ricevuto una richiesta di reimpostazione della password. La " "preghiamo di reimpostare la password facendo clic sul pulsante sottostante:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "reimpostare la password" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -458,7 +461,7 @@ msgstr "" "Se il pulsante qui sopra non funziona, copiate e incollate il seguente URL\n" " nel browser web:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -466,22 +469,22 @@ msgstr "" "se non avete inviato questa richiesta, vi preghiamo di ignorare questa\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tutti i diritti riservati" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Attivare l'account" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -490,7 +493,7 @@ msgstr "" "Grazie per esservi iscritti a %(project_name)s. Attivate il vostro account " "facendo clic sul pulsante sottostante:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -498,22 +501,22 @@ msgstr "" "Attivare\n" " conto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Attiva l'account" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reimpostare la password" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -521,7 +524,7 @@ msgstr "" "Formato del numero di telefono non valido. Il numero deve essere inserito " "nel formato: \"+999999999\". Sono consentite fino a 15 cifre." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -537,7 +540,7 @@ msgstr "" "un'adeguata limitazione della velocità per proteggere dagli attacchi brute " "force." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -552,7 +555,7 @@ msgstr "" "vista si affida al serializzatore associato per convalidare gli input di " "aggiornamento dei token e produrre output appropriati." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -560,11 +563,11 @@ msgstr "" "Rappresenta una vista per la verifica dei JSON Web Token (JWT), utilizzando " "una specifica logica di serializzazione e validazione." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -580,10 +583,10 @@ msgstr "" "elementi visti di recente. Questa classe estende i mixin e GenericViewSet " "per una gestione robusta delle API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/engine/authv/locale/ja_JP/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo rename to engine/authv/locale/ja_JP/LC_MESSAGES/django.mo index 617a837784b89bd66b91a2af828decb2c0f5fb2f..36df94d10cd5cfe0a9c513a95ed8cab96fb80aed 100644 GIT binary patch delta 1485 zcmYM!TS$~a6u|MbR@*LFmU-ROvb6H9>v~NsOQR@A4YAB1!p!YPq(~UFPvV10gaw%x z6<8R=Dhoj%M2V7RkcmVWs2(JU@NFTXr2la~P(Hrj%m>+8bsYD(*&P(TS!4ABE^%&{$ znTamDOhg^1k>5d$bk_1G>Ou?1rX-2kG*cz0J1$4vQ7!7YW~<(g#3VhKjE_(=GKCuG z2Oot_3O~?+-Z+!mE2t^&$9Q~&jW&_*SV_Gy!R)BZ@-gZ{W0qeriFy$AC|#RP|5S8@ zi0sD#+I>e7Man32qNa8Nd1QuHJqGa>1FE))WaAvOcF`WS!}Nb>>9-ukX`9F-meQ|3 zMdT2E!V*j-jeGGl7O}nzQaDJ%H)M>Yq?t&ov6K2m%*PdxOFkNoDPsdiW=MM<|y{zN9xV^6!&B^p7mv(LJuxtBzEUmsYPADkNSDOKrc?>3e07Dx^MyN z*_R=wBz4Fd(vG|F30B}QB;}HoYudf&<9^5xg*tqVx`QnqV+QKP#Tbr9QTsQc9!ZB) zA4SdF7u0_LQ0G~nXN*TZx>VFVRf|nHoJan3!f0kw^HFbYE$Tm%b{xQa*nlNm*+}d| zJqkb8;9J!3358~%QanJt8MWUCYC!K$`+Y`TXQA+z*l<%eBB@RE6E{&UWWzdIIxtGZD)_^}fvUEY||ToHXZu?B%w& delta 1466 zcmXZcdq~q!6u|K_O`TxoJM|(Q0DRixNxL1EU8S{@1cZWI>sgg;+ua zN%_5Jgs0ME@8SRDVQ4BoXvI`&}9P+rhrqxJE=m z=^}}E4`<**Ou;d9;!9kN-?0$qWQZ)q)tHLSxDeZM4qnAdj9?u8z^kvhI~|Gn6W9T>#e z%&@i5o=hvFBdD35MonbQ_!>3P7bJOcu$xw@0QJNxQBSlMb=`K;KZN8Y?YId0P%H8P zHPO*9jV>C`(T+Q^tkO22mi#Pc;}Gt%i9Ewv`ri50iH;llPy-DaCorG>6zWwbkb=!&1h>l?y04jSy;SBgjWa`3m9`_OYNUPsD?h?ApzE>=J8!kFno)8(-K&hOvry zXO@X? z6S$jx7kcrN8F#L**5w!rv6}c&9&LymM?Lun@{xCZX{i(3R_2?KTat6e8>ppyjGD+K zCgD5dXVeq_LcI#lN|86%fOm0)hxNpl_cSixH%!B}B2!w_0R5;x&q3UQ!x)Rn98Uu~ zQ19M_+>&^a7}9_>*ogrgM@lX;eb#sY!@LhUMMF2fj(UQ>MtiZfaT+=pccaetqh3jq z>0d^z+%W3Ax2XGkGyXxny0{YSO?mJj{q7R#uN(ekKuu-WXsJ;Dp)}wCw&5iTKaK+ZCeb+{IF-g(r7ZlTV*j~eGyS)+BrX*1xUKDwY3xecjDU3dyL za4%lLo9IM;1rHE|NRBdydgmW2B8L+kwzQqJdAHHuJVgKekzRYL%_fnF#IYpTM*rrz y27g^`eMj!G=Fp+s{Ra;2J=zk=ZI6tk2jb&=Zjaj&v1PxUd+9?_aU|2bJn=te(Wr0$ diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/engine/authv/locale/ja_JP/LC_MESSAGES/django.po similarity index 55% rename from vibes_auth/locale/ja_JP/LC_MESSAGES/django.po rename to engine/authv/locale/ja_JP/LC_MESSAGES/django.po index 5b9c768c..1f383a01 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/authv/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,259 +13,260 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "バランス" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "オーダー" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "受注状況" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "個人情報" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "アクセス許可" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "重要な日程" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "追加情報" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "認証" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "トークン・ペアの取得" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "認証用のトークンペア(リフレッシュとアクセス)を取得する。" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "トークン・ペアのリフレッシュ" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "トークン・ペアをリフレッシュする(リフレッシュとアクセス)。" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "トークンの検証" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "トークンを確認する(リフレッシュまたはアクセス)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "トークンは有効です" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "新規ユーザーの作成" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "ユーザーの詳細を取得する" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "ユーザー情報の更新" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "ユーザーを削除する" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "パスワード再設定メールを送信して、ユーザーのパスワードを再設定する。" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "ユーザーのアバターアップロードを処理する" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "ユーザーのパスワード・リセットを確認する" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "パスワードが一致しない" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "ユーザーアカウントの有効化" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" -msgstr "" -"アクティベーションリンクが無効であるか、アカウントがすでにアクティベーション" -"されています。" +msgstr "アクティベーションリンクが無効であるか、アカウントがすでにアクティベーションされています。" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "クライアントが最近閲覧した商品をマージする" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "新規ユーザーを紹介したユーザーのb64エンコードされたuuid。" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "パスワードが弱すぎる" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "不正な電子メール" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "電話番号が不正です:{phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "アカウントはすでに有効になっています..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "トークンが無効です!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "グループ" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "ウィッシュリスト" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "アバター" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "属性は、カスタム・データを保存するために使用することができる。" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "言語は {LANGUAGES} のいずれかで、デフォルトは {LANGUAGE_CODE} です。" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "言語は {settings.LANGUAGES} のいずれかで、デフォルトは {settings.LANGUAGE_CODE} です。" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "住所" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "選択したスレッドを閉じる" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "選択したスレッドを開く" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "オープン" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "クローズド" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "ユーザー" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "スタッフ" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "システム" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "匿名スレッドの場合" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "チャットスレッド" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "チャットスレッド" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "匿名スレッドにユーザー名または電子メールを入力してください。" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "担当者はスタッフユーザーでなければなりません。" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "チャットメッセージ" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "チャットメッセージ" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "匿名チャットには有効なEメールが必要です。" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "メッセージは1〜1028文字でなければならない。" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "今、オペレーターを探しているところです!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -275,182 +276,174 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティ" -"ティを表します。このクラスは AbstractUser モデルを拡張し、カスタムメールログ" -"イン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合してい" -"ます。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証" -"するためのトークンベースのアクティベーションも提供します。Userモデルは、ユー" -"ザ管理を強化するための特定のユースケースを扱うように設計されています。" +"拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティティを表します。このクラスは AbstractUser " +"モデルを拡張し、カスタムメールログイン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合しています。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証するためのトークンベースのアクティベーションも提供します。Userモデルは、ユーザ管理を強化するための特定のユースケースを扱うように設計されています。" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "電子メール" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "ユーザーのメールアドレス" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "電話番号" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "ユーザー電話番号" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "名前" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "姓" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "ユーザープロフィール画像" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "確認済み" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "ユーザーの認証状況" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "アクティブ" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "アカウントを削除する代わりに、この選択を解除する" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "購読中" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "ユーザーのニュースレター購読状況" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "アクティベーション・トークン" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "属性" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "ユーザー" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "ユーザー" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "グループ" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "卓越したトークン" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "トークン残高" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "ブラックリストトークン" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "ブラックリストに載ったトークン" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "attributes`は辞書でなければならない。" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "事業者登録の際には、事業者識別情報が必要です。" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "不正な電子メール:{email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "アクティブなアカウントが見つかりません" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "クラスにtoken_class属性を設定する必要があります!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "トークンのブラックリスト入り" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "無効なトークン" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "トークンにユーザー uuid クレームが存在しない" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "ユーザーが存在しない" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "パスワードのリセット" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "ロゴ" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "パスワード再設定確認" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "こんにちは %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" -msgstr "" -"パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワー" -"ドをリセットしてください:" +msgstr "パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワードをリセットしてください:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "パスワードのリセット" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けて" -"ください。\n" +"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けてください。\n" " をウェブブラウザに貼り付けてください:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -458,31 +451,29 @@ msgstr "" "このリクエストを送信していない場合は、このメールを無視してください。\n" " 電子メールをお送りください。" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "無断複写・転載を禁じます。" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "アカウントの有効化" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" -msgstr "" -"%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックし" -"てアカウントを有効にしてください:" +msgstr "%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックしてアカウントを有効にしてください:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -490,87 +481,72 @@ msgstr "" "アクティベート\n" " アカウント" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | パスワードのリセット" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"電話番号の形式が無効です。電話番号は次の形式で入力してください:" -"\"+999999999\".15桁まで入力可能です。" +msgstr "電話番号の形式が無効です。電話番号は次の形式で入力してください:\"+999999999\".15桁まで入力可能です。" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"アクセストークンとリフレッシュトークンのペアとユーザーデータを取得するための" -"ビューを表します。このビューは、クライアントが提供されたクレデンシャルを使用" -"して JWT トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベー" -"スの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築さ" -"れ、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" +"アクセストークンとリフレッシュトークンのペアとユーザーデータを取得するためのビューを表します。このビューは、クライアントが提供されたクレデンシャルを使用して" +" JWT " +"トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベースの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築され、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一" -"部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このク" -"ラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要" -"求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行う" -"ために、 関連するシリアライザに依存します。" +"認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このクラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行うために、" +" 関連するシリアライザに依存します。" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " -msgstr "" -"特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証す" -"るビューを表します。" +msgstr "特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証するビューを表します。" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "ユーザービューセットの実装。\n" -"作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカ" -"ウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ" -"関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPI" -"ハンドリングのためにミキシンとGenericViewSetを拡張します。" +"作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/authv/locale/kk_KZ/LC_MESSAGES/django.mo similarity index 74% rename from blog/locale/kk_KZ/LC_MESSAGES/django.mo rename to engine/authv/locale/kk_KZ/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/engine/authv/locale/kk_KZ/LC_MESSAGES/django.po similarity index 58% rename from vibes_auth/locale/hi_IN/LC_MESSAGES/django.po rename to engine/authv/locale/kk_KZ/LC_MESSAGES/django.po index 30e7f518..5c1eac79 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/authv/locale/kk_KZ/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,257 +16,260 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" "the products this user has viewed most recently (max 48), in reverse‐" "chronological order" msgstr "" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -277,225 +280,225 @@ msgid "" "for enhanced user management." msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" "we have received a request to reset your password. please reset your " "password\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" "Represents a view for getting a pair of access and refresh tokens and user's " "data. This view manages the process of handling token-based authentication " @@ -504,7 +507,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -513,17 +516,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -532,10 +535,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo b/engine/authv/locale/ko_KR/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo rename to engine/authv/locale/ko_KR/LC_MESSAGES/django.mo index d337272852ac30983b8d29f252c3184b758e9883..4d720365bfb62a3eaded92bc36d6ece54ceac699 100644 GIT binary patch delta 1484 zcmYM!TS(MF6u{xLmaA*lYF<*)Qc_FZHnr8#q)<~zBDSJLg`!AQ61%Jr6}As16=YFn z6h8T&fe&5S-U_r#A+jjbKq0UoDuN*L!6c>M@jsx5-^}b>&YU^xlg5e0M~OlHeIn8v zE8@UmT#E0|iQ^cDUojo$(S>QNL^j}ljKmAL4%;ybA7c>?VK4@pnA=OM&vBHh|91Omt!}E<3o(bXPAlau>k+!3e1nU0x3g&rHVhgzYp8+23BKC zg5TQcRDu;z8*1ctQ6n8UenUOzFLEhKWjD=K5$cVLQEzk*bzQybpGRVnc1*)w)QpUv z20H4eahb+v48?{-E461(Q{IJ1_yUjHM5Zu@e%Tt42s~@NV!UVULt>SusHy*G`k(L( z`^?~G#{I*|A{jJhQ75LRSPQeTgnl{Z2Z>z8Nt?(358cXm7uV7GYl%{8C*7EhKIRpo zu79weHvYyv=%R46hR#{~rI&_>fe)CBp+uuM%fKouL^s|xmrVaUW>A09NrSVcACvLB(UE1okqsXwSAb^cpKs13HYF@{_2=*n$Pvg?h7b z)C|p{29(C>I^Sh1MEw@*!X0=NYp^?q{A()b7*L~gMJPWxa! zhhB8zOVrvKL$WP%$g_$o&=3-3i=idF{=!#Y+xk-zxEZ>|W-AW7atww$e6`KZ4NY}E pcgMBZ_{CnJCw8aZo|~PU=k^4CC3+(lKkC@-&RpyT>fIwD{{e!su$?gn2MoqE2W+&XO+NhQqiWZ(#)9#hv&V^KcqV@f+^Ij6^FC5Ar8feChrzID&)NguzK( zYoq2QE219M$VX8F2^g194_ZTlml$@_Oy!~8xB&G=m8k1ZnSKWnlMG-c-a*aCYt%qz zyfm)TSimrBNU>6T7B%J9(TP4hZxflvBKpOtB2n0C>@$uU$B|g&A!_OarvCxw*k=_z zjC=hqkz5*Us1u{ptc3}9n7#-11&Q?I7n{ga9(tJZYg|X?M`T&G<1jk0hk4nk>nE~B z4&Ya;#Y756YpC7QD`PZD7??p9{zko798sOdY;@xg>bMWJ7T#efE}+)JC(~cYdiuYR z7^ISS(|H##9J@__0CTB7xk7_8ZT~#;urx$IyepID~re2x<}DKrOQS zs5LT+d+`tIQ@9JPr|w35`w8@FwJy-8#ud~J^9wDDQ3EPPO?eG!F*af;_M_g+ha^ju zP}l3}I^S-LMg0||V>y=L8N5_P{xy}$45&Yl!j#Zr>mN!ccGIuMbNB}Jz*NH5>aN5Z zY(^b_gu2f>R^qA|&!xaLqjg9fN+aq;E|)Y|3+|bL7pQN%XeO?sE_9Gby^#}pFdrjv z618@oBUzSZ)athTJM9iztX`5=-~7qL=BL7cJ8ZwrCjR%~fr!M~in^+k6;(%%54tXP p_I9{h+uB?Dx_Vs${+Dq_LPI?6LU*Cx=B$q%YjWrLZ@NF){{xt(q@w@; diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/engine/authv/locale/ko_KR/LC_MESSAGES/django.po similarity index 56% rename from vibes_auth/locale/ko_KR/LC_MESSAGES/django.po rename to engine/authv/locale/ko_KR/LC_MESSAGES/django.po index 62003b85..6756e1f7 100644 --- a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/authv/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,257 +13,260 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "잔액" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "주문" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "주문" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "개인 정보" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "권한" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "중요한 날짜" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "추가 정보" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "인증" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "토큰 쌍 얻기" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "인증을 위한 토큰 쌍(새로 고침 및 액세스)을 얻습니다." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "토큰 쌍 새로 고침" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "토큰 쌍을 새로 고칩니다(새로 고침 및 액세스)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "토큰 확인" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "토큰을 확인합니다(새로 고침 또는 액세스)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "토큰이 유효합니다." -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "새 사용자 만들기" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "사용자 세부 정보 검색" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "사용자 세부 정보 업데이트" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "사용자 삭제하기" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "비밀번호 재설정 이메일을 보내 사용자의 비밀번호를 재설정합니다." -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "사용자에 대한 아바타 업로드 처리" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "사용자의 비밀번호 재설정 확인" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "비밀번호가 일치하지 않습니다." -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "사용자 계정 활성화하기" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "활성화 링크가 유효하지 않거나 계정이 이미 활성화되어 있습니다." -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "클라이언트가 저장한 최근 본 제품 병합" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "새 사용자를 추천한 사용자의 b64로 인코딩된 UUID입니다." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "비밀번호가 너무 약합니다." -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "잘못된 이메일" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "잘못된 전화 번호입니다: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "계정이 이미 활성화되었습니다..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "이 사용자가 가장 최근에 본 제품(최대 48개)을 시간 역순으로 표시합니다." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "그룹" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "위시리스트" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "아바타" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "속성을 사용하여 사용자 지정 데이터를 저장할 수 있습니다." -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "언어는 {LANGUAGES} 중 하나이며 기본값은 {LANGUAGE_CODE}입니다." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "언어는 {settings.LANGUAGES} 중 하나이며 기본값은 {settings.LANGUAGE_CODE}입니다." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "주소" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "선택한 스레드 닫기" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "선택한 스레드 열기" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "열기" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "닫힘" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "사용자" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "직원" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "시스템" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "익명 스레드의 경우" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "채팅 스레드" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "채팅 스레드" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "익명 스레드의 사용자 또는 이메일을 입력합니다." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "양수인은 직원 사용자이어야 합니다." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "채팅 메시지" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "채팅 메시지" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "익명 채팅을 하려면 유효한 이메일이 필요합니다." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "메시지는 1...1028자여야 합니다." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "이미 응답할 교환원을 찾고 있으니 잠시만 기다려주세요!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -273,173 +276,168 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"확장 기능을 위한 사용자 정의 필드 및 메서드가 있는 사용자 엔티티를 나타냅니" -"다. 이 클래스는 AbstractUser 모델을 확장하여 사용자 지정 이메일 로그인, 유효" -"성 검사 방법, 가입 상태, 인증 및 속성 저장과 같은 추가 기능을 통합합니다. 또" -"한 최근에 본 항목을 관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성" -"화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 처" -"리하도록 설계되었습니다." +"확장 기능을 위한 사용자 정의 필드 및 메서드가 있는 사용자 엔티티를 나타냅니다. 이 클래스는 AbstractUser 모델을 확장하여 " +"사용자 지정 이메일 로그인, 유효성 검사 방법, 가입 상태, 인증 및 속성 저장과 같은 추가 기능을 통합합니다. 또한 최근에 본 항목을 " +"관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 " +"처리하도록 설계되었습니다." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "이메일" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "사용자의 이메일 주소" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "전화 번호" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "사용자 전화번호" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "이름" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "성" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "사용자 프로필 이미지" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "확인됨" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "사용자 인증 상태" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "활성화됨" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "계정을 삭제하는 대신 이 옵션을 선택 해제합니다." -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "구독 중" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "사용자의 뉴스레터 구독 상태" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "활성화 토큰" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "속성" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "사용자" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "사용자" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "그룹" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "뛰어난 토큰" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "우수 토큰" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "블랙리스트에 오른 토큰" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "블랙리스트에 오른 토큰" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "'속성'은 사전이어야 합니다." -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "사업자 등록 시 사업자 식별자는 필수입니다." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "잘못된 이메일입니다: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "활성 계정을 찾을 수 없습니다." -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "클래스에서 토큰_클래스 속성을 설정해야 합니다!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "토큰 블랙리스트" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "잘못된 토큰" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "토큰에 사용자 UUID 클레임이 없습니다." -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "사용자가 존재하지 않습니다." -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "비밀번호 재설정" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "로고" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "비밀번호 재설정 확인" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "안녕하세요 %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" -msgstr "" -"비밀번호 재설정 요청을 받았습니다. 아래 버튼을 클릭하여 비밀번호를 재설정하세" -"요:" +msgstr "비밀번호 재설정 요청을 받았습니다. 아래 버튼을 클릭하여 비밀번호를 재설정하세요:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "비밀번호 재설정" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -447,7 +445,7 @@ msgstr "" "위의 버튼이 작동하지 않는 경우 다음 URL을 복사하여 브라우저에 붙여넣으세요.\n" " 를 웹 브라우저에 복사하여 붙여넣으세요:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -455,31 +453,29 @@ msgstr "" "이 요청을 보내지 않으셨다면 이\n" " 이메일을 무시하세요." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "모든 권리 보유" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "계정 활성화" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" -msgstr "" -"가입해 주셔서 감사합니다 %(project_name)s. 아래 버튼을 클릭하여 계정을 활성화" -"하세요:" +msgstr "가입해 주셔서 감사합니다 %(project_name)s. 아래 버튼을 클릭하여 계정을 활성화하세요:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -487,87 +483,75 @@ msgstr "" "활성화\n" " 계정" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | 계정 활성화" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | 비밀번호 재설정" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: " -"\"+999999999\". 최대 15자리까지 입력할 수 있습니다." +"잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: \"+999999999\". 최대 15자리까지 입력할 수 " +"있습니다." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"액세스 및 새로 고침 토큰과 사용자 데이터 쌍을 가져오기 위한 보기를 나타냅니" -"다. 이 보기는 클라이언트가 제공된 자격 증명을 사용하여 한 쌍의 JWT 토큰(액세" -"스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니" -"다. 기본 토큰 보기 위에 구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 " -"적절한 속도 제한을 보장합니다." +"액세스 및 새로 고침 토큰과 사용자 데이터 쌍을 가져오기 위한 보기를 나타냅니다. 이 보기는 클라이언트가 제공된 자격 증명을 사용하여 한" +" 쌍의 JWT 토큰(액세스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니다. 기본 토큰 보기 위에 " +"구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 적절한 속도 제한을 보장합니다." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"인증 목적으로 토큰을 새로 고치는 작업을 처리합니다. 이 클래스는 인증 시스템" -"의 일부로 토큰 새로 고침 작업을 위한 기능을 제공하는 데 사용됩니다. 클라이언" -"트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보" -"기는 연결된 직렬화기에 의존하여 토큰 새로 고침 입력의 유효성을 검사하고 적절" -"한 출력을 생성합니다." +"인증 목적으로 토큰을 새로 고치는 작업을 처리합니다. 이 클래스는 인증 시스템의 일부로 토큰 새로 고침 작업을 위한 기능을 제공하는 데 " +"사용됩니다. 클라이언트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보기는 연결된 직렬화기에 의존하여 토큰" +" 새로 고침 입력의 유효성을 검사하고 적절한 출력을 생성합니다." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " -msgstr "" -"특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 " -"보기를 나타냅니다." +msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 보기를 나타냅니다." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "사용자 보기 세트 구현.\n" -"생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근" -"에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 " -"작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 " -"GenericViewSet을 확장합니다." +"생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "이미 계정을 활성화하셨습니다..." diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/engine/authv/locale/nl_NL/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo rename to engine/authv/locale/nl_NL/LC_MESSAGES/django.mo index a7999a4a46f0bb4892b7af44a51f018ce26bf752..4b9a63e246c81d564edd3b2c3fb8afbb33ebd1cd 100644 GIT binary patch delta 1505 zcmYM!ZA^`E7{~GJG}S3d4=NE3HRf?fY%ylW3(L$56HA8gulq=AeeU}{|NHu1|LeL=UG=^7SF)mlm1Y)5 zH;cnNI0UVN8k;dhEH%F{=!5o%5)MbMSg8Pe-z)3`|${F zz_d|8C(zDOPDcAtnV&#q+8wb6wNW2(D9a(5Dpia+u@7~k)u{LCBlpcnPIee4VmqoL z4^fFe4RUdSi?`^;hAgMFO{kKe!ZCOgYg}e;a6b2?W1Y(EMOCI1)v}YQgf5}p>p;bQ zg=zQ>L&WJvwK90x<7D;#b)wHmF4l{)FnK()5oNX*J9%*#jXucpM2@4GIgYUyirimB zKkLF+#Pi9M&1T?cT#BujgWbqkg7%Y(0v=>cF&l>!s1t0%xwscuXxA|bpJ6=qpc}uU zdfXp*o;KC2gnJLFg0(nMA=D6_#Apnmm;LShz=hdMREdVsXa&s1VqAbKc{9>}yB7Jp z3l;DKDv>X!z&|k-ZMt)EH|o72+=Z1`hxagv{VktH$VI43J5jxSgmL&9H7xIOIsU+S zTtZ#dvPx8C)}RvKiWI~4p-O!T^YJliCjKCM+n7A|)pV9~p_5jlPILwnupQNkFlwsr zqFV6+J@_59VFuCFx>=}`SEAOh$3$#I?bD3pZbz{ZJM%fW0_M(i0+%CmV|A#nSu1YG zvsjNQOr%=Wg8I6(;U;~K$>{PrpQmCW_fwJavMs1e9zgwHX+y=i;9cuv*1-cM@*F4N zH)I?vW42RjAL@k)JcQM#3VlSa>q8B3Hh&anUAQ4O)ulHEDy^~j_p>qF=APqn`NH?( zZY9L|YXgCX9b5f*M_bb~|KEkrrI*CScxQSG^9sVBvf`6+2NzcOmY1#em6fjA?b%)% Y@c08&J8G(`nrb{PgG<6GGZx1F1+K)mKmY&$ delta 1488 zcmYk+ZD@^g7{~GJ%;xOO#+c2_a4^j5dGoNfjl-BCF9>1DVGn27_QDRDrIUu47n52f z347tiq~wqy57~>glzCc89!hEwlA1)8?{D{%wf4F1`~2_gfBmoPIvWZ+30zB!2rV99nQfPOu!3Rf?!&Z#LlNgKVaWZye2HwXa{Dk8%ZK{(<0rG1V{84;A9>qhr z4acN}oIpELoQ#@KnIA(X(lhD+YNJ6Ud7DHuRVo8@;vCe8R-)e9JbE8Mas+FM=UMI6#s1vv+7`wr9$ zoyI2CUBt!QPo8geK?~h56XdeJQF!y{L6BP(wV7ic=7-b0@eGw{xjVYb^f#_`;{6m$+OO z?(_7-PF?3)U$Mzov1;QX?}55tz*|*a{^Oy;Uq-l2zvZ3#WLk*8l(j diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/engine/authv/locale/nl_NL/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/nl_NL/LC_MESSAGES/django.po rename to engine/authv/locale/nl_NL/LC_MESSAGES/django.po index bbb3757f..d8e62adb 100644 --- a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/authv/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,264 +13,269 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Bestel" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Bestellingen" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Persoonlijke info" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Rechten" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Belangrijke data" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Extra info" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Authenticatie" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Een tokenpaar verkrijgen" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Verkrijg een tokenpaar (refresh en access) voor verificatie." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Een tokenpaar vernieuwen" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Een tokenpaar verversen (refresh en access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Een token verifiëren" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Een token verifiëren (verversen of toegang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "The token is valid" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Een nieuwe gebruiker maken" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "De gegevens van een gebruiker ophalen" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "De gegevens van een gebruiker bijwerken" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Een gebruiker verwijderen" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Het wachtwoord van een gebruiker opnieuw instellen door een e-mail met het " "wachtwoord opnieuw in te stellen" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Avatar uploaden voor een gebruiker afhandelen" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Een gebruikersaccount activeren" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Activeringslink is ongeldig of account is al geactiveerd" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Laatst bekeken producten samenvoegen" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "De b64-gecodeerde uuid van de gebruiker die de nieuwe gebruiker naar ons " "heeft doorverwezen." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Het wachtwoord is te zwak" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Misvormde e-mail" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misvormd telefoonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account is al geactiveerd..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "De producten die deze gebruiker het laatst heeft bekeken (max 48), in " "omgekeerd-chronologische volgorde." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Groepen" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Verlanglijst" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attributen kunnen worden gebruikt om aangepaste gegevens op te slaan" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Taal is een van de {LANGUAGES} met standaard {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Taal is een van de {settings.LANGUAGES} met standaard " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adressen" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Geselecteerde threads sluiten" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Geselecteerde draden openen" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Open" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Gesloten" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Gebruiker" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personeel" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Systeem" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Voor anonieme threads" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Draadje chatten" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Gespreksonderwerpen" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Geef gebruiker of e-mail op voor anonieme thread." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chatbericht" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chatberichten" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Voor anonieme chats is een geldig e-mailadres vereist." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Bericht moet 1..1028 tekens bevatten." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "We zijn al op zoek naar de operator om je antwoord te geven, wacht even!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -289,166 +294,165 @@ msgstr "" "model is ontworpen voor specifieke gebruikssituaties voor verbeterd " "gebruikersbeheer." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "E-mailadres gebruiker" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefoonnummer" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Telefoonnummer gebruiker" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Voornaam" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Achternaam" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Afbeelding gebruikersprofiel" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Is geverifieerd" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Verificatiestatus van de gebruiker" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Is actief" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Deselecteer dit in plaats van accounts te verwijderen" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Is geabonneerd" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Inschrijvingsstatus nieuwsbrief gebruiker" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Activeringstoken" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attributen" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Gebruiker" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Gebruikers" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Groep" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Uitstekende penning" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Uitstaande tokens" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token op zwarte lijst" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Tokens op de zwarte lijst" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributen` moet een woordenboek zijn" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Bedrijfsidentificator is vereist bij registratie als bedrijf" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "misvormde e-mail: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Geen actieve account gevonden" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Moet token_class attribuut instellen op klasse!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token op zwarte lijst" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Invalid token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Geen gebruiker uuid claim aanwezig in token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Gebruiker bestaat niet" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Wachtwoord opnieuw instellen" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Bevestiging wachtwoord reset" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" -"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik " -"op de knop hieronder om je wachtwoord opnieuw in te stellen:" +"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik" +" op de knop hieronder om je wachtwoord opnieuw in te stellen:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "wachtwoord opnieuw instellen" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -456,7 +460,7 @@ msgstr "" "Als de bovenstaande knop niet werkt, kopieer en plak dan de volgende URL\n" " in uw webbrowser:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -464,31 +468,31 @@ msgstr "" "als u dit verzoek niet hebt verzonden, negeer dan alstublieft deze\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Vriendelijke groeten,
Het %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rechten voorbehouden" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activeer je account" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op " -"de onderstaande knop te klikken:" +"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op" +" de onderstaande knop te klikken:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -496,22 +500,22 @@ msgstr "" "Activeer\n" " account" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Account activeren" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Wachtwoord opnieuw instellen" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -519,10 +523,10 @@ msgstr "" "Ongeldig formaat telefoonnummer. Het nummer moet worden ingevoerd in de " "indeling: \"+999999999\". Maximaal 15 cijfers toegestaan." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -531,16 +535,16 @@ msgstr "" "verversingstokens en gebruikersgegevens. Deze weergave beheert het proces " "van het afhandelen van authenticatie op basis van tokens, waarbij clients " "een paar JWT-tokens kunnen krijgen (toegang en verversen) met behulp van " -"verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt " -"voor een goede rate limiting om te beschermen tegen brute force aanvallen." +"verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt" +" voor een goede rate limiting om te beschermen tegen brute force aanvallen." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Ververst tokens voor authenticatiedoeleinden. Deze klasse wordt gebruikt om " "functionaliteit te bieden voor het verversen van tokens als onderdeel van " @@ -549,7 +553,7 @@ msgstr "" "op de bijbehorende serializer om inputs voor het verversen van tokens te " "valideren en de juiste output te produceren." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -557,29 +561,22 @@ msgstr "" "Vertegenwoordigt een weergave voor het verifiëren van JSON Web Tokens (JWT) " "met behulp van specifieke serialisatie- en validatielogica." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementatie van gebruikersviewset.\n" -"Biedt een set acties voor het beheren van gebruikersgerelateerde gegevens " -"zoals aanmaken, opvragen, bijwerken, verwijderen en aangepaste acties zoals " -"wachtwoord opnieuw instellen, avatar uploaden, account activeren en onlangs " -"bekeken items samenvoegen. Deze klasse breidt de mixins en GenericViewSet " -"uit voor robuuste API afhandeling." +"Biedt een set acties voor het beheren van gebruikersgerelateerde gegevens zoals aanmaken, opvragen, bijwerken, verwijderen en aangepaste acties zoals wachtwoord opnieuw instellen, avatar uploaden, account activeren en onlangs bekeken items samenvoegen. Deze klasse breidt de mixins en GenericViewSet uit voor robuuste API afhandeling." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo b/engine/authv/locale/no_NO/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/no_NO/LC_MESSAGES/django.mo rename to engine/authv/locale/no_NO/LC_MESSAGES/django.mo index ef89bd82ca899e50f314637b69badae05f71616b..d01ce91a308c79769df52d63c09b56e4089d3232 100644 GIT binary patch delta 1505 zcmYMzSx8h-9LMovi_W+-Esm9`jixPDlTAAf)lg!Pg>AG^A!@0WL=I_5T_~&wO`?XP zAP}-13d(Lz*-J&GB~*eB5wtwCJd{E7Vo3G_* zF(#U3j2EBaFnozV?8R~T5hvqsoPl{`jhTw;a1=J+By7ep*p6X*jKgsVLE_Pa+V8{B zm_5!|W&(q`EXWdf!(QaK%u!6j7^Yw=CgUwk#rv3#uW%6#;0T;Q-btho`8QkmQ2bhK z#1`C&{&dR;v_IX+s1cRbXjHei+HgG-DoK zLsg_3m1vK};3R_&=)tNCr?dx9CBKZB_z=tEjCqf_%nP%eN>rl))nOu@aM#bGpZOJ3 z>F=Tv?ZDH-d4W2RwKd>m)`-gN2CDS!I2}9j7Z3cztN1;Khgd&P77CoovE&5T9IRvC zG@QnIE2o%=&oP4is9sq-#h8f-wUfbY7A#b$+EJN4!=?BZRe>xzZX||LSFjpYu?nPk zrUq4k(>Nbvn2p`2-swXnI)Di{lt+`&2c29=19Q>emAFo2uT(n;zWEW}fohz~FsyHOQ+?fMl--uyw8 zHlL{Km15*BO&KcDZkZ7iDQ+~IcAT^~X{Z~+hEP27Q# z3Y>(Fp8bW@m7j1tnr5ZUP7&#|i$M#m}Szqe?(2JYWB`>ba{TwKKN@;*xT z)>cHLRW-Y7gXfyk#{Zw$ZD}jw<3k0ZdBM4MUq;wBeQ;xOWKGe=NKxVXBY}Mt<$>C0 TX-#?Qf$~7Z;0}BFjGp+v@NKit delta 1488 zcmYk*OGs2v9LMo9mO4Ii%<`G$WM*kKj!N%RhYA--i|j?>kU5Il6rqzYh8i!#D#k<7$jzEPls0{Dr#z52m3j z%S6m91_iuDR-$g$fxOEEF$oXjG(3&TcnN3XEiA!@xB|y91q-vSLMo77Q^Oyv--t)> z0PeskIT33ie~wjAC#v$Js6s|<-=SXg1u5R7v6_-9LG8E{wWGDD=eFAOR-`5q#(8)a zmBLOiN{&zK59de8n;zh2dc6QsOSf9A>PIb9{7yc@lyd0as3cgXkiE2l1^I}c5`0_ z7IVG7$e6`=7kxN}>Xilajmg(iwG7I*5JW{afU0yDtMEB0fh0OE6^l_vuo9KnCL}yl zk4m5$mtrr@!F#CQ`G_j?E5_q@^lB@=8F;u*Ou0J4?WpG3jT^8BwSyP-^$FD1;UYgR zn2%bp$ew%b`4ZH+Yml}vK@4Lbw&E1xO;MCV2JIL|RXS$-1D(uc_~w!@30GkzCSV<^ z2^&z!>_QsbbRv5)r?3L=pb8mBC7jJ}+*png?WB&ua%{pxyokwo1C_{-?GvPU^8poY zEUT(l<|AimDp7^{QO(zm)367XXg?C3xrUqZrHA}=V?n8PhRacBy&3gD2X*8W7JYJ7C>d0H|`v1;7%>j33sBv$g Nu_M5pt&85o{R7~YsAvEH diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/engine/authv/locale/no_NO/LC_MESSAGES/django.po similarity index 62% rename from vibes_auth/locale/no_NO/LC_MESSAGES/django.po rename to engine/authv/locale/no_NO/LC_MESSAGES/django.po index 980d4aed..d0a5dafe 100644 --- a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/authv/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,261 +13,265 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balanse" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Bestilling" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Personlig informasjon" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Tillatelser" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Viktige datoer" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Ytterligere informasjon" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autentisering" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Få et tokenpar" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Skaff et tokenpar (refresh og access) for autentisering." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Oppdater et tokenpar" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Oppdater et tokenpar (refresh og access)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Bekreft et token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Bekreft et token (oppdatering eller tilgang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Tokenet er gyldig" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Opprett en ny bruker" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Hent informasjon om en bruker" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Oppdatere en brukers opplysninger" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Slett en bruker" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Tilbakestill en brukers passord ved å sende en e-post om tilbakestilling av " "passord" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Håndtere opplasting av avatarer for en bruker" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bekreft tilbakestilling av en brukers passord" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Passordene stemmer ikke overens" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktiver en brukers konto" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Aktiveringslenken er ugyldig eller kontoen er allerede aktivert" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Slå sammen nylig viste produkter lagret hos kunden" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brukerens b64-kodede uuid som henviste den nye brukeren til oss." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Passordet er for svakt" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Feilaktig e-post" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Feilaktig telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontoen er allerede aktivert..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produktene som denne brukeren har sett på sist (maks. 48), i omvendt " "kronologisk rekkefølge." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupper" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Ønskeliste" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attributter kan brukes til å lagre egendefinerte data" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Språket er en av {LANGUAGES} med standard {LANGUAGE_CODE}." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Språket er en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresser" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Lukk utvalgte tråder" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Åpne utvalgte tråder" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Åpne" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Stengt" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Bruker" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Staben" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "For anonyme tråder" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chat-tråd" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chat-tråder" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Oppgi bruker eller e-post for anonym tråd." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Mottaker må være en ansatt bruker." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chat-melding" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chat-meldinger" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Gyldig e-post kreves for anonyme chatter." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Meldingen må bestå av 1..1028 tegn." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi leter etter operatøren som kan svare deg allerede, vent litt!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -285,167 +289,166 @@ msgstr "" "aktivering for å verifisere kontoer. User-modellen er utformet for å " "håndtere spesifikke brukstilfeller for forbedret brukeradministrasjon." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-post" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Brukerens e-postadresse" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Brukerens telefonnummer" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Fornavn" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Etternavn" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Bilde av brukerprofil" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Er verifisert" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Brukerens bekreftelsesstatus" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Er aktiv" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Fjern dette valget i stedet for å slette kontoer" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Er abonnert" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status for brukerens abonnement på nyhetsbrev" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Egenskaper" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Bruker" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Brukere" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Gruppe" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Enestående symbol" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Outstanding tokens" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Svartelistet token" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Svartelistede tokens" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributter` må være en ordbok" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "Virksomhetsidentifikator er påkrevd når du registrerer deg som virksomhet" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "misdannet e-post: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Ingen aktiv konto funnet" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Må sette token_class-attributtet på klassen!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token svartelistet" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Ugyldig token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Ingen bruker-uuid-krav i tokenet" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Brukeren eksisterer ikke" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Tilbakestill passordet ditt" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Bekreftelse på tilbakestilling av passord" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Vi har mottatt en forespørsel om å tilbakestille passordet ditt. Vennligst " "tilbakestill passordet ditt ved å klikke på knappen nedenfor:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "tilbakestille passord" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -453,7 +456,7 @@ msgstr "" "Hvis knappen ovenfor ikke fungerer, kan du kopiere og lime inn følgende URL\n" " i nettleseren din:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -461,22 +464,22 @@ msgstr "" "hvis du ikke har sendt denne forespørselen, vennligst ignorer denne\n" " e-post." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Med vennlig hilsen,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alle rettigheter forbeholdt" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktiver kontoen din" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -485,7 +488,7 @@ msgstr "" "Takk for at du registrerte deg for %(project_name)s. Vennligst aktiver " "kontoen din ved å klikke på knappen nedenfor:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -493,22 +496,22 @@ msgstr "" "Aktiver\n" " konto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Tilbakestill passord" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -516,28 +519,28 @@ msgstr "" "Ugyldig telefonnummerformat. Nummeret må legges inn i formatet: " "\"+999999999\". Opptil 15 sifre er tillatt." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Representerer en visning for å hente et par tilgangs- og oppdateringstokener " -"og brukerdata. Denne visningen administrerer prosessen med å håndtere " -"tokenbasert autentisering, der klienter kan hente et par JWT-tokens (tilgang " -"og oppdatering) ved hjelp av oppgitt legitimasjon. Den er bygget på toppen " -"av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning " -"for å beskytte mot brute force-angrep." +"Representerer en visning for å hente et par tilgangs- og oppdateringstokener" +" og brukerdata. Denne visningen administrerer prosessen med å håndtere " +"tokenbasert autentisering, der klienter kan hente et par JWT-tokens (tilgang" +" og oppdatering) ved hjelp av oppgitt legitimasjon. Den er bygget på toppen " +"av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning" +" for å beskytte mot brute force-angrep." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Håndterer oppdatering av tokens for autentiseringsformål. Denne klassen " "brukes til å tilby funksjonalitet for tokenoppdatering som en del av et " @@ -546,37 +549,30 @@ msgstr "" "tilknyttede serialisatoren for å validere tokenoppdateringsinnganger og " "produsere passende utganger." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp " -"av spesifikk serialiserings- og valideringslogikk." +"Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp" +" av spesifikk serialiserings- og valideringslogikk." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering av brukervisningssett.\n" -"Tilbyr et sett med handlinger som håndterer brukerrelaterte data som " -"oppretting, henting, oppdateringer, sletting og egendefinerte handlinger, " -"inkludert tilbakestilling av passord, opplasting av avatar, kontoaktivering " -"og sammenslåing av nylig viste elementer. Denne klassen utvider mixins og " -"GenericViewSet for robust API-håndtering." +"Tilbyr et sett med handlinger som håndterer brukerrelaterte data som oppretting, henting, oppdateringer, sletting og egendefinerte handlinger, inkludert tilbakestilling av passord, opplasting av avatar, kontoaktivering og sammenslåing av nylig viste elementer. Denne klassen utvider mixins og GenericViewSet for robust API-håndtering." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Du har allerede aktivert kontoen..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/engine/authv/locale/pl_PL/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo rename to engine/authv/locale/pl_PL/LC_MESSAGES/django.mo index 5c5c71de1c4e54698e1c3a2dee745f2046f8edcb..ecd5d05fe77137e398c8d383a8bf8b2d5cdb0dce 100644 GIT binary patch delta 1484 zcmYk*ZD@^Q9LMqh8QadB*=A$dW_GYKY<7-0k|}GCd1F@6hT03m(UQ*23+Cal5-X#% zCZ>c!DVdI19!hAQqBfd`NW2g)JS2IcNxnb#(VXt?&vo7Rbzj&2`v0%|^oR9gF&E{Y|PQaZw6FV^jFJl=FU_8b#Ndmf2<5Mvm zy;Ce=*)&RdAnRfST9CDD4|=c%$Kz>C#!EO6Z{S=U!X@|%Q!p^q38V_Stbv>6Z^iw1 z1RHTuR>YZTTb2{iepKYgP>~MD{D4~MC$cG<#caw{8EVJns2#0FeYZK*Z$o0TPRz%1 zsEj;91^OgH;{c6!=*D1?D!eXMVpG!#HBDn+}I%Z_qej<>KFtQsdxeN z@ETG^dxiRb3H=y?45t&MiM7rR{L(FaL)l9O7S u!{Ol8O|8YHA}i8b{-8woN0wH;zn-I7fcf^RSbzv6OCnrXHKi!lLxxB$B_2`}MV3}6`kz;OJ9nm>t&7?)yx zo5Nr}yU0S+geqh&YsP3ij??fo#^6PqjyEt9pWqt&g0Z-8mJ>)Wa+#N#)~~~EJc?Bq zI@|9ow0pJ_(IHgiCs2V51$~R!=ra<$C9;|_m5Dm>O4Nzgq2AjOd~QTyvMyYNeW;8) zLIwKN&!C6FD~!a-xlU^Lpi8@8h|(-X80nQB*XDh{Fo z8Np%J`H0y(`}^Hy9tQ6*0;AKN4U@2d=WI+5F>ApGE=oY5JNe$raTM?~RBd0NO7$9# zF>egLJl8EIJ9r)Q@Ex+0#nM3NHxC2-P>zbY2i1I6aU%{OYuO~~qzjfhCCf)`T!tji zwqhikjsv9E5_THh2K%7NL%Klel2Rj zatyYb@jXz&Pnr7H7!LoR|OVg1L~yL zP)&FnbntMH_U{Oe?&_(D#gB8;ImRnukIgkEgL zyQu$jdXAH!0@OmAQ7P_6Z8U^#{19{!6&`YA9ybrjjk* z?Iqp~6-V7id~J>H`h5*`?agiOuE2xj_2FT;S)MFUz?FI`{{NYs?)n2Q9m5xzTRU2q J`DjH+#9yw^tS$fm diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/engine/authv/locale/pl_PL/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/pl_PL/LC_MESSAGES/django.po rename to engine/authv/locale/pl_PL/LC_MESSAGES/django.po index 1df40d8d..e7a742ff 100644 --- a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/authv/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,263 +13,269 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Równowaga" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Zamówienie" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Zamówienia" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informacje osobiste" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Uprawnienia" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Ważne daty" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Dodatkowe informacje" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Uwierzytelnianie" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Uzyskanie pary tokenów" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." -msgstr "Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." +msgstr "" +"Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Odśwież parę tokenów" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Odświeżenie pary tokenów (odświeżenie i dostęp)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Weryfikacja tokena" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Weryfikacja tokena (odświeżenie lub dostęp)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Token jest ważny" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Tworzenie nowego użytkownika" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Pobieranie danych użytkownika" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Aktualizacja danych użytkownika" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Usuwanie użytkownika" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Zresetowanie hasła użytkownika poprzez wysłanie wiadomości e-mail " "resetującej hasło." -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Obsługa przesyłania awatara dla użytkownika" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Potwierdzenie zresetowania hasła użytkownika" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Hasła nie są zgodne" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktywacja konta użytkownika" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Link aktywacyjny jest nieprawidłowy lub konto zostało już aktywowane." -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Scalanie ostatnio oglądanych produktów przechowywanych przez klienta" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Zakodowany w b64 identyfikator uuid użytkownika, który polecił nam nowego " "użytkownika." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Hasło jest zbyt słabe" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Zniekształcona wiadomość e-mail" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Zniekształcony numer telefonu: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Konto zostało już aktywowane..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produkty ostatnio przeglądane przez tego użytkownika (maks. 48), w " "kolejności odwrotnej do chronologicznej." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupy" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Lista życzeń" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Awatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Atrybuty mogą być używane do przechowywania niestandardowych danych" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Język jest jednym z {LANGUAGES} z domyślnym {LANGUAGE_CODE}." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Język jest jednym z {settings.LANGUAGES} z domyślnym " +"{settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresy" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Zamykanie wybranych wątków" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Otwieranie wybranych wątków" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Otwarty" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Zamknięte" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Użytkownik" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personel" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Dla wątków anonimowych" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Wątek czatu" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Wątki czatu" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Podaj użytkownika lub adres e-mail dla anonimowego wątku." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Odbiorca musi być użytkownikiem personelu." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Wiadomość na czacie" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Wiadomości czatu" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "W przypadku czatów anonimowych wymagany jest prawidłowy adres e-mail." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Wiadomość musi zawierać od 1 do 1028 znaków." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Szukamy operatora, który już ci odpowie, zaczekaj!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -288,166 +294,165 @@ msgstr "" "zaprojektowany do obsługi określonych przypadków użycia w celu ulepszonego " "zarządzania użytkownikami." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Adres e-mail użytkownika" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Numer telefonu" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Numer telefonu użytkownika" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Imię" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Nazwisko" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Obraz profilu użytkownika" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Czy zweryfikowano" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Status weryfikacji użytkownika" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Jest aktywny" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Odznacz to zamiast usuwać konta" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Jest subskrybowany" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status subskrypcji newslettera użytkownika" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Token aktywacyjny" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atrybuty" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Użytkownik" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Użytkownicy" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grupa" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Wyjątkowy token" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Zaległe tokeny" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token na czarnej liście" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Tokeny znajdujące się na czarnej liście" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` musi być słownikiem" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Identyfikator firmy jest wymagany podczas rejestracji jako firma" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "źle sformatowana wiadomość e-mail: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Nie znaleziono aktywnego konta" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Należy ustawić atrybut token_class na klasie!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token na czarnej liście" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Nieprawidłowy token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Brak oświadczenia uuid użytkownika w tokenie" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Użytkownik nie istnieje" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Resetowanie hasła" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Potwierdzenie resetowania hasła" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Witaj %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Otrzymaliśmy prośbę o zresetowanie hasła. Zresetuj hasło, klikając poniższy " "przycisk:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "resetowanie hasła" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -455,7 +460,7 @@ msgstr "" "Jeśli powyższy przycisk nie działa, skopiuj i wklej następujący adres URL\n" " do przeglądarki internetowej:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -463,22 +468,22 @@ msgstr "" "jeśli nie wysłałeś tej prośby, zignoruj tę wiadomość.\n" " email." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Z wyrazami szacunku,
Zespół %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Wszelkie prawa zastrzeżone" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktywacja konta" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -487,7 +492,7 @@ msgstr "" "Dziękujemy za zarejestrowanie się w %(project_name)s. Aktywuj swoje konto, " "klikając poniższy przycisk:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -495,51 +500,51 @@ msgstr "" "Aktywować\n" " konto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktywuj konto" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetuj hasło" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie: " -"\"+999999999\". Dozwolone do 15 cyfr." +"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie:" +" \"+999999999\". Dozwolone do 15 cyfr." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Reprezentuje widok pobierania pary tokenów dostępu i odświeżania oraz danych " -"użytkownika. Ten widok zarządza procesem obsługi uwierzytelniania opartego " +"Reprezentuje widok pobierania pary tokenów dostępu i odświeżania oraz danych" +" użytkownika. Ten widok zarządza procesem obsługi uwierzytelniania opartego " "na tokenach, w którym klienci mogą uzyskać parę tokenów JWT (dostęp i " "odświeżanie) przy użyciu dostarczonych poświadczeń. Jest on zbudowany w " "oparciu o podstawowy widok tokenu i zapewnia odpowiednie ograniczenie " "szybkości w celu ochrony przed atakami typu brute force." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Obsługuje odświeżanie tokenów do celów uwierzytelniania. Klasa ta służy do " "zapewnienia funkcjonalności dla operacji odświeżania tokenów w ramach " @@ -548,7 +553,7 @@ msgstr "" "powiązanym serializerze w celu sprawdzenia poprawności danych wejściowych " "odświeżania tokena i wygenerowania odpowiednich danych wyjściowych." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -556,29 +561,22 @@ msgstr "" "Reprezentuje widok do weryfikacji tokenów sieciowych JSON (JWT) przy użyciu " "określonej logiki serializacji i walidacji." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementacja zestawu widoków użytkownika.\n" -"Zapewnia zestaw akcji, które zarządzają danymi związanymi z użytkownikiem, " -"takimi jak tworzenie, pobieranie, aktualizacje, usuwanie i niestandardowe " -"akcje, w tym resetowanie hasła, przesyłanie awatara, aktywacja konta i " -"scalanie ostatnio przeglądanych elementów. Ta klasa rozszerza mixiny i " -"GenericViewSet dla solidnej obsługi API." +"Zapewnia zestaw akcji, które zarządzają danymi związanymi z użytkownikiem, takimi jak tworzenie, pobieranie, aktualizacje, usuwanie i niestandardowe akcje, w tym resetowanie hasła, przesyłanie awatara, aktywacja konta i scalanie ostatnio przeglądanych elementów. Ta klasa rozszerza mixiny i GenericViewSet dla solidnej obsługi API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/engine/authv/locale/pt_BR/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo rename to engine/authv/locale/pt_BR/LC_MESSAGES/django.mo index 49e80df29c80bcebdd4b33a10099167eeb89b0ae..f88f6c144999b5d6f07e5268d56988c09ddd087f 100644 GIT binary patch delta 1484 zcmYMzSx8i27{>8;#GIKH9kZq~ZPUp%r)k{UK`gMKY@x-lGC`Of=2?{^ww9kJG&6lb}a z#e-&ke1fU?0yD4+N8)>&hLnF*4;R?*eBbbM0FbnVCTzrfJFoj9d(1*G{1Bc@H zk>=QF2F09^%aRxDL7rttaS&d@A$T1JV+#($`#1$(;w=1w=~z0-Eo33`wQ7Dee;wB2 zSzL$1vmJM$ec5hB^{C1(qblu6`T_NzpU9#tpV^euT-1uoQ7c-7x^HLl_%KqFoxu<` zp%Upt75d6yaFW40^kFQ=jkXpQ`Blut4&3T7dy8R?7mlHNjH8ljKoxL3dHycyzGvvg z9#r99v6XpzW6dHQJMH7lrZV`5>QQjK8(A)va$JVt6tlhf++)^AqZMI{<>>k^s0VyU zEuar?ah;dyb$?5NSs`}gY#heMVXan$gz4CB2CC!)s^T^bU>DBEZk&Lj$!^q@s7N>9 zKsC6`YIOQ~5ZJ=Ue38z^n$fsTxqxUc<$B4`-laQq)mY z&ljO4tU+zgtvCQ{ljjd2Uvv1;CcKTc_!!sXOkSl-o^R(F9LF1|*Dgd}ny>^1VFhXh zRk##4qE_0BK5Rp6x(7(4_6n!tC#=9+Hq1=ijI`gb;5=+cM=SclU;(CcmsYeA)zfvT ziMOCy5=Yu-^{Dr~8Fl|lR8MsTY^RVCqNT+75P!j!*1N>GJAo3u8YT;jlo(}QZ1+gj>qm_LcMnvldvCE z_*?8|o*x+CI&#%(HiN-yRFC2(I+3N|Y_5Iik2Bkd&s=65G+Gf>u^m1C2DQL@)CLCe z8qa-4y?=g+St0h}d~|Ve*sBGRFeA2}fhuW4ReS~0um=}nALgTHniF*yD$-?`f?JVL zY&W{G14Gz}J{&+r{RdTW3Vqa>O2?V3Z+Sxlvr5#VYC%PN3@h<67U5S^)DwtHJ)e!5 zuo87R*I*)Uj@_?AKGwjO4&hnchqrM(7VuL_XMNkx-~gUP{p>vCr3v$KI0jHV2x1VI zqZ`{X8Be1Q-8m#uyNR>#2`<53I2VH)9NKQpxBxpbq8+_rP>!EaJM#0kdRm5>cmb*< ztC2R^7S!*(9rgYVR8M7PMFXhQK8Q>4AF5^L#m@h0khN_OYQBr8q#mQ@eU20GLvgh;NGNd*kq@=A z5YE9mRMcJQ!E0EL_b?47l{yQQqLSHwO5#8?oRr}jvyma)9y%5<^cRYrN}l6#S@fy9 zcSQDz(5i}cp^Bwz+q^B|rh4!8x*fI64NczG=-tfnVTmRFfIkp*\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,260 +13,264 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Equilíbrio" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Pedido" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informações pessoais" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permissões" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Datas importantes" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Informações adicionais" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autenticação" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obter um par de tokens" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Obter um par de tokens (atualização e acesso) para autenticação." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Atualizar um par de tokens" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Atualizar um par de tokens (atualizar e acessar)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verificar um token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verificar um token (atualização ou acesso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "O token é válido" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Criar um novo usuário" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Recuperar os detalhes de um usuário" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Atualizar os detalhes de um usuário" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Excluir um usuário" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Redefinir a senha de um usuário enviando um e-mail de redefinição de senha" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Manipular o upload do avatar de um usuário" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirmar a redefinição de senha de um usuário" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "As senhas não correspondem" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Ativar a conta de um usuário" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "O link de ativação é inválido ou a conta já está ativada" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Mesclar produtos recentemente visualizados armazenados pelo cliente" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "A senha é muito fraca" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "E-mail malformado" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de telefone malformado: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "A conta já foi ativada..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "O token é inválido!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" -"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em " -"ordem cronológica inversa." +"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em" +" ordem cronológica inversa." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupos" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Lista de desejos" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Os atributos podem ser usados para armazenar dados personalizados" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "O idioma é um dos {LANGUAGES} com o padrão {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"O idioma é um dos {settings.LANGUAGES} com o padrão {settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Endereços" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Fechar as linhas selecionadas" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Abrir linhas selecionadas" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Aberto" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Fechado" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Usuário" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Equipe" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistema" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Para tópicos anônimos" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Linha de bate-papo" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Tópicos de bate-papo" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Forneça o usuário ou e-mail para o tópico anônimo." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "O responsável deve ser um usuário da equipe." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Mensagem de bate-papo" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Mensagens de bate-papo" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "É necessário um e-mail válido para chats anônimos." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "A mensagem deve ter de 1 a 1028 caracteres." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Estamos procurando o operador para lhe responder, aguarde!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -285,167 +289,166 @@ msgstr "" "modelo User foi projetado para lidar com casos de uso específicos para o " "gerenciamento aprimorado de usuários." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Endereço de e-mail do usuário" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Número de telefone" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Número de telefone do usuário" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Primeiro nome" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Sobrenome" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Imagem do perfil do usuário" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "É verificado" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Status de verificação do usuário" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Está ativo" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Desmarque essa opção em vez de excluir contas" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Está inscrito" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Status da assinatura do boletim informativo do usuário" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Token de ativação" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atributos" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Usuário" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Usuários" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grupo" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Token excepcional" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Tokens pendentes" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token na lista negra" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Tokens na lista negra" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` deve ser um dicionário" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "O identificador de empresa é necessário ao se registrar como uma empresa" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "e-mail malformado: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Nenhuma conta ativa encontrada" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "É necessário definir o atributo token_class na classe!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token na lista negra" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Token inválido" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Nenhuma reivindicação de uuid de usuário presente no token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "O usuário não existe" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Redefinir sua senha" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logotipo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Confirmação de redefinição de senha" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Olá %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Recebemos uma solicitação para redefinir sua senha. Para redefinir sua " "senha, clique no botão abaixo:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "redefinir senha" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -453,7 +456,7 @@ msgstr "" "Se o botão acima não funcionar, copie e cole o seguinte URL\n" " em seu navegador da Web:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -461,22 +464,22 @@ msgstr "" "Se você não enviou essa solicitação, ignore este\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Atenciosamente,
A equipe %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Todos os direitos reservados" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Ativar sua conta" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -485,7 +488,7 @@ msgstr "" "Obrigado por se inscrever no %(project_name)s. Ative sua conta clicando no " "botão abaixo:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -493,22 +496,22 @@ msgstr "" "Ativar\n" " conta" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Ativar conta" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Redefinir senha" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -516,68 +519,61 @@ msgstr "" "Formato de número telefônico inválido. O número deve ser inserido no " "formato: \"+999999999\". São permitidos até 15 dígitos." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Representa uma visualização para obter um par de tokens de acesso e " "atualização e os dados do usuário. Essa visualização gerencia o processo de " -"manipulação da autenticação baseada em token, em que os clientes podem obter " -"um par de tokens JWT (acesso e atualização) usando as credenciais " +"manipulação da autenticação baseada em token, em que os clientes podem obter" +" um par de tokens JWT (acesso e atualização) usando as credenciais " "fornecidas. Ela é construída sobre uma visualização de token de base e " "garante a limitação de taxa adequada para proteger contra ataques de força " "bruta." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Trata da atualização de tokens para fins de autenticação. Essa classe é " "usada para fornecer funcionalidade para operações de atualização de tokens " -"como parte de um sistema de autenticação. Ela garante que os clientes possam " -"solicitar um token atualizado dentro dos limites de taxa definidos. A " +"como parte de um sistema de autenticação. Ela garante que os clientes possam" +" solicitar um token atualizado dentro dos limites de taxa definidos. A " "exibição depende do serializador associado para validar as entradas de " "atualização de token e produzir saídas apropriadas." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Representa uma visualização para verificação de JSON Web Tokens (JWT) usando " -"lógica específica de serialização e validação." +"Representa uma visualização para verificação de JSON Web Tokens (JWT) usando" +" lógica específica de serialização e validação." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementação do conjunto de visualizações do usuário.\n" -"Fornece um conjunto de ações que gerenciam dados relacionados ao usuário, " -"como criação, recuperação, atualizações, exclusão e ações personalizadas, " -"incluindo redefinição de senha, upload de avatar, ativação de conta e " -"mesclagem de itens visualizados recentemente. Essa classe estende os mixins " -"e o GenericViewSet para um tratamento robusto da API." +"Fornece um conjunto de ações que gerenciam dados relacionados ao usuário, como criação, recuperação, atualizações, exclusão e ações personalizadas, incluindo redefinição de senha, upload de avatar, ativação de conta e mesclagem de itens visualizados recentemente. Essa classe estende os mixins e o GenericViewSet para um tratamento robusto da API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/engine/authv/locale/ro_RO/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo rename to engine/authv/locale/ro_RO/LC_MESSAGES/django.mo index 29191706033e8c1b1aee86c64be55470f04d187d..d429168b0dd605eb96f9193c122905e09276c2a3 100644 GIT binary patch delta 1503 zcmYMzYe>^k7{~E5$!(@JXK6R9S!z}`*PKnuqCq2yDAS~iL`9a4rbVt^ba8}8K{vWl zQ4kSbDCokvLa&Mfqr@a5BIp9uo3b}j2oZgM{fCXQ&pBu3f6jBB^Zc(xyP`L9Q{qdF zF|izD((ow`!Y*`S501poScreH7z;)iQ-sy%#+^7358^Pqg_ZaOQ!#}_?C3^ebwke&kRlpVgG9O4Nx%s1wzqo@-3@cOWsDgIIu< zP#JlS3bZ>;V=s-5=)_2_mD;VSl%K(|_z3H5#(cm4{qQ&|BRfzF?L%eiBq~D}kg4V- zI`9Q5@E&}}I^R)O8Gq)n8oy8z^Yg3+i!nrh0oJA%vmXt9uUq5^!6>|y#*0Th;4SFjcp$O+U{+`+g8`e-b~;XW&cYfvX^L{;}@ z%)~aNZp?9~!*Q>r_E<_|GmV;oOyP;-{&v$1`@rwyWLX;CN2sso?jc9AFkQ$ ZS-;H_Y1$HvtdGPzI|n8t+PqgBe*sHPw88)Y delta 1486 zcmYk*SxD4T6vy#9n!Dz1Zj+;Fi{-eCC7N1dWk>{OCMa2Aivwc`DF$MLR8}vk;X@G8 zON9%OF@fMiixOcE8Z8ekFD)R1QS=Z5Mty(&eMrR5y?^ij-gD16{}-Nd&qS)9cZV^i zBf*#ue1NO)Ax7d1CgLkxkBhhkW7in75qDxVx^W$LV=UgpQuJW}{=h)|gGbpe&30c5Ee#vq(R z1wM@**ykOpl-@~)HTZ&B7@cmtn1mI~w_%;1F=x@>9EI*>IL~zya1Bw)1`Nd(9J3j7 z3X7O0(I^VI2FtMzxvP1KT+C}eGAQ7|Uvyx>CS&5U7E95MdVU9$+GnVgzQsWNiB!e> z#$b%2PGx9Em8_9J>YYB+`XLO#8|dPEb9;HfhNz~C*lZn;iHDh&VUAuvHPh_M|39NP zTtYRYKlxNoB%(5D$70OFG(3Vg(TlB^#-@>+Z!R-X4_wCxbU3Y=Ix&=a8HV9r)Xff} zGI0%c;4O^8QB;6a$QkA}DgaxqRf6rPK-y8I7(lNc%rmIQ@2C`(VPJs zZ_H`Tz^kaHx{oT!EGpnns1kld1?rz~HFG?cFfYXe*p*NIqZmBrfqcKRa1mA0SQ_IT zI97o-J8aLn)DzHpCQSawsI#w0dTi>Od2il+?=|eM$ zMfehx`p~V`#tGQVJO`uk9_qV(f_iTO6?l}-9TaPeZ)8Y!EPwK_{8Ql@3@)^;$m|E+B4bhz8v OJ?<8_7LGVag8l(`EUH=n diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/engine/authv/locale/ro_RO/LC_MESSAGES/django.po similarity index 65% rename from vibes_auth/locale/ro_RO/LC_MESSAGES/django.po rename to engine/authv/locale/ro_RO/LC_MESSAGES/django.po index 33aa8a72..5e74ca44 100644 --- a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/authv/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,263 +13,268 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Echilibru" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Comandă" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Ordine" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Informații personale" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Permisiuni" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Date importante" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Informații suplimentare" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autentificare" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Obțineți o pereche de jetoane" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "" "Obțineți o pereche de jetoane (refresh și access) pentru autentificare." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Reîmprospătați o pereche de jetoane" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Actualizați o pereche de jetoane (actualizare și acces)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verificarea unui jeton" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verificarea unui jeton (reîmprospătare sau acces)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Jetonul este valid" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Creați un utilizator nou" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Recuperarea detaliilor unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Actualizarea detaliilor unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Ștergeți un utilizator" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Resetați parola unui utilizator prin trimiterea unui e-mail de resetare a " "parolei" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Gestionarea încărcării avatarului pentru un utilizator" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Confirmați resetarea parolei unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Activați contul unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Linkul de activare este invalid sau contul este deja activat" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Fuzionați produsele recent vizualizate stocate de client" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Uuid codificat b64 al utilizatorului care ne-a recomandat noul utilizator." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Parola este prea slabă" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "E-mail malformat" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Număr de telefon malformat: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Contul a fost deja activat..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Produsele pe care acest utilizator le-a vizualizat cel mai recent (max 48), " "în ordine cronologică inversă." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupuri" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Lista dorințelor" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Atributele pot fi utilizate pentru a stoca date personalizate" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Limba este una dintre {LANGUAGES} cu implicit {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Limba este una dintre {settings.LANGUAGES} cu implicit " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adrese" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Închideți firele selectate" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Deschideți firele selectate" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Deschis" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Închis" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Utilizator" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personal" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistemul" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Pentru subiecte anonime" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Fir de chat" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Fire de chat" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Furnizați utilizatorul sau adresa de e-mail pentru firul anonim." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Destinatarul trebuie să fie un utilizator personal." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Mesaj de chat" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Mesaje de chat" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Pentru chat-urile anonime este necesar un e-mail valid." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Mesajul trebuie să aibă 1..1028 caractere." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Căutăm operatorul care să vă răspundă deja, așteptați!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -281,184 +286,182 @@ msgid "" msgstr "" "Reprezintă o entitate utilizator cu câmpuri și metode personalizate pentru " "funcționalitate extinsă. Această clasă extinde modelul AbstractUser și " -"integrează caracteristici suplimentare, cum ar fi autentificarea prin e-mail " -"personalizat, metode de validare, starea abonamentului, verificarea și " +"integrează caracteristici suplimentare, cum ar fi autentificarea prin e-mail" +" personalizat, metode de validare, starea abonamentului, verificarea și " "stocarea atributelor. De asemenea, oferă utilitare pentru gestionarea " "elementelor vizualizate recent și activare pe bază de token pentru " "verificarea conturilor. Modelul User este conceput pentru a gestiona cazuri " "de utilizare specifice pentru gestionarea îmbunătățită a utilizatorilor." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-mail" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Adresa de e-mail a utilizatorului" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Număr de telefon" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Numărul de telefon al utilizatorului" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Numele și prenumele" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Numele de familie" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Imagine profil utilizator" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Este verificat" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Statutul de verificare al utilizatorului" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Este activ" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Deselectați acest lucru în loc să ștergeți conturile" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Este abonat" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Starea abonării utilizatorului la buletinul informativ" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Jeton de activare" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Atribute" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Utilizator" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Utilizatori" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grup" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Simbol excepțional" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Jetoane restante" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token pe lista neagră" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Jetoane pe lista neagră" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` trebuie să fie un dicționar" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "" "Identificatorul de întreprindere este necesar în momentul înregistrării ca " "întreprindere" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "e-mail malformat: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Nu s-a găsit niciun cont activ" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Trebuie să setați atributul token_class pe clasă!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token pe lista neagră" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Jeton invalid" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "În jeton nu este prezentă nicio cerere uuid a utilizatorului" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Utilizatorul nu există" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Resetați parola" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Confirmarea resetării parolei" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Bună ziua %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Am primit o cerere de resetare a parolei dumneavoastră. Vă rugăm să vă " "resetați parola făcând clic pe butonul de mai jos:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "resetați parola" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți " -"următoarea adresă URL\n" +"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți următoarea adresă URL\n" " în browserul dvs. web:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -466,22 +469,22 @@ msgstr "" "dacă nu ați trimis această cerere, vă rugăm să ignorați acest\n" " e-mail." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Cele mai bune salutări,
Echipa %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Toate drepturile rezervate" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Activează-ți contul" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -490,7 +493,7 @@ msgstr "" "Vă mulțumim pentru înscrierea la %(project_name)s. Vă rugăm să vă activați " "contul făcând clic pe butonul de mai jos:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -498,22 +501,22 @@ msgstr "" "Activați\n" " cont" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activare cont" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetați parola" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -521,10 +524,10 @@ msgstr "" "Format invalid al numărului de telefon. Numărul trebuie să fie introdus în " "formatul: \"+999999999\". Sunt permise până la 15 cifre." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -537,13 +540,13 @@ msgstr "" "de bază a jetoanelor și asigură limitarea corespunzătoare a ratei pentru a " "proteja împotriva atacurilor prin forță brută." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Gestionează actualizarea jetoanelor în scopul autentificării. Această clasă " "este utilizată pentru a oferi funcționalitate pentru operațiunile de " @@ -553,7 +556,7 @@ msgstr "" "intrările de reîmprospătare a jetoanelor și pentru a produce ieșirile " "corespunzătoare." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -561,29 +564,22 @@ msgstr "" "Reprezintă o vizualizare pentru verificarea JSON Web Tokens (JWT) utilizând " "o serializare specifică și o logică de validare." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementarea setului de vizualizări ale utilizatorului.\n" -"Oferă un set de acțiuni care gestionează datele legate de utilizator, cum ar " -"fi crearea, recuperarea, actualizările, ștergerea și acțiunile " -"personalizate, inclusiv resetarea parolei, încărcarea avatarului, activarea " -"contului și îmbinarea elementelor vizualizate recent. Această clasă extinde " -"mixinele și GenericViewSet pentru o gestionare robustă a API." +"Oferă un set de acțiuni care gestionează datele legate de utilizator, cum ar fi crearea, recuperarea, actualizările, ștergerea și acțiunile personalizate, inclusiv resetarea parolei, încărcarea avatarului, activarea contului și îmbinarea elementelor vizualizate recent. Această clasă extinde mixinele și GenericViewSet pentru o gestionare robustă a API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/engine/authv/locale/ru_RU/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo rename to engine/authv/locale/ru_RU/LC_MESSAGES/django.mo index bc698ad976905a7c94accd51e72421aef17c9bcb..b0abca360e5d7a6431159005cda4a965649370b4 100644 GIT binary patch delta 1486 zcmYM!TS$~a6u|MbYnqmorg^t8FPWB=_pQ}(RVpe<%fc4HqMIcmx+N5~kXghkSt0}` z;e$a>m5V)y(2cGXm1Q6W*+U2l6+uQ((*HCIE+6}wnVoOuob%1M?H)_N$8s~y>Mj!z zSA<9qKEfIJ3g_W4M&V~n!6{sZ$&n(dSdO810u!+f!|)c`@ge%7l|=$D5Ow}MoR0}n z;+9w%*$k-Ld=qMsz2p?m#!j4rJs6BPFdPRl4PT=T|KMEAjW&UlB9~P1rRz6h3tqt8 zxFE)D7OIai5w)O3ei=2=VV`5D8~s9(k|b8sO4(5}E<(+y0`T7}w)%qrfDTf;!KEJMaj0;@tx3A4y|pp*iJs zsE4B!m*OjYhQCou_i(K#eb+kkhw}hi86QL4z*S@(Q8!l8e~Tn3ISx~qdep$rqgH6p zvCCv+Wmoo)JS2EIhE?cAEomqxFdozJI&Q#N{EnM(E~{~x#fciY$6GTq%(8%%@E-hs z<+ZIJr}tuDp2bq+eH!#2IH+;I%T-f%urZ^fH6nVt=k1Ls2?)qsnVFN3?fnur5j*`; P$4Gwibk94Le<}DMu{*)z delta 1467 zcmXZceN4?!7{Kx8mYa}V6|QngQ3`bxz0lk3?JlK8NHv5|(;qgMY~gO+Q}b^AFtV9h zn3r8D;^D?&q9y&+nY)Jiq66A9h$ycUbPt2=eBO zh-a$EIDCL(@Ci=BezfCTOu(PG03)Y~%)?JKY0T1CsJcVI+8KdwfCSwm~<97_lInzxb>BuE+zI6Rfcm(%j z9R^2x%|aWZO+>p;BR`57NPoZ~)Q!F(!Ak_IX{M4U>UL;bCXHir54!LB6 zFRg{tH0lR)(1siF0Pe(W{DmY3DoMojT(?IU@xwsKZrUnmYavL5RalglgGmT(nZ6M50NsEomr-sI#C}< z7wXCGU?uhh#=|+D{_a4{%mTFIDlEYrco^?vEoLm`mBrIokFU|I&wAl9UJYD_|0gL9D=UNHt3at7_oee9dDcEmP`g z@*a%7@-X^w`Obu9S}fvwF|I#sdWEafy~gD(soo#k+U#kHZQQzT)9w~eY@6@V)Z!3p XdWti}>9aU~#GLz^HP;uPeKzbr11Peb diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/engine/authv/locale/ru_RU/LC_MESSAGES/django.po similarity index 64% rename from vibes_auth/locale/ru_RU/LC_MESSAGES/django.po rename to engine/authv/locale/ru_RU/LC_MESSAGES/django.po index fc0a30a7..668b3869 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/authv/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,263 +13,268 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Баланс" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Заказ" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Заказы" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Личная информация" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Разрешения" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Важные даты" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Дополнительная информация" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Аутентификация" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Получение пары токенов" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Получите пару токенов (refresh и access) для аутентификации." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Обновить пару токенов" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Обновление пары токенов (обновление и доступ)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Проверка токена" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Проверка токена (обновление или доступ)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Токен действителен" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Создайте нового пользователя" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Получение информации о пользователе" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Обновление данных пользователя" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Удалить пользователя" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Сброс пароля пользователя путем отправки электронного сообщения о сбросе " "пароля" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Обработка загрузки аватара для пользователя" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Подтверждение сброса пароля пользователя" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Пароли не совпадают" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Активация учетной записи пользователя" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Ссылка на активацию недействительна или аккаунт уже активирован" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" -msgstr "Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" +msgstr "" +"Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "b64-кодированный uuid пользователя, который направил к нам нового " "пользователя." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Пароль слишком слабый" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Некорректное письмо" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Некорректный номер телефона: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Аккаунт уже активирован..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Токен недействителен!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" -"Продукты, которые этот пользователь просматривал в последнее время (не более " -"48), в обратном хронологическом порядке." +"Продукты, которые этот пользователь просматривал в последнее время (не более" +" 48), в обратном хронологическом порядке." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Группы" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Список желаний" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Аватар" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Атрибуты могут использоваться для хранения пользовательских данных" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Язык - один из {LANGUAGES}, по умолчанию {LANGUAGE_CODE}." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Язык - один из {settings.LANGUAGES}, по умолчанию {settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Адреса" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Закрыть выбранные нити" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Открыть выбранные нити" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Открыть" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Закрытый" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Пользователь" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Персонал" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Система" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Для анонимных потоков" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Нить чата" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Нити чата" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Укажите пользователя или электронную почту для анонимной темы." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Получатель должен быть штатным пользователем." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Сообщение в чате" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Сообщения в чате" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Для анонимных чатов требуется действительный адрес электронной почты." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Сообщение должно содержать 1...1028 символов." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Мы ищем оператора, чтобы ответить вам, держитесь!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -279,206 +284,204 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"Представляет сущность User с настраиваемыми полями и методами для расширения " -"функциональности. Этот класс расширяет модель AbstractUser и включает в себя " -"дополнительные возможности, такие как пользовательский вход по электронной " -"почте, методы проверки, статус подписки, верификация и хранение атрибутов. " -"Он также предоставляет утилиты для управления недавно просмотренными " -"элементами и активации на основе токенов для проверки учетных записей. " -"Модель User предназначена для обработки конкретных случаев использования для " -"расширенного управления пользователями." +"Представляет сущность User с настраиваемыми полями и методами для расширения" +" функциональности. Этот класс расширяет модель AbstractUser и включает в " +"себя дополнительные возможности, такие как пользовательский вход по " +"электронной почте, методы проверки, статус подписки, верификация и хранение " +"атрибутов. Он также предоставляет утилиты для управления недавно " +"просмотренными элементами и активации на основе токенов для проверки учетных" +" записей. Модель User предназначена для обработки конкретных случаев " +"использования для расширенного управления пользователями." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Электронная почта" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Адрес электронной почты пользователя" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Номер телефона" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Номер телефона пользователя" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Имя" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Фамилия" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Изображение профиля пользователя" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Проверено" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Статус верификации пользователя" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Активен" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Снимите этот флажок вместо удаления учетных записей" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Подписан" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Статус подписки пользователя на рассылку новостей" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Активационный токен" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Атрибуты" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Пользователь" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Пользователи" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Группа" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Выдающийся жетон" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Выпущенные токены" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Токен в черном списке" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Чёрный список токенов" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`Атрибуты` должны быть словарем" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Бизнес-идентификатор необходим при регистрации в качестве предприятия" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "malformed email: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Активная учетная запись не найдена" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Необходимо установить атрибут token_class для класса!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Токен занесен в черный список" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Неверный токен" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "В токене отсутствует утверждение uuid пользователя" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Пользователь не существует" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Сбросить пароль" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Логотип" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Подтверждение сброса пароля" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Привет %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Мы получили запрос на сброс вашего пароля. Пожалуйста, сбросьте пароль, " "нажав на кнопку ниже:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "сброс пароля" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий " -"URL-адрес\n" +"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий URL-адрес\n" " в свой веб-браузер:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" "Если вы не отправляли этот запрос, пожалуйста, проигнорируйте это письмо." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "С наилучшими пожеланиями,
Команда %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Все права защищены" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Активируйте свой аккаунт" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -487,7 +490,7 @@ msgstr "" "Спасибо, что зарегистрировались на сайте %(project_name)s. Пожалуйста, " "активируйте свой аккаунт, нажав на кнопку ниже:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -495,22 +498,22 @@ msgstr "" "Активировать\n" " аккаунт" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Активировать учетную запись" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Сброс пароля" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -518,10 +521,10 @@ msgstr "" "Неверный формат телефонного номера. Номер должен быть введен в формате: " "\"+999999999\". Допускается до 15 цифр." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -529,26 +532,26 @@ msgstr "" "Представляет собой представление для получения пары токенов доступа и " "обновления и данных пользователя. Это представление управляет процессом " "аутентификации на основе токенов, когда клиенты могут получить пару JWT-" -"токенов (доступ и обновление), используя предоставленные учетные данные. Оно " -"построено поверх базового представления токенов и обеспечивает надлежащее " +"токенов (доступ и обновление), используя предоставленные учетные данные. Оно" +" построено поверх базового представления токенов и обеспечивает надлежащее " "ограничение скорости для защиты от атак грубой силы." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Обрабатывает обновление токенов для целей аутентификации. Этот класс " "используется для обеспечения функциональности операций обновления токенов в " "рамках системы аутентификации. Он гарантирует, что клиенты могут запросить " -"обновленный токен в рамках установленных ограничений скорости. Представление " -"полагается на ассоциированный сериализатор для проверки входных данных " +"обновленный токен в рамках установленных ограничений скорости. Представление" +" полагается на ассоциированный сериализатор для проверки входных данных " "обновления маркера и создания соответствующих выходных данных." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -556,29 +559,22 @@ msgstr "" "Представляет собой представление для проверки JSON Web Tokens (JWT) с " "использованием специальной логики сериализации и валидации." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Реализация набора пользовательских представлений.\n" -"Предоставляет набор действий, которые управляют пользовательскими данными, " -"такими как создание, получение, обновление, удаление, а также " -"пользовательскими действиями, включая сброс пароля, загрузку аватара, " -"активацию учетной записи и объединение недавно просмотренных элементов. Этот " -"класс расширяет миксины и GenericViewSet для надежной работы с API." +"Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo b/engine/authv/locale/sv_SE/LC_MESSAGES/django.mo similarity index 66% rename from vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo rename to engine/authv/locale/sv_SE/LC_MESSAGES/django.mo index 0993166fda501f6bf7718faa1b7421fbd1ae5672..149d7c1fbd6e83ee742cb0f36fe9d0a5f4edd16c 100644 GIT binary patch delta 1505 zcmYM!TS!zv9LMol%iXmy&C+bMTFvgI+qSC&Mr>tLXxK%v3q-h~c9Ga!q10L^q=@W7 zN7eZC71SPEvfm zF(#H}ObR~2(b$h^_zJV}GtS0exDaPeHfAnvzzNulGqDXPVlS59Lrlgb7IC5*H9rkA zFgM%8%~Toz24tl@VK1_mIgDem15@!5j>8)`32)*~ufNreMu}T|3mHZ-3!#)f`i zp$qTX{U_MNI&V=4#ZP;!1#h9w=qu{MAuPnvxtw1TM}#MMu$Y5xV!SWk3V0c5>ABT7 z1}pFs^QzHDe}F7x_8jKm8ua2BB!;-@rQv6wAC>7SZk9@#i_0;HGq4erX$R^Ey3vhy zk%i1-yZ;3P^oKAH^XFL=DMJNXWxE}H>~CslDARV-**!o7@ETX(AO>*}_0pxR!AxvI zEqDgqcpj6n3tiZa%KSR&4!pw_{Eju)xPZXe-@Ks_#Q_cAHr_E^j(SYN1E|c8U^$+% z$KRti8bn>bVdQ?AWG)CX8!s-#wYDwDH8aO3+zgy`y$8eCSxEi$k5SY~3we-xW`d~k&3F(S zP!D`X9Z>~orQ;4P$Ni{4@8AUNN2Z#OsK6$&>liFTts6o<0jAntZEYN3;O~2ix@_I3 zGk=77a0D~ZwZ!^>cu*gvF64rnYpBY+L|sNlAhFw(;ZP9_r~3C^sI8xEiL>rvha;4D zl5&4sN_1B&R^Lz?EjV{FYs&v#;!4&kr_=BA2MYp;Z#kFK7W|u79$Hsc6)G#;c*whN YSJ)ek?Q96|jD)?-|7IkvF06F@0ZF~J)c^nh delta 1466 zcmXZce`w5c9LMqZjoaPWubZEnZEiEaw%MJXAGsDbX5>dJF--}>Zc>y<%sRsep*4Sy z{3=q^OeczF>Z0UlZA)nhB_)YJ_-854*S@#b9-q%=-|y%1e!oBOyK9l5#_rst=pr*~ z9&eU{_i-dX!3>P!MC`+9_ybFE%mlL;xEOudgj28u$KX}0z!NKiC7tw=V ziTMNUW}la+grbN1&W5*8cQk-{aS#Le8!NIvu9wEX2vU6_x1`)D?817w;e& z+5N=459cr+#6tAVbSg3j6=+q$6&U1vt7V`}+fa9R4;4ThtMEO}#T@FTrmV$r*ofM& z6}@;2-FOB)*on&g5~>GY;UWBr4Y;+0z&PKYGuVs$TEOLe#?&0^F$K4yGT)71Je*j6 zj5_EUs`*|c{b`?&m~9AW<5U_()*)?XCy^rCO^hnj*9YU3~}5)E_Vn|Dm2AO<6TBKvgb)y6R=P4G#pUzy9%&1#R>P=`+iuZdxzL1Gob9 zLL7BPGe{>B!?+4pq5{2uKD>iGYCWjHe&Q(fak}=+MZN+oRKCGEcr^>UqX??m+E90X z9rfaS%)&3&j(<>JOf4bjV|oHrnJ!c_4u)boJz1`C8yRz}!+in6Kb5f#?|hfbVlPtS zsoAS4*VL@5tf^kx>fhhg9Pw}4zGKV2UCsWM*u(Kllii`RU|BHc%Da)#*;SeydskZP F`46U_rDFg9 diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/engine/authv/locale/sv_SE/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/sv_SE/LC_MESSAGES/django.po rename to engine/authv/locale/sv_SE/LC_MESSAGES/django.po index 9d79f9db..a9fb3948 100644 --- a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/authv/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,262 +13,266 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Balans" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Beställning" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Beställningar" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Personlig information" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Behörigheter" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Viktiga datum" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Ytterligare information" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Autentisering" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Skaffa ett tokenpar" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Hämta ett tokenpar (refresh och access) för autentisering." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Uppdatera ett tokenpar" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Uppdatera ett tokenpar (uppdatering och åtkomst)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Verifiera en token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Verifiera en token (uppdatering eller åtkomst)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Token är giltig" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Skapa en ny användare" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Hämta uppgifter om en användare" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Uppdatera en användares uppgifter" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Ta bort en användare" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Återställ en användares lösenord genom att skicka ett e-postmeddelande om " "återställt lösenord" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Hantera uppladdning av avatar för en användare" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bekräfta återställning av en användares lösenord" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Lösenorden stämmer inte överens" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Aktivera en användares konto" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Aktiveringslänken är ogiltig eller kontot är redan aktiverat" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "Sammanfoga klientlagrade nyligen visade produkter" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" "Den användares b64-kodade uuid som hänvisade den nya användaren till oss." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Lösenordet är för svagt" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Missvisande e-post" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missbildat telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontot har redan aktiverats..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token är ogiltig!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "De produkter som den här användaren har tittat på senast (max 48), i omvänd " "kronologisk ordning." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Grupper" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Önskelista" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Attribut kan användas för att lagra anpassade data" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Språk är en av {LANGUAGES} med standard {LANGUAGE_CODE}." +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Språk är en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresser" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Stäng valda trådar" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Öppna valda trådar" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Öppna" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Stängt" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Användare" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personal" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "System" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "För anonyma trådar" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Chattråd" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Chatt-trådar" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Ange användare eller e-post för anonym tråd." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Mottagaren måste vara en personalanvändare." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Chattmeddelande" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Chattmeddelanden" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Giltig e-postadress krävs för anonyma chattar." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Meddelandet måste innehålla 1..1028 tecken." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Vi söker efter en operatör som kan svara dig redan nu, så håll ut!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -286,166 +290,165 @@ msgstr "" "aktivering för att verifiera konton. User-modellen är utformad för att " "hantera specifika användningsfall för förbättrad användarhantering." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-post" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Användarens e-postadress" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefonnummer" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Användarens telefonnummer" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Förnamn" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Efternamn" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Bild på användarprofil" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Är verifierad" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Användarens verifieringsstatus" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Är aktiv" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Avmarkera detta istället för att radera konton" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Är prenumererad" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Användarens status för prenumeration på nyhetsbrev" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Aktiveringstoken" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Attribut" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Användare" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Användare" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grupp" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Utestående symbol" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Utestående polletter" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Svartlistad token" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Svartlistade tokens" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` måste vara en ordbok" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Företagsidentifierare krävs när du registrerar dig som företag" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "missbildad e-post: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Inget aktivt konto hittades" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Måste sätta attributet token_class på klassen!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token blacklisted" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Ogiltig token" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Inget användar-uuid-krav finns i token" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Användaren finns inte" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Återställ ditt lösenord" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logotyp" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Bekräftelse på återställning av lösenord" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Vi har fått en begäran om att återställa ditt lösenord. Vänligen återställ " "ditt lösenord genom att klicka på knappen nedan:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "återställa lösenord" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -453,7 +456,7 @@ msgstr "" "Om knappen ovan inte fungerar, vänligen kopiera och klistra in följande URL\n" " i din webbläsare:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -461,31 +464,31 @@ msgstr "" "om du inte har skickat denna begäran, vänligen ignorera detta\n" " e-post." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Bästa hälsningar,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Alla rättigheter förbehålls" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Aktivera ditt konto" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Tack för att du registrerat dig för %(project_name)s. Vänligen aktivera ditt " -"konto genom att klicka på knappen nedan:" +"Tack för att du registrerat dig för %(project_name)s. Vänligen aktivera ditt" +" konto genom att klicka på knappen nedan:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -493,22 +496,22 @@ msgstr "" "Aktivera\n" " konto" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivera konto" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Återställ lösenord" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -516,37 +519,37 @@ msgstr "" "Ogiltigt format på telefonnumret. Numret måste anges i formatet: " "\"+999999999\". Upp till 15 siffror är tillåtna." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Representerar en vy för att hämta ett par access- och refresh-tokens och " "användardata. Den här vyn hanterar processen för hantering av tokenbaserad " -"autentisering där klienter kan hämta ett par JWT-tokens (access och refresh) " -"med hjälp av angivna referenser. Den är byggd ovanpå en bas-tokenvy och " +"autentisering där klienter kan hämta ett par JWT-tokens (access och refresh)" +" med hjälp av angivna referenser. Den är byggd ovanpå en bas-tokenvy och " "säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-" "attacker." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Hanterar uppdatering av tokens för autentiseringsändamål. Denna klass " "används för att tillhandahålla funktionalitet för uppdatering av token som " -"en del av ett autentiseringssystem. Den säkerställer att klienter kan begära " -"en uppfräschad token inom definierade hastighetsgränser. Vyn förlitar sig på " -"den associerade serialiseraren för att validera inmatningar för " +"en del av ett autentiseringssystem. Den säkerställer att klienter kan begära" +" en uppfräschad token inom definierade hastighetsgränser. Vyn förlitar sig " +"på den associerade serialiseraren för att validera inmatningar för " "tokenuppdatering och producera lämpliga utmatningar." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -554,29 +557,22 @@ msgstr "" "Representerar en vy för verifiering av JSON Web Tokens (JWT) med hjälp av " "specifik serialiserings- och valideringslogik." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Token är ogiltig" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering av användarvyuppsättning.\n" -"Tillhandahåller en uppsättning åtgärder som hanterar användarrelaterade data " -"som skapande, hämtning, uppdateringar, borttagning och anpassade åtgärder " -"inklusive återställning av lösenord, uppladdning av avatar, kontoaktivering " -"och sammanslagning av nyligen visade objekt. Denna klass utökar mixins och " -"GenericViewSet för robust API-hantering." +"Tillhandahåller en uppsättning åtgärder som hanterar användarrelaterade data som skapande, hämtning, uppdateringar, borttagning och anpassade åtgärder inklusive återställning av lösenord, uppladdning av avatar, kontoaktivering och sammanslagning av nyligen visade objekt. Denna klass utökar mixins och GenericViewSet för robust API-hantering." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Du har redan aktiverat kontot..." diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo b/engine/authv/locale/th_TH/LC_MESSAGES/django.mo similarity index 68% rename from vibes_auth/locale/th_TH/LC_MESSAGES/django.mo rename to engine/authv/locale/th_TH/LC_MESSAGES/django.mo index a7b3b7b824dd50bfbfafc8e7c1591d85871f4ec1..5e3b39fc076b40ca95fe2f54d36efce66af955b4 100644 GIT binary patch delta 1486 zcmYMzc}Ubj6u|Mfrkj!`X>RM0B3@BuW@>4Nnn#CLT8WfJ2X+{CphjfTLL?EmMp%#? zNR}Z&RBVJqe}q=Kr+i%4UNKWF$1iXz} zkvFJ`zIV|$OJfNAu{z3>widPIS8+D>V3kc|5L<`~qeb}0faM>IC7u;y%)&*)m8eI1 z9@k?l4owjm#wudhD-LcujRo=HQTJELl7t-i77pSZvO?26g;x z48xC@gd<21C1eQ~5>qf2yHJnr2L_`f%b182tS_1W8zRkE$bfH_$=Rj?wYZc1$faiC zljtPwLY=S|^-_MY;z7$_s5{jQwHyxM0CwVWJWXdT>x-9$FC~p$A(BcQM;XXLHlyye z+43PZYI_lBA#%<`6CvpvU;BNGyZg9s+k;B-5E{<2i@?~6;D_u6`4wwV=K=e7Eymao6=Qg zq7%58xEmK@&}z;NbMOVuTVpCTj=E67T7Dt83AvB*6E&geVv)UAiCU2!)QwG`z86?x zHkMsdVHyo|XvrTT$;vp^V)i=o;vLi-J;6|pY8Z7PFTW`rpS3}x3|$z5eV*#6p*B4v zna97MHmtu&&jtU*Hd~(OWk7FWK;54D`szdb>QY*o9O09Zr^8WTx2L71Wu&BgMx&f@ RlaE^LxyvUbPk!#X;D5T;$WH(O delta 1467 zcmXxjSxA&o6u|K_ZW(D>96YJ+$E+P$) zA``I}1F#>%(1%etj4AjP=c0X@$ZRaYDOih1=tets;!^ZtAb!Un{E0gMH%`T{DDlX2 z28m=*^HC>MA-SXuC*e5^#U>2F4vfGqoP!TA7eC`EqzGGl)$#tv!iZ#24^3_TxNCK0x`Syx2w?;wa>Bx`>1Co93JMZlZSJ zF4i;e5nd3%ji7Qft|RE=fO)%;#$-* zZAV?O2lY}8Sn&(XG1Q%Y!)54ND)JWF@B|*>VFLN(6N3O+Iw@ZygE*WvP=h#8cj~sh zgC~hcP+m4YJCV&uD68saD?=^h4C;||Tk$JPzhcwL47|+u&BgRz&nB(JEVLOn z5x3w1{D@yLrc~q!2CXt38bVDZWg=G~9l4M447H$NSdCe$O-DLVFXt=N_r_5-<|ucW zL1npVc^gu!3}L-aSYuwih^fR^(9Ti$P!o;tKc({{){3mhDx8Vk-r5Ovn`0}(G=2m5 z{r}_iHV0?hY~p=7(H9b3?yM-Obe0rtJRN_mwxK3|-~Q^|N9!8m-QK>)!l1y+^o;Zj SuPrVrsU@*snYX6kQrKUeXSxRf diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/engine/authv/locale/th_TH/LC_MESSAGES/django.po similarity index 64% rename from vibes_auth/locale/th_TH/LC_MESSAGES/django.po rename to engine/authv/locale/th_TH/LC_MESSAGES/django.po index ad7c8d3d..6a0d1641 100644 --- a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/authv/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,257 +13,263 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "สมดุล" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "คำสั่ง" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "คำสั่ง" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "ข้อมูลส่วนตัว" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "สิทธิ์การใช้งาน" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "วันที่สำคัญ" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "การยืนยันตัวตน" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "รับคู่โทเค็น" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "รับคู่โทเค็น (รีเฟรชและเข้าถึง) สำหรับการยืนยันตัวตน" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "รีเฟรชคู่โทเค็น" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "รีเฟรชคู่โทเค็น (รีเฟรชและเข้าถึง)" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "ตรวจสอบโทเค็น" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "ตรวจสอบโทเค็น (รีเฟรชหรือเข้าถึง)" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "โทเค็นนี้ใช้ได้" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "สร้างผู้ใช้ใหม่" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "ดึงข้อมูลรายละเอียดของผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "อัปเดตข้อมูลผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "ลบผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "รีเซ็ตรหัสผ่านของผู้ใช้โดยการส่งอีเมลรีเซ็ตรหัสผ่าน" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "จัดการการอัปโหลดอวาตาร์สำหรับผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "ยืนยันการรีเซ็ตรหัสผ่านของผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "รหัสผ่านไม่ตรงกัน" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "เปิดใช้งานบัญชีผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้องหรือบัญชีได้รับการเปิดใช้งานแล้ว" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "รวมสินค้าที่ลูกค้าดูล่าสุดซึ่งเก็บไว้ในระบบของลูกค้า" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "ผู้ใช้ที่เข้ารหัส uuid ด้วย b64 ซึ่งแนะนำผู้ใช้ใหม่ให้เรามา" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "รหัสผ่านอ่อนแอเกินไป" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "อีเมลไม่ถูกต้อง" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "บัญชีได้รับการเปิดใช้งานแล้ว..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" -msgstr "สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" +msgstr "" +"สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "กลุ่ม" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "อวตาร" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "คุณลักษณะอาจใช้เพื่อเก็บข้อมูลที่กำหนดเอง" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "ภาษาเป็นหนึ่งใน {LANGUAGES} ที่มีค่าเริ่มต้น {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"ภาษาเป็นหนึ่งใน {settings.LANGUAGES} ที่มีค่าเริ่มต้น " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "ที่อยู่" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "ปิดกระทู้ที่เลือก" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "เปิดกระทู้ที่เลือก" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "เปิด" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "ปิด" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "ผู้ใช้" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "พนักงาน" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "ระบบ" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "สำหรับกระทู้ที่ไม่ระบุชื่อ" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "หัวข้อสนทนา" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "หัวข้อสนทนา" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "กรุณาให้ข้อมูลผู้ใช้หรืออีเมลสำหรับกระทู้แบบไม่ระบุตัวตน" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "ข้อความแชท" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "ข้อความแชท" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "จำเป็นต้องมีอีเมลที่ถูกต้องสำหรับการแชทแบบไม่ระบุตัวตน" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "ข้อความต้องมีความยาว 1..1028 ตัวอักษร" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "เรากำลังค้นหาผู้ดำเนินการเพื่อตอบคุณอยู่ กรุณารอสักครู่!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -273,263 +279,270 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"แทนที่เอนทิตีผู้ใช้ที่มีฟิลด์และเมธอดที่ปรับแต่งได้สำหรับฟังก์ชันการทำงานที่ขยายออกไป " -"คลาสนี้สืบทอดมาจากโมเดล AbstractUser และรวมคุณสมบัติเพิ่มเติม เช่น " -"การเข้าสู่ระบบด้วยอีเมลที่กำหนดเอง วิธีการตรวจสอบความถูกต้อง สถานะการสมัครสมาชิก การยืนยัน " -"และการจัดเก็บแอตทริบิวต์ " -"นอกจากนี้ยังมียูทิลิตี้สำหรับจัดการรายการที่ดูล่าสุดและการเปิดใช้งานแบบใช้โทเค็นเพื่อยืนยันบัญชี " +"แทนที่เอนทิตีผู้ใช้ที่มีฟิลด์และเมธอดที่ปรับแต่งได้สำหรับฟังก์ชันการทำงานที่ขยายออกไป" +" คลาสนี้สืบทอดมาจากโมเดล AbstractUser และรวมคุณสมบัติเพิ่มเติม เช่น " +"การเข้าสู่ระบบด้วยอีเมลที่กำหนดเอง วิธีการตรวจสอบความถูกต้อง " +"สถานะการสมัครสมาชิก การยืนยัน และการจัดเก็บแอตทริบิวต์ " +"นอกจากนี้ยังมียูทิลิตี้สำหรับจัดการรายการที่ดูล่าสุดและการเปิดใช้งานแบบใช้โทเค็นเพื่อยืนยันบัญชี" +" " "โมเดลผู้ใช้ได้รับการออกแบบมาเพื่อจัดการกรณีการใช้งานเฉพาะสำหรับการจัดการผู้ใช้ที่ดียิ่งขึ้น" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "อีเมล" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "ที่อยู่อีเมลของผู้ใช้" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "หมายเลขโทรศัพท์" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "หมายเลขโทรศัพท์ผู้ใช้" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "ชื่อ" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "นามสกุล" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "รูปภาพโปรไฟล์ผู้ใช้" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "ได้รับการยืนยันแล้ว" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "สถานะการยืนยันของผู้ใช้" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "กำลังใช้งานอยู่" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "ยกเลิกการเลือกสิ่งนี้แทนการลบบัญชี" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "สมัครสมาชิกแล้ว" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "สถานะการสมัครสมาชิกจดหมายข่าวของผู้ใช้" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "โทเค็นการเปิดใช้งาน" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "คุณลักษณะ" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "ผู้ใช้" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "ผู้ใช้" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "กลุ่ม" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "โทเค็นที่ยังไม่ได้ใช้" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "โทเค็นที่ถูกขึ้นบัญชีดำ" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` ต้องเป็นพจนานุกรม" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "จำเป็นต้องระบุรหัสประจำตัวธุรกิจเมื่อลงทะเบียนเป็นธุรกิจ" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "อีเมลไม่ถูกต้อง: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "ไม่พบบัญชีที่ใช้งานอยู่" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "ต้องตั้งค่าแอตทริบิวต์ token_class บนคลาส!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "โทเค็นถูกขึ้นบัญชีดำ" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "ไม่มีการอ้างสิทธิ์ uuid ของผู้ใช้ในโทเค็น" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "ผู้ใช้ไม่มีอยู่" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "รีเซ็ตรหัสผ่านของคุณ" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "โลโก้" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "การยืนยันการรีเซ็ตรหัสผ่าน" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" -"เราได้รับคำขอให้คุณรีเซ็ตรหัสผ่านของคุณ กรุณาทำการรีเซ็ตรหัสผ่านของคุณโดยคลิกที่ปุ่มด้านล่าง:" +"เราได้รับคำขอให้คุณรีเซ็ตรหัสผ่านของคุณ " +"กรุณาทำการรีเซ็ตรหัสผ่านของคุณโดยคลิกที่ปุ่มด้านล่าง:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "รีเซ็ตรหัสผ่าน" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" -msgstr "หากปุ่มด้านบนไม่ทำงาน โปรดคัดลอกและวาง URL ต่อไปนี้ลงในเว็บเบราว์เซอร์ของคุณ:" +msgstr "" +"หากปุ่มด้านบนไม่ทำงาน โปรดคัดลอกและวาง URL " +"ต่อไปนี้ลงในเว็บเบราว์เซอร์ของคุณ:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "หากคุณไม่ได้ส่งคำขอนี้ โปรดละเว้นอีเมลนี้" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "สงวนลิขสิทธิ์" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "เปิดใช้งานบัญชีของคุณ" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"ขอบคุณที่ลงทะเบียนสำหรับ %(project_name)s กรุณาเปิดใช้งานบัญชีของคุณโดยคลิกที่ปุ่มด้านล่าง:" +"ขอบคุณที่ลงทะเบียนสำหรับ %(project_name)s " +"กรุณาเปิดใช้งานบัญชีของคุณโดยคลิกที่ปุ่มด้านล่าง:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "เปิดใช้งานบัญชี" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | เปิดใช้งานบัญชี" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\". " -"อนุญาตให้ใช้ได้ถึง 15 หลัก." +"รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\"." +" อนุญาตให้ใช้ได้ถึง 15 หลัก." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"แสดงมุมมองสำหรับการรับคู่ของโทเค็นการเข้าถึงและโทเค็นการรีเฟรช รวมถึงข้อมูลของผู้ใช้ " -"มุมมองนี้จัดการกระบวนการตรวจสอบสิทธิ์ที่ใช้โทเค็น โดยลูกค้าสามารถรับคู่ของโทเค็น JWT " -"(โทเค็นการเข้าถึงและโทเค็นการรีเฟรช) โดยใช้ข้อมูลประจำตัวที่ให้มา " -"มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ " -"brute force" +"แสดงมุมมองสำหรับการรับคู่ของโทเค็นการเข้าถึงและโทเค็นการรีเฟรช " +"รวมถึงข้อมูลของผู้ใช้ มุมมองนี้จัดการกระบวนการตรวจสอบสิทธิ์ที่ใช้โทเค็น " +"โดยลูกค้าสามารถรับคู่ของโทเค็น JWT (โทเค็นการเข้าถึงและโทเค็นการรีเฟรช) " +"โดยใช้ข้อมูลประจำตัวที่ให้มา " +"มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ" +" brute force" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "จัดการการรีเฟรชโทเค็นเพื่อวัตถุประสงค์ในการยืนยันตัวตน " -"คลาสนี้ใช้เพื่อให้บริการฟังก์ชันสำหรับการรีเฟรชโทเค็นเป็นส่วนหนึ่งของระบบยืนยันตัวตน " -"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้ " +"คลาสนี้ใช้เพื่อให้บริการฟังก์ชันสำหรับการรีเฟรชโทเค็นเป็นส่วนหนึ่งของระบบยืนยันตัวตน" +" " +"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้" +" " "หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -537,27 +550,26 @@ msgstr "" "แสดงมุมมองสำหรับการตรวจสอบโทเค็นเว็บ JSON (JWT) " "โดยใช้การแปลงลำดับและการตรวจสอบความถูกต้องตามตรรกะเฉพาะ" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" -"การใช้งานชุดมุมมองผู้ใช้ ให้ชุดของการดำเนินการที่จัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้ เช่น การสร้าง " -"การดึงข้อมูล การอัปเดต การลบ และการดำเนินการที่กำหนดเอง รวมถึงการรีเซ็ตรหัสผ่าน " -"การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ " -"GenericViewSet เพื่อการจัดการ API ที่มีความแข็งแกร่ง" +"การใช้งานชุดมุมมองผู้ใช้ " +"ให้ชุดของการดำเนินการที่จัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้ เช่น การสร้าง " +"การดึงข้อมูล การอัปเดต การลบ และการดำเนินการที่กำหนดเอง " +"รวมถึงการรีเซ็ตรหัสผ่าน การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี " +"และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " +"เพื่อการจัดการ API ที่มีความแข็งแกร่ง" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..." diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo b/engine/authv/locale/tr_TR/LC_MESSAGES/django.mo similarity index 65% rename from vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo rename to engine/authv/locale/tr_TR/LC_MESSAGES/django.mo index 654055660528a82a09d5ea8ad0a2a1a1dbe0e4cb..f94278cdf8bd1e9fe6f452ce39760b14500b00f0 100644 GIT binary patch delta 1499 zcmYMzTS!z<6oBD1mOA4lr_Aw^mZn*n+N73P297#dQfh(O4SguH5tY0JB{@)tpd%&` z7!^@qFF`6pJ_U9mLGZx@AHtwa!k(gnuppv;c}^xW-`;!X?7i07>x?$cHH^jwc#n!m zyF*^kKuak#ANKpNF2ige2sw^z$QUxMg4sQZos4% z@yaF!xh$xa<_{W?v!n|{@fL>T0}R6v+=$OG9p7L+{>F8qu$Y)BqQPw+{-)}_XSWcd|}}#xaa}at4T)#UP68DE9zA( zV-vqyL-aY!Tecexo4&=ZtcTM;TR2~w4D_H%%)}lfNqLH8IE&g`328=PF0?W~WqQ_J zZ^RJRyKz6>z!aQDteRv!voYY@8aO^hjHVvt=6rpx~ z6JEzYtigzEqe9IX#rzr`#38if0`elschrN{@u9s_gqqNK)C5{l6Zhp*8wWi$znDVJ zY!RuF1m+sASuX19RE#ZHW3JC2w=&(@HcgMP)RsgiO)M5_59Q9?B6B83vLJdl93j z(4y$63kVZN5?UCMbWtcDiy%vq9;}CiKBMxCCj$#}>z)YONLR`WqOiwZr$wz+0$sb+61+StPn{Y$2 z&seBA*~q91HS+<~M5ayWQ8!vdl9w1((@JHco;U~fMCGXS>dm+v$w~S!18<^MWCAtO z7d{@Y@i2>_*pOnB_AF}22hoOO*lH2^fcuH_QjG=LQ8(;CO<)kMID+IVk1+(_pjK=S z$64n)<`DZv?8e=_L%pMA)Qnf~09v<+6a`R1e96QsT=Wp*6&yzs{)9U3GwM|>;6>hB z#(d)DorX6|Ut=2M|8Oh&i;YgwjY=>ZJ;)*D9v;Cd)aDA`Z6xNvP-3TPtvTL^;f!C# zgXqO{e1=+~FSvF<3?g2^EcTbxwFmB!3+9m0fI6`kEAcjJ$rq4}C3%mrU=fB8*I*dd zq4q?xIo^t;#1~Kx^a!ux47#z7Psz&uGRZ?X&Z0I`C1ubqZ$!=1WyYOYOx%mQ@i^*+ zlc*(~M%I=eSb{MQBY|2hBpya>-nU5guE=FY1Ir)aJR1d^s|X zTB$kIru&2Xxd!DL^HWeuo?%*mT7hcRo^WA3-pZx^y1;J+wCMu(8lRaBwd<>}A6?jt zOQ;p9&J&5p(^!RFXvOEqha~S&H~NX%J2nD6P#Nk0j-np?e13zm(SZ4n`=}?IM5-fS zF$$yi8J|-sULr0;9e;@2noJ<=A&aPq$N1eLv6lE#JnD_;Ew2BR`G-RbEEe(4giS{# z)s!7`o-A`#p77dx+@5y(xi(izcc;hR=YN_|5ge57$aUoUEw)i>-1?hm%8yr6dhPDc LHePy_Jsk2M(SWQh diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/engine/authv/locale/tr_TR/LC_MESSAGES/django.po similarity index 63% rename from vibes_auth/locale/tr_TR/LC_MESSAGES/django.po rename to engine/authv/locale/tr_TR/LC_MESSAGES/django.po index 0e04c5f5..0d940b98 100644 --- a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/authv/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,260 +13,265 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Denge" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Sipariş" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Siparişler" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Kişisel Bilgiler" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "İzinler" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Önemli tarihler" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Ek Bilgi" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Kimlik Doğrulama" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Bir belirteç çifti elde edin" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Kimlik doğrulama için bir belirteç çifti (yenileme ve erişim) alın." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Belirteç çiftini yenileyin" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Bir token çiftini yenileyin (yenileme ve erişim)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Bir belirteci doğrulayın" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Bir belirteci doğrulayın (yenileme veya erişim)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Belirteç geçerlidir" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Yeni bir kullanıcı oluşturun" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Bir kullanıcının ayrıntılarını alma" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Kullanıcı bilgilerini güncelleme" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Kullanıcı silme" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "" "Parola sıfırlama e-postası göndererek bir kullanıcının parolasını sıfırlama" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Bir kullanıcı için avatar yükleme işlemini gerçekleştirin" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Bir kullanıcının parola sıfırlamasını onaylama" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Parolalar eşleşmiyor" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Bir kullanıcının hesabını etkinleştirme" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Etkinleştirme bağlantısı geçersiz veya hesap zaten etkinleştirilmiş" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "İstemcide depolanan son görüntülenen ürünleri birleştirme" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Yeni kullanıcıyı bize yönlendiren kullanıcının b64 kodlu uuid'si." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Şifre çok zayıf" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Hatalı biçimlendirilmiş e-posta" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Hesap zaten etkinleştirildi..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Jeton geçersiz!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Bu kullanıcının en son görüntülediği ürünler (en fazla 48), ters kronolojik " "sırayla." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Gruplar" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "İstek Listesi" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Öznitelikler özel verileri saklamak için kullanılabilir" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Dil, varsayılan {LANGUAGE_CODE} ile {LANGUAGES}'dan biridir" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Dil, varsayılan {settings.LANGUAGE_CODE} ile {settings.LANGUAGES}'dan " +"biridir" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Adresler" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Seçili konuları kapatın" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Seçili konuları açın" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Açık" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Kapalı" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Kullanıcı" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Personel" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Sistem" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Anonim konular için" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Sohbet başlığı" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Sohbet konuları" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "Anonim konu için kullanıcı veya e-posta sağlayın." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Atanan kişi bir personel kullanıcısı olmalıdır." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Sohbet mesajı" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Sohbet mesajları" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Anonim sohbetler için geçerli e-posta gereklidir." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Mesaj 1..1028 karakter olmalıdır." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "Size cevap verecek operatörü arıyoruz, bekleyin!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -279,172 +284,171 @@ msgstr "" "Genişletilmiş işlevsellik için özelleştirilmiş alanlara ve yöntemlere sahip " "bir Kullanıcı varlığını temsil eder. Bu sınıf AbstractUser modelini " "genişletir ve özel e-posta girişi, doğrulama yöntemleri, abonelik durumu, " -"doğrulama ve öznitelik depolama gibi ek özellikleri entegre eder. Ayrıca son " -"görüntülenen öğeleri yönetmek için yardımcı programlar ve hesapları " +"doğrulama ve öznitelik depolama gibi ek özellikleri entegre eder. Ayrıca son" +" görüntülenen öğeleri yönetmek için yardımcı programlar ve hesapları " "doğrulamak için token tabanlı aktivasyon sağlar. User modeli, gelişmiş " "kullanıcı yönetimi için belirli kullanım durumlarını ele almak üzere " "tasarlanmıştır." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "E-posta" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Kullanıcının e-posta adresi" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Telefon Numarası" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Kullanıcı telefon numarası" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "İlk isim" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Soyadı" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Kullanıcı profili resmi" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Doğrulandı" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Kullanıcının doğrulama durumu" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Aktif" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Hesapları silmek yerine bunun seçimini kaldırın" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Abone olundu" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Kullanıcının haber bülteni abonelik durumu" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Etkinleştirme belirteci" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Nitelikler" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Kullanıcı" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Kullanıcılar" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Grup" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Olağanüstü belirteç" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Ödenmemiş jetonlar" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Kara listeye alınmış belirteç" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Kara listeye alınmış belirteçler" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "attributes` bir sözlük olmalıdır" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "İşletme olarak kayıt olurken işletme tanımlayıcısı gereklidir" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "hatalı biçimlendirilmiş e-posta: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Etkin hesap bulunamadı" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Sınıf üzerinde token_class niteliği ayarlanmalıdır!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Jeton kara listeye alındı" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Geçersiz belirteç" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Belirteçte kullanıcı uuid talebi yok" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Kullanıcı mevcut değil" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Şifrenizi sıfırlayın" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Logo" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Parola sıfırlama onayı" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Merhaba %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Şifrenizi sıfırlamak için bir talep aldık. Lütfen aşağıdaki butona " "tıklayarak şifrenizi sıfırlayın:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "şifre sıfırlama" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -452,7 +456,7 @@ msgstr "" "Yukarıdaki düğme çalışmazsa, lütfen aşağıdaki URL'yi kopyalayıp yapıştırın\n" " web tarayıcınıza:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -460,22 +464,22 @@ msgstr "" "eğer bu talebi siz göndermediyseniz, lütfen bunu dikkate almayın\n" " E-posta." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Saygılarımla,
The %(project_name)s team" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tüm hakları saklıdır" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Hesabınızı etkinleştirin" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" @@ -484,7 +488,7 @@ msgstr "" "%(project_name)s'a kaydolduğunuz için teşekkür ederiz. Lütfen aşağıdaki " "düğmeye tıklayarak hesabınızı etkinleştirin:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -492,22 +496,22 @@ msgstr "" "Etkinleştir\n" " hesap" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Hesabı Etkinleştir" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Şifreyi Sıfırla" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." @@ -515,10 +519,10 @@ msgstr "" "Geçersiz telefon numarası biçimi. Numara şu formatta girilmelidir: " "\"+999999999\". En fazla 15 haneye izin verilir." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -527,25 +531,25 @@ msgstr "" "bir görünümü temsil eder. Bu görünüm, istemcilerin sağlanan kimlik " "bilgilerini kullanarak bir çift JWT belirteci (erişim ve yenileme) " "alabildiği belirteç tabanlı kimlik doğrulama işlemini yönetir. Temel bir " -"token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı " -"koruma sağlamak için uygun hız sınırlaması sağlar." +"token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı" +" koruma sağlamak için uygun hız sınırlaması sağlar." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" "Kimlik doğrulama amacıyla belirteçlerin yenilenmesini işler. Bu sınıf, bir " "kimlik doğrulama sisteminin parçası olarak belirteç yenileme işlemleri için " -"işlevsellik sağlamak üzere kullanılır. İstemcilerin tanımlanan hız sınırları " -"içinde yenilenmiş bir belirteç talep edebilmesini sağlar. Görünüm, token " +"işlevsellik sağlamak üzere kullanılır. İstemcilerin tanımlanan hız sınırları" +" içinde yenilenmiş bir belirteç talep edebilmesini sağlar. Görünüm, token " "yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili " "serileştiriciye dayanır." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -553,28 +557,22 @@ msgstr "" "Belirli serileştirme ve doğrulama mantığını kullanarak JSON Web " "Belirteçlerini (JWT) doğrulamaya yönelik bir görünümü temsil eder." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Kullanıcı görünümü kümesi uygulaması.\n" -"Oluşturma, alma, güncelleme, silme gibi kullanıcıyla ilgili verileri ve " -"parola sıfırlama, avatar yükleme, hesap etkinleştirme ve son görüntülenen " -"öğeleri birleştirme gibi özel eylemleri yöneten bir dizi eylem sağlar. Bu " -"sınıf, sağlam API kullanımı için mixin'leri ve GenericViewSet'i genişletir." +"Oluşturma, alma, güncelleme, silme gibi kullanıcıyla ilgili verileri ve parola sıfırlama, avatar yükleme, hesap etkinleştirme ve son görüntülenen öğeleri birleştirme gibi özel eylemleri yöneten bir dizi eylem sağlar. Bu sınıf, sağlam API kullanımı için mixin'leri ve GenericViewSet'i genişletir." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Hesabı zaten etkinleştirdiniz..." diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo b/engine/authv/locale/vi_VN/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo rename to engine/authv/locale/vi_VN/LC_MESSAGES/django.mo index 35d8b5da72c5408d19819108d4ad3e1abb376b91..3bdec51ac9713cf22a3fc4766e34e95837b44bf4 100644 GIT binary patch delta 1484 zcmYMzYe-Z<6u|MbV(W^p^0BF{sipSPZPQgVgjmo_D=HzRwt^xp!6Mw%4+$*OYs>l!!RbXq7C)`aTt%8 z$r6xNG~5iR`^-NyAhF~;M&VVA!Cs8UhnR>@a3j9O68wX)Sd?NUQjT15kekl$!ysP4 zLzt8rFeW;iYGf2d&Ab~m(@E1=)IbZ!q9lviv{I$0EB2tS=m6?_r_BC2BqwRdY`lY7 zk=Lk+P6TLNr11%DSnn`O+lX579!$ewJYf;}h*k82oT2WUthFmhi?FjzF9$u(kLqMF*qB@L6Fq>}8P1G&9kGi7A zIARfbfi?8oHi&G&8T6r@GV(|+Ay+^Kx$7QHqZ5ClmMUkHu}8a+OZvDi$9JfEKZ6>0 z0rgN?x#<}xz{BW49?5l#!dIx3m@@m*=p??(EjCzPo)NeL$w5xzF6>4R&R_=SkfoNo z0(CFFsFgcr_UlX=(9L)wvJ29OO*o1>v2-(MiTDzvaTl-Y0Pb)Z9z|VgGwSEqinZ8- z8qh*rW6+BFULs~-E*9e+tivGY<5whvq|+(Iy%^9_+eTv>-oR*lk6N->jK?3Q)&iqK zDOkw(cGT0|gq&Zwj1kz6n)smUbJYKRKuzoy9>+X4_1C@cpia8y{m9~E9QD*&h|-Da z*n$J7E6pq7L}NMn(Tf^j9Ce;KEWtRUvAa@_t145rwLX*R&n^P-G}nACX|u6c^8+9+Uq+Z>ZB&Y_WJkFC#~y xBYm}gfBl)0K4({(J!PpEx@|ABTJv4`g-&;9-Z7N0^r-8BD`Tk_8gqTK{R1oqwIl!l delta 1465 zcmXxjT}TvB6u|Mbey;dcZkn3rXj*EuZfa|WWJ`sTA%&D=S(;@o`IL&*CJTjqOGpxZ z5P}a8`jD`RAe7Pup%0ey@sb2a6i85%LC&@W+Fw%B^BIs{YLD;Zmh%5 zRKK~)QXIw zCOYY7aEZZ7v}0|WS=t8Fl3&4e9Kj}=$PDggUbxy^xZCm;Y9f!293_a_k`Jh*56KW& zhfx?7BC-iR%>C|6bI^slqjBVt32yZ`kN0??Jd1$%K3n8A&lkx~Thq&`+LAk{J9>aY zo5(2EGCz|?Fr39U45f_xOFEIuF9Y1QN7LxUPpGAGtT%g9id@pqZ5d9Y_I?&M@MqLR z`4jbw7)%bM6L}=pFdD~DD-pEj)956=y!$txFB{Fk#YhfPhgH~v9-Ku39b~DcE=KKT zC2HlWt$B^*K`iF^QKSpfj~y7mO3W+ZED>K$GkAzs^#K;SOsi0L+JyQ!c3}-(Mh!TJ zu{e+V-ZwNbl6se5E;eHW7UByege+kh=JU|6r}iX+t#}q=a1^y<&oBXJEay>Mvxu89 zwa7e#dy(@iUW~*Z)Wmx&2T{L*G1SCf;W4xqQ-AIKDe9yP_aK{)VboJUhkdw&KD8AFzPzbu@o1O?n*XM<8U8lVgu?SJYP~v9~cbrKtGo^s4x6RF3H(q zzF3dif>s>FbC`q~M4_7EwroK@6uBGlMmlVXhZyP^)MN7h&lBjgm)L9)n2HL\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,265 +13,270 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "Cân bằng" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "Đặt hàng" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "Đơn hàng" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "Thông tin cá nhân" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "Quyền" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "Các ngày quan trọng" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "Thông tin bổ sung" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "Xác thực" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "Nhận cặp token" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "Nhận cặp token (refresh và access) để xác thực." -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "Cập nhật cặp token" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "Cập nhật cặp token (cập nhật và truy cập)." -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "Xác minh token" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "Xác minh token (cập nhật hoặc truy cập)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "Token này hợp lệ" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "Tạo một người dùng mới" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "Lấy thông tin chi tiết của người dùng" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "Cập nhật thông tin của người dùng" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "Xóa người dùng" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "Đặt lại mật khẩu của người dùng bằng cách gửi email đặt lại mật khẩu." -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "Xử lý việc tải lên avatar cho người dùng" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "Xác nhận việc đặt lại mật khẩu của người dùng" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "Mật khẩu không khớp." -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "Kích hoạt tài khoản của người dùng" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "Liên kết kích hoạt không hợp lệ hoặc tài khoản đã được kích hoạt." -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "" "Ghép các sản phẩm đã xem gần đây được lưu trữ trên thiết bị của khách hàng" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho " -"chúng tôi." +"Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho" +" chúng tôi." -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "Mật khẩu quá yếu." -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "Email không hợp lệ" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Số điện thoại không hợp lệ: {phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Định dạng thuộc tính không hợp lệ: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "Tài khoản đã được kích hoạt..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "Token không hợp lệ!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "" "Các sản phẩm mà người dùng này đã xem gần đây nhất (tối đa 48), theo thứ tự " "thời gian ngược." -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "Nhóm" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "Danh sách mong muốn" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "Avatar" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "Các thuộc tính có thể được sử dụng để lưu trữ dữ liệu tùy chỉnh." -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "Ngôn ngữ là một trong những {LANGUAGES} với mặc định {LANGUAGE_CODE}" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "" +"Ngôn ngữ là một trong những {settings.LANGUAGES} với mặc định " +"{settings.LANGUAGE_CODE}" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "Địa chỉ" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "Đóng các chủ đề đã chọn" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "Mở các chủ đề đã chọn" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "Mở" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "Đóng" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "Người dùng" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "Nhân viên" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "Hệ thống" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "Đối với các chủ đề ẩn danh" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "Dòng trò chuyện" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "Các chuỗi trò chuyện" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "" "Cung cấp tên người dùng hoặc địa chỉ email cho chuỗi thảo luận ẩn danh." -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên." -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "Tin nhắn trò chuyện" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "Tin nhắn trò chuyện" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "Địa chỉ email hợp lệ là bắt buộc cho các cuộc trò chuyện ẩn danh." -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "Thông điệp phải có độ dài từ 1 đến 1028 ký tự." -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "" "Chúng tôi đang tìm kiếm nhân viên tổng đài để trả lời cho bạn, xin vui lòng " "chờ một lát!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -285,170 +290,169 @@ msgstr "" "mở rộng chức năng. Lớp này kế thừa từ mô hình AbstractUser và tích hợp các " "tính năng bổ sung như đăng nhập bằng email tùy chỉnh, phương thức xác thực, " "trạng thái đăng ký, xác minh và lưu trữ thuộc tính. Nó cũng cung cấp các " -"công cụ để quản lý các mục đã xem gần đây và kích hoạt dựa trên token để xác " -"minh tài khoản. Mô hình Người dùng được thiết kế để xử lý các trường hợp sử " -"dụng cụ thể nhằm nâng cao quản lý người dùng." +"công cụ để quản lý các mục đã xem gần đây và kích hoạt dựa trên token để xác" +" minh tài khoản. Mô hình Người dùng được thiết kế để xử lý các trường hợp sử" +" dụng cụ thể nhằm nâng cao quản lý người dùng." -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "Email" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "Địa chỉ email của người dùng" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "Số điện thoại" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "Số điện thoại của người dùng" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "Họ" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "Họ" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "Hình ảnh hồ sơ người dùng" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "Đã được xác minh" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "Trạng thái xác minh của người dùng" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "Đang hoạt động" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "Hủy chọn tùy chọn này thay vì xóa tài khoản." -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "Đã đăng ký" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "Tình trạng đăng ký bản tin của người dùng" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "Mã kích hoạt" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "Thuộc tính" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "Người dùng" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "Người dùng" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "Nhóm" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "Token xuất sắc" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "Token xuất sắc" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "Token bị đưa vào danh sách đen" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "Các token bị đưa vào danh sách đen" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "`attributes` phải là một từ điển." -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "Mã định danh doanh nghiệp là bắt buộc khi đăng ký kinh doanh." -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "Email không hợp lệ: {email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "Không tìm thấy tài khoản hoạt động." -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "Phải đặt thuộc tính token_class cho lớp!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "Token bị đưa vào danh sách đen" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "Token không hợp lệ" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "Không có yêu cầu UUID của người dùng trong token." -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "Người dùng không tồn tại" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "Đặt lại mật khẩu của bạn" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "Biểu trưng" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "Xác nhận đặt lại mật khẩu" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "Xin chào %(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "" "Chúng tôi đã nhận được yêu cầu đặt lại mật khẩu của bạn. Vui lòng đặt lại " "mật khẩu bằng cách nhấp vào nút bên dưới:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "Đặt lại mật khẩu" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -456,96 +460,96 @@ msgstr "" "Nếu nút ở trên không hoạt động, vui lòng sao chép và dán URL sau vào trình " "duyệt web của bạn:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "Nếu bạn không gửi yêu cầu này, vui lòng bỏ qua email này." -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "Tất cả các quyền được bảo lưu." -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "Kích hoạt tài khoản của bạn" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Cảm ơn bạn đã đăng ký cho %(project_name)s. Vui lòng kích hoạt tài khoản của " -"bạn bằng cách nhấp vào nút bên dưới:" +"Cảm ơn bạn đã đăng ký cho %(project_name)s. Vui lòng kích hoạt tài khoản của" +" bạn bằng cách nhấp vào nút bên dưới:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" msgstr "Kích hoạt tài khoản" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Kích hoạt tài khoản" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Đặt lại mật khẩu" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Định dạng số điện thoại không hợp lệ. Số điện thoại phải được nhập theo định " -"dạng: \"+999999999\". Cho phép tối đa 15 chữ số." +"Định dạng số điện thoại không hợp lệ. Số điện thoại phải được nhập theo định" +" dạng: \"+999999999\". Cho phép tối đa 15 chữ số." -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Đại diện cho một giao diện để lấy cặp token truy cập và token làm mới cùng " "với dữ liệu người dùng. Giao diện này quản lý quá trình xác thực dựa trên " -"token, cho phép các client lấy cặp token JWT (truy cập và làm mới) bằng cách " -"sử dụng thông tin đăng nhập được cung cấp. Nó được xây dựng dựa trên một " +"token, cho phép các client lấy cặp token JWT (truy cập và làm mới) bằng cách" +" sử dụng thông tin đăng nhập được cung cấp. Nó được xây dựng dựa trên một " "giao diện token cơ sở và đảm bảo giới hạn tốc độ thích hợp để bảo vệ khỏi " "các cuộc tấn công dò mật khẩu." -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"Xử lý việc làm mới token cho mục đích xác thực. Lớp này được sử dụng để cung " -"cấp chức năng cho các hoạt động làm mới token như một phần của hệ thống xác " -"thực. Nó đảm bảo rằng các client có thể yêu cầu token đã được làm mới trong " -"giới hạn tỷ lệ được định nghĩa. Giao diện người dùng dựa vào trình " -"serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu " -"ra phù hợp." +"Xử lý việc làm mới token cho mục đích xác thực. Lớp này được sử dụng để cung" +" cấp chức năng cho các hoạt động làm mới token như một phần của hệ thống xác" +" thực. Nó đảm bảo rằng các client có thể yêu cầu token đã được làm mới trong" +" giới hạn tỷ lệ được định nghĩa. Giao diện người dùng dựa vào trình " +"serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu" +" ra phù hợp." -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -553,28 +557,25 @@ msgstr "" "Đại diện cho một giao diện dùng để xác minh JSON Web Tokens (JWT) bằng cách " "sử dụng logic serialization và xác thực cụ thể." -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "Token không hợp lệ" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Thực hiện bộ xem người dùng. Cung cấp một tập hợp các hành động quản lý dữ " "liệu liên quan đến người dùng như tạo, truy xuất, cập nhật, xóa và các hành " -"động tùy chỉnh bao gồm đặt lại mật khẩu, tải lên avatar, kích hoạt tài khoản " -"và hợp nhất các mục đã xem gần đây. Lớp này mở rộng các mixin và " +"động tùy chỉnh bao gồm đặt lại mật khẩu, tải lên avatar, kích hoạt tài khoản" +" và hợp nhất các mục đã xem gần đây. Lớp này mở rộng các mixin và " "GenericViewSet để xử lý API một cách mạnh mẽ." -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "Bạn đã kích hoạt tài khoản..." diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/authv/locale/zh_Hans/LC_MESSAGES/django.mo similarity index 67% rename from vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo rename to engine/authv/locale/zh_Hans/LC_MESSAGES/django.mo index 13b775da8ecec04ec154fd99e0330b464c4450dd..a41583e3058617252ddec8f7f7989af57d094f50 100644 GIT binary patch delta 1509 zcmYMzeN4?!9LMod9efBeqUe*3-7Irn?c`JV6jb$(Urszz^EaIrBa z5NAvjKEiN(iUY9=hv8cshkq~)lZP6Uf=h4^mg87Fii7bQ`tTt}U>J+IF%lI&5MwZL zmA>U6Z=soDniZMX!~VIPUa{kV;!m@ z9jHW~2WcFj@dhKY#OsuHJF4W>I0EnCdY3WXIG%p)NT(88t-Gv;tY>ftakZ$@-?Za* zaRlphqOLIbX_S*$>}V%28#U37lW-~SWkMBZVdNNN3K^fnh3hI#p*E9LNSy><0;nZsEy~MN}p%@D^c^- zqAGXLj@O|+@+-D~12fs*wEk-t(~J7*)2OfXp(?Ntb%$kk{3I%oT5BV^>EE$Fu(qR4 z`W*Re%ojY1QPh1k)}V*|jVqN82BT36??h!VT%iclM^K~-dj9Y2POt47VM zx8qILHv4-AQUvn~Gci1k`fK4?Y0d`oQ41HL{=c_i0q(;*e1RSu$-T&lI16W>5(uE? zS0azOz)K0YqY`_KihGNS>z%aB35ZU21`<&dvQc-p2sN<;wc$3*#|qo;Kt6Qy()t^9 z1&NbGoBGALRPBGIk5I$@tq7fn%yPN>p(j!IJyE6W0)dh(8%onp9*K+p-wR!eo9A{< zn=);BdPeAr_qu0tU*JN2er}OJH>a?o=jP#_<~?6qj(oU%?)}w^JFN*FE zk(LyZ1RTL7IF5-pg{k-!H{v(U$E4LFIk*#7Vi+?qf=PH6OEHFV_yg@YhZ_GEotT&^ zQCUMHgI(0^r~$ReUeb)qumhLlRdirKuEHVA#R)9IuebuUTvj4Q$XCkw(e>-`BDP~K zE>4SD3x(3Gj83Cw-ieyXlyMq$qt8h4;$$_gR4(d?3sFzB3w7QB({Dm@k_c|V>!=kO zLrrutO5+lZR~U~6)2-4TMJ@RibmK5K+C*MrHvP?Otx6m*hK+5;4ooJl2etGAX8a+# zS!WFO3ZpaYtjug4D=-^%q7MtO3@%at#uYDhKRyl-JEGn%uHZgG78jvy6gc)krr4N{X1?s#i z)XKG*@m|!IywCLSV}SkT!9qjiBkEi4qQ0sZwE`umcX-^4pF>Tc$Jmc{`a{OY#wVyJ zoj_h2d5<@74(qU+`a9TPzSC&JKRSR7UMtg+s3(heamL7iBJy73;Y#2V8dL|$|mG0vb~ z!MrbaVyV-Xe3&+eUHH$#!Y3HJ7GG?$N$h#Tl*6?*SXsV5SiZZu-E$_~(&TAqJXYV@ f+~SGEMpMe{aYa7A&mXh7M;yK5UU%%1w>IuSH$9(^ diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/engine/authv/locale/zh_Hans/LC_MESSAGES/django.po similarity index 57% rename from vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po rename to engine/authv/locale/zh_Hans/LC_MESSAGES/django.po index 05fe4091..c844737d 100644 --- a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/authv/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,257 +13,260 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 -#: vibes_auth/graphene/object_types.py:46 +#: engine/authv/admin.py:39 engine/authv/admin.py:40 +#: engine/authv/graphene/object_types.py:46 msgid "balance" msgstr "平衡" -#: vibes_auth/admin.py:48 +#: engine/authv/admin.py:48 msgid "order" msgstr "订购" -#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 +#: engine/authv/admin.py:49 engine/authv/graphene/object_types.py:44 msgid "orders" msgstr "订单" -#: vibes_auth/admin.py:59 +#: engine/authv/admin.py:59 msgid "personal info" msgstr "个人信息" -#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 +#: engine/authv/admin.py:63 engine/authv/graphene/object_types.py:43 msgid "permissions" msgstr "权限" -#: vibes_auth/admin.py:76 +#: engine/authv/admin.py:76 msgid "important dates" msgstr "重要日期" -#: vibes_auth/admin.py:77 +#: engine/authv/admin.py:77 msgid "additional info" msgstr "其他信息" -#: vibes_auth/apps.py:8 +#: engine/authv/apps.py:8 msgid "authentication" msgstr "认证" -#: vibes_auth/docs/drf/views.py:15 +#: engine/authv/docs/drf/views.py:15 msgid "obtain a token pair" msgstr "获取令牌对" -#: vibes_auth/docs/drf/views.py:16 +#: engine/authv/docs/drf/views.py:16 msgid "obtain a token pair (refresh and access) for authentication." msgstr "获取用于身份验证的令牌对(刷新和访问)。" -#: vibes_auth/docs/drf/views.py:35 +#: engine/authv/docs/drf/views.py:35 msgid "refresh a token pair" msgstr "刷新令牌对" -#: vibes_auth/docs/drf/views.py:36 +#: engine/authv/docs/drf/views.py:36 msgid "refresh a token pair (refresh and access)." msgstr "刷新令牌对(刷新和访问)。" -#: vibes_auth/docs/drf/views.py:55 +#: engine/authv/docs/drf/views.py:55 msgid "verify a token" msgstr "验证令牌" -#: vibes_auth/docs/drf/views.py:56 +#: engine/authv/docs/drf/views.py:56 msgid "Verify a token (refresh or access)." msgstr "验证令牌(刷新或访问)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 +#: engine/authv/docs/drf/views.py:62 engine/authv/views.py:78 msgid "the token is valid" msgstr "令牌有效" -#: vibes_auth/docs/drf/viewsets.py:16 +#: engine/authv/docs/drf/viewsets.py:16 msgid "create a new user" msgstr "创建新用户" -#: vibes_auth/docs/drf/viewsets.py:21 +#: engine/authv/docs/drf/viewsets.py:21 msgid "retrieve a user's details" msgstr "读取用户详细信息" -#: vibes_auth/docs/drf/viewsets.py:25 +#: engine/authv/docs/drf/viewsets.py:25 msgid "update a user's details" msgstr "更新用户信息" -#: vibes_auth/docs/drf/viewsets.py:30 +#: engine/authv/docs/drf/viewsets.py:30 msgid "delete a user" msgstr "删除用户" -#: vibes_auth/docs/drf/viewsets.py:34 +#: engine/authv/docs/drf/viewsets.py:34 msgid "reset a user's password by sending a reset password email" msgstr "通过发送重置密码电子邮件重置用户密码" -#: vibes_auth/docs/drf/viewsets.py:39 +#: engine/authv/docs/drf/viewsets.py:39 msgid "handle avatar upload for a user" msgstr "处理用户的头像上传" -#: vibes_auth/docs/drf/viewsets.py:54 +#: engine/authv/docs/drf/viewsets.py:54 msgid "confirm a user's password reset" msgstr "确认用户密码重置" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 -#: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:84 +#: engine/authv/docs/drf/viewsets.py:58 engine/authv/graphene/mutations.py:320 +#: engine/authv/serializers.py:105 engine/authv/serializers.py:109 +#: engine/authv/viewsets.py:84 msgid "passwords do not match" msgstr "密码不匹配" -#: vibes_auth/docs/drf/viewsets.py:63 +#: engine/authv/docs/drf/viewsets.py:63 msgid "activate a user's account" msgstr "激活用户帐户" -#: vibes_auth/docs/drf/viewsets.py:67 +#: engine/authv/docs/drf/viewsets.py:67 msgid "activation link is invalid or account already activated" msgstr "激活链接无效或账户已激活" -#: vibes_auth/docs/drf/viewsets.py:72 +#: engine/authv/docs/drf/viewsets.py:72 msgid "merge client-stored recently viewed products" msgstr "合并客户存储的最近查看的产品" -#: vibes_auth/graphene/mutations.py:41 +#: engine/authv/graphene/mutations.py:41 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" -#: vibes_auth/graphene/mutations.py:61 +#: engine/authv/graphene/mutations.py:61 msgid "password too weak" msgstr "密码太弱" -#: vibes_auth/graphene/mutations.py:110 +#: engine/authv/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: vibes_auth/graphene/mutations.py:120 +#: engine/authv/graphene/mutations.py:120 msgid "malformed email" msgstr "畸形电子邮件" -#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 +#: engine/authv/graphene/mutations.py:127 engine/authv/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "畸形电话号码:{phone_number}!" -#: vibes_auth/graphene/mutations.py:149 +#: engine/authv/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 -#: vibes_auth/viewsets.py:146 +#: engine/authv/graphene/mutations.py:273 engine/authv/viewsets.py:127 +#: engine/authv/viewsets.py:146 msgid "activation link is invalid!" msgstr "激活链接无效!" -#: vibes_auth/graphene/mutations.py:276 +#: engine/authv/graphene/mutations.py:276 msgid "account already activated..." msgstr "帐户已激活..." -#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 +#: engine/authv/graphene/mutations.py:283 +#: engine/authv/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 +#: engine/authv/graphene/mutations.py:327 engine/authv/viewsets.py:95 msgid "token is invalid!" msgstr "令牌无效!" -#: vibes_auth/graphene/object_types.py:40 +#: engine/authv/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in reverse‐" -"chronological order" +"the products this user has viewed most recently (max 48), in " +"reverse‐chronological order" msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。" -#: vibes_auth/graphene/object_types.py:42 vibes_auth/models.py:132 +#: engine/authv/graphene/object_types.py:42 engine/authv/models.py:123 msgid "groups" msgstr "组别" -#: vibes_auth/graphene/object_types.py:45 +#: engine/authv/graphene/object_types.py:45 msgid "wishlist" msgstr "愿望清单" -#: vibes_auth/graphene/object_types.py:47 vibes_auth/models.py:58 +#: engine/authv/graphene/object_types.py:47 engine/authv/models.py:59 msgid "avatar" msgstr "阿凡达" -#: vibes_auth/graphene/object_types.py:48 +#: engine/authv/graphene/object_types.py:48 msgid "attributes may be used to store custom data" msgstr "属性可用于存储自定义数据" -#: vibes_auth/graphene/object_types.py:49 +#: engine/authv/graphene/object_types.py:50 #, python-brace-format -msgid "language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" -msgstr "语言是{LANGUAGES}之一,默认为{LANGUAGE_CODE}。" +msgid "" +"language is one of the {settings.LANGUAGES} with default " +"{settings.LANGUAGE_CODE}" +msgstr "语言是{settings.LANGUAGES}之一,默认为{settings.LANGUAGE_CODE}。" -#: vibes_auth/graphene/object_types.py:50 +#: engine/authv/graphene/object_types.py:52 msgid "address set" msgstr "地址" -#: vibes_auth/messaging/admin.py:36 +#: engine/authv/messaging/admin.py:37 msgid "Close selected threads" msgstr "关闭选定的线程" -#: vibes_auth/messaging/admin.py:40 +#: engine/authv/messaging/admin.py:41 msgid "Open selected threads" msgstr "打开选定的线程" -#: vibes_auth/messaging/models.py:24 +#: engine/authv/messaging/models.py:24 msgid "Open" msgstr "开放" -#: vibes_auth/messaging/models.py:25 +#: engine/authv/messaging/models.py:25 msgid "Closed" msgstr "关闭" -#: vibes_auth/messaging/models.py:29 +#: engine/authv/messaging/models.py:29 msgid "User" msgstr "用户" -#: vibes_auth/messaging/models.py:30 +#: engine/authv/messaging/models.py:30 msgid "Staff" msgstr "工作人员" -#: vibes_auth/messaging/models.py:31 +#: engine/authv/messaging/models.py:31 msgid "System" msgstr "系统" -#: vibes_auth/messaging/models.py:36 +#: engine/authv/messaging/models.py:36 msgid "For anonymous threads" msgstr "匿名主题" -#: vibes_auth/messaging/models.py:50 +#: engine/authv/messaging/models.py:50 msgid "Chat thread" msgstr "聊天主题" -#: vibes_auth/messaging/models.py:51 +#: engine/authv/messaging/models.py:51 msgid "Chat threads" msgstr "聊天主题" -#: vibes_auth/messaging/models.py:56 +#: engine/authv/messaging/models.py:56 msgid "Provide user or email for anonymous thread." msgstr "为匿名主题提供用户或电子邮件。" -#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:133 +#: engine/authv/messaging/models.py:58 engine/authv/messaging/services.py:133 msgid "Assignee must be a staff user." msgstr "受让人必须是工作人员用户。" -#: vibes_auth/messaging/models.py:74 +#: engine/authv/messaging/models.py:74 msgid "Chat message" msgstr "聊天信息" -#: vibes_auth/messaging/models.py:75 +#: engine/authv/messaging/models.py:75 msgid "Chat messages" msgstr "聊天信息" -#: vibes_auth/messaging/services.py:48 +#: engine/authv/messaging/services.py:48 msgid "Valid email is required for anonymous chats." msgstr "匿名聊天需要有效的电子邮件。" -#: vibes_auth/messaging/services.py:56 +#: engine/authv/messaging/services.py:56 msgid "Message must be 1..1028 characters." msgstr "信息必须为 1...1028 个字符。" -#: vibes_auth/messaging/services.py:90 +#: engine/authv/messaging/services.py:90 msgid "We're searching for the operator to answer you already, hold by!" msgstr "我们正在寻找接线员,请稍候!" -#: vibes_auth/models.py:30 +#: engine/authv/models.py:31 msgid "" "Represents a User entity with customized fields and methods for extended " "functionality. This class extends the AbstractUser model and integrates " @@ -273,169 +276,166 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser 模型," -"并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。" -"它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模" -"型旨在处理增强用户管理的特定用例。" +"代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser " +"模型,并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模型旨在处理增强用户管理的特定用例。" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "email" msgstr "电子邮件" -#: vibes_auth/models.py:41 +#: engine/authv/models.py:42 msgid "user email address" msgstr "用户电子邮件地址" -#: vibes_auth/models.py:43 +#: engine/authv/models.py:44 msgid "phone_number" msgstr "电话号码" -#: vibes_auth/models.py:48 +#: engine/authv/models.py:49 msgid "user phone number" msgstr "用户电话号码" -#: vibes_auth/models.py:54 +#: engine/authv/models.py:55 msgid "first_name" msgstr "姓名" -#: vibes_auth/models.py:55 +#: engine/authv/models.py:56 msgid "last_name" msgstr "姓氏" -#: vibes_auth/models.py:61 +#: engine/authv/models.py:62 msgid "user profile image" msgstr "用户配置文件图像" -#: vibes_auth/models.py:66 +#: engine/authv/models.py:67 msgid "is verified" msgstr "已核实" -#: vibes_auth/models.py:67 +#: engine/authv/models.py:68 msgid "user verification status" msgstr "用户验证状态" -#: vibes_auth/models.py:70 +#: engine/authv/models.py:71 msgid "is_active" msgstr "处于活动状态" -#: vibes_auth/models.py:72 +#: engine/authv/models.py:73 msgid "unselect this instead of deleting accounts" msgstr "取消选择此选项,而不是删除账户" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "is_subscribed" msgstr "已订阅" -#: vibes_auth/models.py:75 +#: engine/authv/models.py:76 msgid "user's newsletter subscription status" msgstr "用户的通讯订阅状态" -#: vibes_auth/models.py:78 +#: engine/authv/models.py:79 msgid "activation token" msgstr "激活令牌" -#: vibes_auth/models.py:80 +#: engine/authv/models.py:83 msgid "attributes" msgstr "属性" -#: vibes_auth/models.py:110 +#: engine/authv/models.py:115 msgid "user" msgstr "用户" -#: vibes_auth/models.py:111 +#: engine/authv/models.py:116 msgid "users" msgstr "用户" -#: vibes_auth/models.py:131 +#: engine/authv/models.py:122 msgid "group" msgstr "组别" -#: vibes_auth/models.py:148 +#: engine/authv/models.py:129 msgid "outstanding token" msgstr "出色的代币" -#: vibes_auth/models.py:149 +#: engine/authv/models.py:130 msgid "outstanding tokens" msgstr "未兑代币" -#: vibes_auth/models.py:167 +#: engine/authv/models.py:136 msgid "blacklisted token" msgstr "黑名单令牌" -#: vibes_auth/models.py:168 +#: engine/authv/models.py:137 msgid "blacklisted tokens" msgstr "黑名单令牌" -#: vibes_auth/serializers.py:99 +#: engine/authv/serializers.py:99 msgid "attributes must be a dictionary" msgstr "属性 \"必须是一个字典" -#: vibes_auth/serializers.py:101 +#: engine/authv/serializers.py:101 msgid "business identificator is required when registering as a business" msgstr "注册为企业时需要使用企业标识符" -#: vibes_auth/serializers.py:121 +#: engine/authv/serializers.py:121 #, python-brace-format msgid "malformed email: {email}" msgstr "畸形电子邮件:{email}" -#: vibes_auth/serializers.py:142 vibes_auth/serializers.py:164 -#: vibes_auth/serializers.py:186 vibes_auth/serializers.py:198 +#: engine/authv/serializers.py:142 engine/authv/serializers.py:164 +#: engine/authv/serializers.py:184 engine/authv/serializers.py:194 msgid "no active account" msgstr "未找到活动账户" -#: vibes_auth/serializers.py:174 +#: engine/authv/serializers.py:174 msgid "must set token_class attribute on class." msgstr "必须在类上设置 token_class 属性!" -#: vibes_auth/serializers.py:246 +#: engine/authv/serializers.py:240 msgid "token_blacklisted" msgstr "令牌被列入黑名单" -#: vibes_auth/serializers.py:251 +#: engine/authv/serializers.py:245 msgid "invalid token" msgstr "无效令牌" -#: vibes_auth/serializers.py:257 +#: engine/authv/serializers.py:251 msgid "no user uuid claim present in token" msgstr "令牌中没有用户 uuid 声明" -#: vibes_auth/serializers.py:259 +#: engine/authv/serializers.py:253 msgid "user does not exist" msgstr "用户不存在" -#: vibes_auth/templates/user_reset_password_email.html:7 +#: engine/authv/templates/user_reset_password_email.html:7 msgid "reset your password" msgstr "重置密码" -#: vibes_auth/templates/user_reset_password_email.html:85 -#: vibes_auth/templates/user_verification_email.html:85 +#: engine/authv/templates/user_reset_password_email.html:85 +#: engine/authv/templates/user_verification_email.html:85 msgid "logo" msgstr "标志" -#: vibes_auth/templates/user_reset_password_email.html:90 +#: engine/authv/templates/user_reset_password_email.html:90 msgid "password reset confirmation" msgstr "密码重置确认" -#: vibes_auth/templates/user_reset_password_email.html:91 -#: vibes_auth/templates/user_verification_email.html:91 +#: engine/authv/templates/user_reset_password_email.html:91 +#: engine/authv/templates/user_verification_email.html:91 #, python-format msgid "hello %(user_first_name)s," msgstr "你好%(user_first_name)s," -#: vibes_auth/templates/user_reset_password_email.html:92 +#: engine/authv/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your " -"password\n" +"we have received a request to reset your password. please reset your password\n" " by clicking the button below:" msgstr "我们收到了重置密码的请求。请点击下面的按钮重置密码:" -#: vibes_auth/templates/user_reset_password_email.html:95 +#: engine/authv/templates/user_reset_password_email.html:95 msgid "reset password" msgstr "重置密码" -#: vibes_auth/templates/user_reset_password_email.html:97 -#: vibes_auth/templates/user_verification_email.html:99 +#: engine/authv/templates/user_reset_password_email.html:97 +#: engine/authv/templates/user_verification_email.html:99 msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" @@ -443,7 +443,7 @@ msgstr "" "如果上面的按钮不起作用,请将以下 URL 复制并粘贴到浏览器中\n" " 复制并粘贴到您的浏览器中:" -#: vibes_auth/templates/user_reset_password_email.html:100 +#: engine/authv/templates/user_reset_password_email.html:100 msgid "" "if you did not send this request, please ignore this\n" " email." @@ -451,29 +451,29 @@ msgstr "" "如果您没有发送此请求,请忽略此邮件\n" " 电子邮件。" -#: vibes_auth/templates/user_reset_password_email.html:102 +#: engine/authv/templates/user_reset_password_email.html:102 #, python-format msgid "best regards,
The %(project_name)s team" msgstr "致以最诚挚的问候,
%(project_name)s 团队" -#: vibes_auth/templates/user_reset_password_email.html:108 -#: vibes_auth/templates/user_verification_email.html:108 +#: engine/authv/templates/user_reset_password_email.html:108 +#: engine/authv/templates/user_verification_email.html:108 msgid "all rights reserved" msgstr "保留所有权利" -#: vibes_auth/templates/user_verification_email.html:7 -#: vibes_auth/templates/user_verification_email.html:90 +#: engine/authv/templates/user_verification_email.html:7 +#: engine/authv/templates/user_verification_email.html:90 msgid "activate your account" msgstr "激活账户" -#: vibes_auth/templates/user_verification_email.html:92 +#: engine/authv/templates/user_verification_email.html:92 #, python-format msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "感谢您注册%(project_name)s_。请点击下面的按钮激活您的帐户:" -#: vibes_auth/templates/user_verification_email.html:96 +#: engine/authv/templates/user_verification_email.html:96 msgid "" "activate\n" " account" @@ -481,79 +481,70 @@ msgstr "" "激活\n" " 账户" -#: vibes_auth/templates/user_verification_email.html:102 +#: engine/authv/templates/user_verification_email.html:102 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "致以最崇高的敬意,
%(project_name)s_团队" -#: vibes_auth/utils/emailing.py:23 +#: engine/authv/utils/emailing.py:23 #, python-brace-format msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| 激活帐户" -#: vibes_auth/utils/emailing.py:62 +#: engine/authv/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME}| 重置密码" -#: vibes_auth/validators.py:13 +#: engine/authv/validators.py:13 msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" +msgstr "电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" -#: vibes_auth/views.py:30 +#: engine/authv/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's " -"data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's" +" data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身" -"份验证的流程,客户端可使用提供的凭据获取一对 JWT 令牌(访问和刷新)。它建立在" -"基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" +"代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身份验证的流程,客户端可使用提供的凭据获取一对 JWT " +"令牌(访问和刷新)。它建立在基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" -#: vibes_auth/views.py:48 +#: engine/authv/views.py:48 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used " -"to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token " -"within defined rate limits. The view relies on the associated serializer to " -"validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used" +" to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token" +" within defined rate limits. The view relies on the associated serializer to" +" validate token refresh inputs and produce appropriate outputs." msgstr "" -"处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提" -"供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化" -"器来验证令牌刷新输入并产生适当的输出。" +"处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化器来验证令牌刷新输入并产生适当的输出。" -#: vibes_auth/views.py:67 +#: engine/authv/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) 的视图。" -#: vibes_auth/views.py:80 +#: engine/authv/views.py:80 msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:45 +#: engine/authv/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, " -"retrieval, updates, deletion, and custom actions including password reset, " -"avatar upload, account activation, and recently viewed items merging. This " -"class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." msgstr "" "用户视图集实施。\n" -"该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义" -"操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 " -"GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" +"该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" -#: vibes_auth/viewsets.py:99 +#: engine/authv/viewsets.py:99 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:132 +#: engine/authv/viewsets.py:132 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/vibes_auth/managers.py b/engine/authv/managers.py similarity index 98% rename from vibes_auth/managers.py rename to engine/authv/managers.py index d39ac5f1..279157c4 100644 --- a/vibes_auth/managers.py +++ b/engine/authv/managers.py @@ -4,7 +4,7 @@ from django.contrib import auth from django.contrib.auth.base_user import BaseUserManager from django.contrib.auth.hashers import make_password -from core.models import Address, Order +from engine.core.models import Address, Order logger = logging.getLogger(__name__) diff --git a/blog/migrations/__init__.py b/engine/authv/messaging/__init__.py similarity index 100% rename from blog/migrations/__init__.py rename to engine/authv/messaging/__init__.py diff --git a/vibes_auth/messaging/admin.py b/engine/authv/messaging/admin.py similarity index 93% rename from vibes_auth/messaging/admin.py rename to engine/authv/messaging/admin.py index df5fba65..4fa2d827 100644 --- a/vibes_auth/messaging/admin.py +++ b/engine/authv/messaging/admin.py @@ -3,9 +3,10 @@ from __future__ import annotations from django.contrib import admin from django.utils.translation import gettext_lazy as _ -from vibes_auth.messaging.models import ChatMessage, ChatThread, ThreadStatus +from engine.authv.messaging.models import ChatMessage, ChatThread, ThreadStatus +# noinspection PyUnusedLocal @admin.register(ChatThread) class ChatThreadAdmin(admin.ModelAdmin): list_display = ( diff --git a/vibes_auth/messaging/auth.py b/engine/authv/messaging/auth.py similarity index 100% rename from vibes_auth/messaging/auth.py rename to engine/authv/messaging/auth.py diff --git a/vibes_auth/messaging/consumers.py b/engine/authv/messaging/consumers.py similarity index 100% rename from vibes_auth/messaging/consumers.py rename to engine/authv/messaging/consumers.py diff --git a/vibes_auth/messaging/models.py b/engine/authv/messaging/models.py similarity index 97% rename from vibes_auth/messaging/models.py rename to engine/authv/messaging/models.py index 47ca92b6..240178d8 100644 --- a/vibes_auth/messaging/models.py +++ b/engine/authv/messaging/models.py @@ -16,8 +16,8 @@ from django.db.models import ( from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from core.abstract import NiceModel -from vibes_auth.models import User +from engine.core.abstract import NiceModel +from engine.authv.models import User class ThreadStatus(TextChoices): diff --git a/vibes_auth/messaging/routing.py b/engine/authv/messaging/routing.py similarity index 73% rename from vibes_auth/messaging/routing.py rename to engine/authv/messaging/routing.py index 86f0117e..17925b77 100644 --- a/vibes_auth/messaging/routing.py +++ b/engine/authv/messaging/routing.py @@ -1,6 +1,6 @@ from django.urls import re_path -from vibes_auth.messaging.consumers import StaffInboxConsumer, ThreadConsumer, UserMessageConsumer +from engine.authv.messaging.consumers import StaffInboxConsumer, ThreadConsumer, UserMessageConsumer websocket_urlpatterns = [ re_path(r"^ws/chat/message$", UserMessageConsumer.as_asgi()), diff --git a/vibes_auth/messaging/services.py b/engine/authv/messaging/services.py similarity index 97% rename from vibes_auth/messaging/services.py rename to engine/authv/messaging/services.py index 7184fb8b..8ed369a2 100644 --- a/vibes_auth/messaging/services.py +++ b/engine/authv/messaging/services.py @@ -11,8 +11,8 @@ from django.db.models import Count from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from vibes_auth.messaging.models import ChatMessage, ChatThread, SenderType, ThreadStatus -from vibes_auth.models import User +from engine.authv.messaging.models import ChatMessage, ChatThread, SenderType, ThreadStatus +from engine.authv.models import User THREAD_GROUP_PREFIX = "thread:" STAFF_INBOX_GROUP = "staff:inbox" diff --git a/vibes_auth/migrations/0001_initial.py b/engine/authv/migrations/0001_initial.py similarity index 94% rename from vibes_auth/migrations/0001_initial.py rename to engine/authv/migrations/0001_initial.py index d0314d29..925b1daa 100644 --- a/vibes_auth/migrations/0001_initial.py +++ b/engine/authv/migrations/0001_initial.py @@ -7,16 +7,16 @@ import django.utils.timezone import django_extensions.db.fields from django.db import migrations, models -import vibes_auth.managers -import vibes_auth.models -import vibes_auth.validators +import engine.authv.managers +import engine.authv.models +import engine.authv.validators class Migration(migrations.Migration): initial = True dependencies = [ - ("auth", "0012_alter_user_first_name_max_length"), + ("auth", "__latest__"), ] operations = [ @@ -96,7 +96,7 @@ class Migration(migrations.Migration): max_length=20, null=True, unique=True, - validators=[vibes_auth.validators.validate_phone_number], + validators=[engine.authv.validators.validate_phone_number], verbose_name="phone_number", ), ), @@ -108,7 +108,7 @@ class Migration(migrations.Migration): blank=True, help_text="user profile image", null=True, - upload_to=vibes_auth.models.User.get_uuid_as_path, + upload_to=engine.authv.models.User.get_uuid_as_path, verbose_name="avatar", ), ), @@ -166,7 +166,7 @@ class Migration(migrations.Migration): help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", related_name="user_set", related_query_name="user", - to="auth.group", + to="authv.group", verbose_name="groups", ), ), @@ -188,7 +188,7 @@ class Migration(migrations.Migration): "swappable": "AUTH_USER_MODEL", }, managers=[ - ("objects", vibes_auth.managers.UserManager()), + ("objects", engine.authv.managers.UserManager()), ], ), ] diff --git a/vibes_auth/migrations/0002_blacklistedtoken_outstandingtoken.py b/engine/authv/migrations/0002_blacklistedtoken_outstandingtoken.py similarity index 96% rename from vibes_auth/migrations/0002_blacklistedtoken_outstandingtoken.py rename to engine/authv/migrations/0002_blacklistedtoken_outstandingtoken.py index e7b4a20a..b5dd4aca 100644 --- a/vibes_auth/migrations/0002_blacklistedtoken_outstandingtoken.py +++ b/engine/authv/migrations/0002_blacklistedtoken_outstandingtoken.py @@ -6,7 +6,7 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("token_blacklist", "0012_alter_outstandingtoken_user"), - ("vibes_auth", "0001_initial"), + ("authv", "0001_initial"), ] operations = [ diff --git a/vibes_auth/migrations/0003_alter_user_language.py b/engine/authv/migrations/0003_alter_user_language.py similarity index 91% rename from vibes_auth/migrations/0003_alter_user_language.py rename to engine/authv/migrations/0003_alter_user_language.py index 92f7e0ca..dbf2f02d 100644 --- a/vibes_auth/migrations/0003_alter_user_language.py +++ b/engine/authv/migrations/0003_alter_user_language.py @@ -5,14 +5,14 @@ from django.db.models.functions import Lower def forwards(apps, schema_editor): if schema_editor: pass - User = apps.get_model("vibes_auth", "User") + User = apps.get_model("authv", "User") User.objects.all().update(language=Lower("language")) def backwards(apps, schema_editor): if schema_editor: pass - User = apps.get_model("vibes_auth", "User") + User = apps.get_model("authv", "User") for u in User.objects.all(): parts = u.language.split("-", 1) if len(parts) == 2: @@ -22,7 +22,7 @@ def backwards(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ("vibes_auth", "0002_blacklistedtoken_outstandingtoken"), + ("authv", "0002_blacklistedtoken_outstandingtoken"), ] operations = [ diff --git a/vibes_auth/migrations/0004_alter_user_language.py b/engine/authv/migrations/0004_alter_user_language.py similarity index 97% rename from vibes_auth/migrations/0004_alter_user_language.py rename to engine/authv/migrations/0004_alter_user_language.py index 597b7729..2c711495 100644 --- a/vibes_auth/migrations/0004_alter_user_language.py +++ b/engine/authv/migrations/0004_alter_user_language.py @@ -5,7 +5,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ("vibes_auth", "0003_alter_user_language"), + ("authv", "0003_alter_user_language"), ] operations = [ diff --git a/engine/authv/migrations/0005_alter_user_groups.py b/engine/authv/migrations/0005_alter_user_groups.py new file mode 100644 index 00000000..4b1ea0e5 --- /dev/null +++ b/engine/authv/migrations/0005_alter_user_groups.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.8 on 2025-11-07 21:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ("authv", "0004_alter_user_language"), + ] + + operations = [ + migrations.AlterField( + model_name="user", + name="groups", + field=models.ManyToManyField( + blank=True, + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.group", + verbose_name="groups", + ), + ), + ] diff --git a/blog/templates/__init__.py b/engine/authv/migrations/__init__.py similarity index 100% rename from blog/templates/__init__.py rename to engine/authv/migrations/__init__.py diff --git a/vibes_auth/models.py b/engine/authv/models.py similarity index 71% rename from vibes_auth/models.py rename to engine/authv/models.py index 2eb00d04..8a68313f 100644 --- a/vibes_auth/models.py +++ b/engine/authv/models.py @@ -1,5 +1,6 @@ from uuid import uuid4 +from django.conf import settings from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import Group as BaseGroup from django.core.cache import cache @@ -19,10 +20,10 @@ from rest_framework_simplejwt.token_blacklist.models import ( OutstandingToken as BaseOutstandingToken, ) -from core.abstract import NiceModel -from evibes.settings import LANGUAGE_CODE, LANGUAGES -from vibes_auth.managers import UserManager -from vibes_auth.validators import validate_phone_number +from engine.core.abstract import NiceModel +from engine.authv.managers import UserManager +from engine.authv.validators import validate_phone_number +from engine.payments.models import Balance class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing] @@ -76,9 +77,13 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing] ) activation_token = UUIDField(default=uuid4, verbose_name=_("activation token")) - language = CharField(choices=LANGUAGES, default=LANGUAGE_CODE, null=False, blank=False, max_length=7) + language = CharField( + choices=settings.LANGUAGES, default=settings.LANGUAGE_CODE, null=False, blank=False, max_length=7 + ) attributes = JSONField(verbose_name=_("attributes"), default=dict, blank=True, null=True) + payments_balance: "Balance" + USERNAME_FIELD = "email" REQUIRED_FIELDS = [] # noinspection PyClassVar @@ -112,20 +117,6 @@ class User(AbstractUser, NiceModel): # type: ignore [django-manager-missing] class Group(BaseGroup): - """ - Proxy model representing a Group entity. - - This class acts as a proxy for the `BaseGroup` model, providing additional - configuration for display and usage purposes. It does not introduce new fields - or behavior but alters representation and metadata for the Group model. - - Attributes: - Meta.proxy (bool): Indicates this is a proxy model. - Meta.verbose_name (str): Human-readable singular name for the Group model. - Meta.verbose_name_plural (str): Human-readable plural name for the Group - model. - """ - class Meta: proxy = True verbose_name = _("group") @@ -133,16 +124,6 @@ class Group(BaseGroup): class OutstandingToken(BaseOutstandingToken): - """ - Represents a proxy model for outstanding tokens. - - This class is a proxy for the `BaseOutstandingToken` model, used to manage - and customize behaviors or configurations related to outstanding tokens. - It does not add additional fields or logic to the base model but allows for - overloading or extending its default functionality as required. - - """ - class Meta: proxy = True verbose_name = _("outstanding token") @@ -150,18 +131,6 @@ class OutstandingToken(BaseOutstandingToken): class BlacklistedToken(BaseBlacklistedToken): - """ - Represents a blacklisted token model in the system. - - This class acts as a Django model proxy and serves the purpose of managing - blacklisted tokens. It inherits from a base class provided for this purpose, - allowing for the extension of functionality or customization of behavior - without altering the original base class's structure. It also defines the - Meta options for the model, affecting its database and administrative - representation. - - """ - class Meta: proxy = True verbose_name = _("blacklisted token") diff --git a/vibes_auth/serializers.py b/engine/authv/serializers.py similarity index 97% rename from vibes_auth/serializers.py rename to engine/authv/serializers.py index 62f370f5..65998bd5 100644 --- a/vibes_auth/serializers.py +++ b/engine/authv/serializers.py @@ -27,12 +27,12 @@ from rest_framework_simplejwt.settings import api_settings from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken from rest_framework_simplejwt.tokens import RefreshToken, Token, UntypedToken -from core.models import Product -from core.serializers import ProductSimpleSerializer -from core.utils.security import is_safe_key -from evibes import settings -from vibes_auth.models import User -from vibes_auth.validators import validate_phone_number +from engine.core.models import Product +from engine.core.serializers import ProductSimpleSerializer +from engine.core.utils.security import is_safe_key +from django.conf import settings +from engine.authv.models import User +from engine.authv.validators import validate_phone_number logger = logging.getLogger(__name__) diff --git a/vibes_auth/signals.py b/engine/authv/signals.py similarity index 86% rename from vibes_auth/signals.py rename to engine/authv/signals.py index 0a17c84a..19645347 100644 --- a/vibes_auth/signals.py +++ b/engine/authv/signals.py @@ -2,8 +2,8 @@ from django.db import transaction from django.db.models.signals import post_save, pre_save from django.dispatch import receiver -from vibes_auth.models import User -from vibes_auth.utils.emailing import send_verification_email_task +from engine.authv.models import User +from engine.authv.utils.emailing import send_verification_email_task @receiver(post_save, sender=User) diff --git a/vibes_auth/static/person.png b/engine/authv/static/person.png similarity index 100% rename from vibes_auth/static/person.png rename to engine/authv/static/person.png diff --git a/vibes_auth/tasks.py b/engine/authv/tasks.py similarity index 89% rename from vibes_auth/tasks.py rename to engine/authv/tasks.py index 79f7a870..4ff28bde 100644 --- a/vibes_auth/tasks.py +++ b/engine/authv/tasks.py @@ -1,7 +1,7 @@ from celery import shared_task -from core.models import Order, Wishlist -from vibes_auth.models import User +from engine.core.models import Order, Wishlist +from engine.authv.models import User @shared_task(queue="default") diff --git a/blog/utils/__init__.py b/engine/authv/templates/__init__.py similarity index 100% rename from blog/utils/__init__.py rename to engine/authv/templates/__init__.py diff --git a/vibes_auth/templates/user_reset_password_email.html b/engine/authv/templates/user_reset_password_email.html similarity index 100% rename from vibes_auth/templates/user_reset_password_email.html rename to engine/authv/templates/user_reset_password_email.html diff --git a/vibes_auth/templates/user_verification_email.html b/engine/authv/templates/user_verification_email.html similarity index 100% rename from vibes_auth/templates/user_verification_email.html rename to engine/authv/templates/user_verification_email.html diff --git a/blog/tests.py b/engine/authv/tests.py similarity index 100% rename from blog/tests.py rename to engine/authv/tests.py diff --git a/vibes_auth/urls.py b/engine/authv/urls.py similarity index 75% rename from vibes_auth/urls.py rename to engine/authv/urls.py index d09ffedb..3a9f893f 100644 --- a/vibes_auth/urls.py +++ b/engine/authv/urls.py @@ -1,10 +1,10 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from vibes_auth.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView -from vibes_auth.viewsets import UserViewSet +from engine.authv.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView +from engine.authv.viewsets import UserViewSet -app_name = "vibes_auth" +app_name = "authv" auth_router = DefaultRouter() auth_router.register(r"users", UserViewSet, basename="users") diff --git a/core/__init__.py b/engine/authv/utils/__init__.py similarity index 100% rename from core/__init__.py rename to engine/authv/utils/__init__.py diff --git a/vibes_auth/utils/emailing.py b/engine/authv/utils/emailing.py similarity index 93% rename from vibes_auth/utils/emailing.py rename to engine/authv/utils/emailing.py index 611fa705..5dc76f13 100644 --- a/vibes_auth/utils/emailing.py +++ b/engine/authv/utils/emailing.py @@ -8,8 +8,8 @@ from django.utils.http import urlsafe_base64_encode from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ -from core.utils import get_dynamic_email_connection -from vibes_auth.models import User +from engine.core.utils import get_dynamic_email_connection +from engine.authv.models import User @shared_task(queue="default") @@ -22,7 +22,7 @@ def send_verification_email_task(user_pk: str) -> tuple[bool, str]: email_subject = _(f"{config.PROJECT_NAME} | Activate Account") email_body = render_to_string( - "user_verification_email.html", + "../templates/user_verification_email.html", { "user_first_name": user.first_name, "activation_link": f"https://{config.FRONTEND_DOMAIN}/{user.language}/activate-user?uid={urlsafe_base64_encode(force_bytes(user.uuid))}" @@ -61,7 +61,7 @@ def send_reset_password_email_task(user_pk: str) -> tuple[bool, str]: email_subject = _(f"{config.PROJECT_NAME} | Reset Password") email_body = render_to_string( - "user_reset_password_email.html", + "../templates/user_reset_password_email.html", { "user_first_name": user.first_name, "reset_link": f"https://{config.FRONTEND_DOMAIN}/{user.language}/reset-password?uid=" diff --git a/vibes_auth/validators.py b/engine/authv/validators.py similarity index 100% rename from vibes_auth/validators.py rename to engine/authv/validators.py diff --git a/vibes_auth/views.py b/engine/authv/views.py similarity index 90% rename from vibes_auth/views.py rename to engine/authv/views.py index 0aeafcb2..5cd49183 100644 --- a/vibes_auth/views.py +++ b/engine/authv/views.py @@ -1,6 +1,7 @@ import logging from typing import Any +from django.conf import settings from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django_ratelimit.decorators import ratelimit @@ -13,9 +14,8 @@ from rest_framework.response import Response from rest_framework_simplejwt.exceptions import TokenError from rest_framework_simplejwt.views import TokenViewBase -from evibes.settings import DEBUG -from vibes_auth.docs.drf.views import TOKEN_OBTAIN_SCHEMA, TOKEN_REFRESH_SCHEMA, TOKEN_VERIFY_SCHEMA -from vibes_auth.serializers import ( +from engine.authv.docs.drf.views import TOKEN_OBTAIN_SCHEMA, TOKEN_REFRESH_SCHEMA, TOKEN_VERIFY_SCHEMA +from engine.authv.serializers import ( TokenObtainPairSerializer, TokenRefreshSerializer, TokenVerifySerializer, @@ -37,7 +37,7 @@ class TokenObtainPairView(TokenViewBase): serializer_class = TokenObtainPairSerializer # type: ignore [assignment] _serializer_class = TokenObtainPairSerializer # type: ignore [assignment] - @method_decorator(ratelimit(key="ip", rate="10/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="10/h" if not settings.DEBUG else "888/h")) def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: return super().post(request, *args, **kwargs) @@ -56,7 +56,7 @@ class TokenRefreshView(TokenViewBase): serializer_class = TokenRefreshSerializer # type: ignore [assignment] _serializer_class = TokenRefreshSerializer # type: ignore [assignment] - @method_decorator(ratelimit(key="ip", rate="10/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="10/h" if not settings.DEBUG else "888/h")) def post(self, request: Request, *args: list[Any], **kwargs: dict[Any, Any]) -> Response: return super().post(request, *args, **kwargs) diff --git a/vibes_auth/viewsets.py b/engine/authv/viewsets.py similarity index 90% rename from vibes_auth/viewsets.py rename to engine/authv/viewsets.py index 9d9967dd..39c12774 100644 --- a/vibes_auth/viewsets.py +++ b/engine/authv/viewsets.py @@ -4,6 +4,7 @@ from contextlib import suppress from secrets import compare_digest from typing import Type +from django.conf import settings from django.contrib.auth.password_validation import validate_password from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core.exceptions import ValidationError @@ -20,14 +21,13 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet from rest_framework_simplejwt.tokens import RefreshToken -from evibes.settings import DEBUG -from vibes_auth.docs.drf.viewsets import USER_SCHEMA -from vibes_auth.models import User -from vibes_auth.serializers import ( +from engine.authv.docs.drf.viewsets import USER_SCHEMA +from engine.authv.models import User +from engine.authv.serializers import ( MergeRecentlyViewedSerializer, UserSerializer, ) -from vibes_auth.utils.emailing import send_reset_password_email_task +from engine.authv.utils.emailing import send_reset_password_email_task logger = logging.getLogger(__name__) @@ -54,7 +54,7 @@ class UserViewSet( permission_classes = [AllowAny] @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not settings.DEBUG else "888/h")) def reset_password(self, request: Request) -> Response: user = None with suppress(User.DoesNotExist): @@ -64,7 +64,7 @@ class UserViewSet( return Response(status=status.HTTP_200_OK) @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) - @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not settings.DEBUG else "888/h")) def upload_avatar(self, request: Request, *args, **kwargs) -> Response: user = self.get_object() if request.user != user: @@ -76,7 +76,7 @@ class UserViewSet( return Response(status=status.HTTP_400_BAD_REQUEST) @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not settings.DEBUG else "888/h")) def confirm_password_reset(self, request: Request, *args, **kwargs) -> Response: try: if not compare_digest(request.data.get("password"), request.data.get("confirm_password")): # type: ignore [arg-type] @@ -100,12 +100,12 @@ class UserViewSet( except (TypeError, ValueError, OverflowError, ValidationError, User.DoesNotExist) as e: data = {"error": str(e)} - if DEBUG: + if settings.DEBUG: data["detail"] = str(traceback.format_exc()) data["received"] = str(request.data) return Response(data, status=status.HTTP_400_BAD_REQUEST) - @method_decorator(ratelimit(key="ip", rate="3/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="3/h" if not settings.DEBUG else "888/h")) def create(self, request: Request, *args, **kwargs) -> Response: serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -115,7 +115,7 @@ class UserViewSet( return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not settings.DEBUG else "888/h")) def activate(self, request: Request) -> Response: detail = "" activation_error: Type[Exception] | None = None @@ -140,7 +140,7 @@ class UserViewSet( activation_error = activation_error detail = str(traceback.format_exc()) if user is None: - if DEBUG: + if settings.DEBUG: raise Exception from activation_error # type: ignore [misc] return Response( {"error": _("activation link is invalid!"), "detail": detail}, diff --git a/core/crm/amo/__init__.py b/engine/blog/__init__.py similarity index 100% rename from core/crm/amo/__init__.py rename to engine/blog/__init__.py diff --git a/blog/admin.py b/engine/blog/admin.py similarity index 89% rename from blog/admin.py rename to engine/blog/admin.py index b207d677..611edfe2 100644 --- a/blog/admin.py +++ b/engine/blog/admin.py @@ -1,7 +1,7 @@ from django.contrib.admin import ModelAdmin, register from django_summernote.admin import SummernoteModelAdminMixin -from core.admin import ActivationActionsMixin, FieldsetsMixin +from engine.core.admin import ActivationActionsMixin, FieldsetsMixin from .models import Post, PostTag @@ -13,7 +13,7 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixi search_fields = ("title", "content", "slug") filter_horizontal = ("tags",) date_hierarchy = "created" - autocomplete_fields = ("author", "tags") + autocomplete_fields = ("tags",) readonly_fields = ( "uuid", "slug", @@ -29,6 +29,7 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixi "file", ] relation_fields = [ + "author", "tags", ] diff --git a/blog/apps.py b/engine/blog/apps.py similarity index 68% rename from blog/apps.py rename to engine/blog/apps.py index 689b2aaf..500c1bdd 100644 --- a/blog/apps.py +++ b/engine/blog/apps.py @@ -4,10 +4,10 @@ from django.utils.translation import gettext_lazy as _ class BlogConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "blog" + name = "engine.blog" verbose_name = _("blog") # noinspection PyUnresolvedReferences def ready(self) -> None: - import blog.elasticsearch.documents - import blog.signals # noqa: F401 + import engine.blog.elasticsearch.documents + import engine.blog.signals # noqa: F401 diff --git a/core/docs/__init__.py b/engine/blog/docs/__init__.py similarity index 100% rename from core/docs/__init__.py rename to engine/blog/docs/__init__.py diff --git a/core/management/__init__.py b/engine/blog/docs/drf/__init__.py similarity index 100% rename from core/management/__init__.py rename to engine/blog/docs/drf/__init__.py diff --git a/blog/docs/drf/views.py b/engine/blog/docs/drf/views.py similarity index 100% rename from blog/docs/drf/views.py rename to engine/blog/docs/drf/views.py diff --git a/blog/docs/drf/viewsets.py b/engine/blog/docs/drf/viewsets.py similarity index 83% rename from blog/docs/drf/viewsets.py rename to engine/blog/docs/drf/viewsets.py index c0e9a5ee..14d2e36f 100644 --- a/blog/docs/drf/viewsets.py +++ b/engine/blog/docs/drf/viewsets.py @@ -2,8 +2,8 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema from rest_framework import status -from core.docs.drf import BASE_ERRORS -from blog.serializers import PostSerializer +from engine.core.docs.drf import BASE_ERRORS +from engine.blog.serializers import PostSerializer POST_SCHEMA = { "list": extend_schema( diff --git a/core/migrations/__init__.py b/engine/blog/elasticsearch/__init__.py similarity index 100% rename from core/migrations/__init__.py rename to engine/blog/elasticsearch/__init__.py diff --git a/blog/elasticsearch/documents.py b/engine/blog/elasticsearch/documents.py similarity index 83% rename from blog/elasticsearch/documents.py rename to engine/blog/elasticsearch/documents.py index f266efaf..0a7b0005 100644 --- a/blog/elasticsearch/documents.py +++ b/engine/blog/elasticsearch/documents.py @@ -1,9 +1,9 @@ from django_elasticsearch_dsl import fields from django_elasticsearch_dsl.registries import registry -from blog.models import Post -from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields -from core.elasticsearch.documents import BaseDocument +from engine.blog.models import Post +from engine.core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields +from engine.core.elasticsearch.documents import BaseDocument class PostDocument(ActiveOnlyMixin, BaseDocument): # type: ignore [misc] diff --git a/blog/filters.py b/engine/blog/filters.py similarity index 89% rename from blog/filters.py rename to engine/blog/filters.py index 115e9d99..fd6f1db3 100644 --- a/blog/filters.py +++ b/engine/blog/filters.py @@ -1,7 +1,7 @@ from django_filters import CharFilter, FilterSet, OrderingFilter, UUIDFilter -from blog.models import Post -from core.filters import CaseInsensitiveListFilter +from engine.blog.models import Post +from engine.core.filters import CaseInsensitiveListFilter class PostFilter(FilterSet): # type: ignore [misc] diff --git a/core/templates/__init__.py b/engine/blog/graphene/__init__.py similarity index 100% rename from core/templates/__init__.py rename to engine/blog/graphene/__init__.py diff --git a/blog/graphene/object_types.py b/engine/blog/graphene/object_types.py similarity index 92% rename from blog/graphene/object_types.py rename to engine/blog/graphene/object_types.py index 0ee27abc..08cef11e 100644 --- a/blog/graphene/object_types.py +++ b/engine/blog/graphene/object_types.py @@ -2,7 +2,7 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType -from blog.models import Post, PostTag +from engine.blog.models import Post, PostTag class PostType(DjangoObjectType): diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.mo b/engine/blog/locale/ar_AR/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/ar_AR/LC_MESSAGES/django.mo rename to engine/blog/locale/ar_AR/LC_MESSAGES/django.mo index 048a14b82ebe4bc189b07b394901873dc2a4ba1f..025f21962ac3c775ee57e7e22462c9e9cd77210a 100644 GIT binary patch delta 182 zcmaDM_fl@cp88lu28Ic23=Dcq3=Hqs85qQXv@90`Llgr8g9#4<10Rs?2huJ;dLEFL z0Md_vbOVt71Ej5hbS*E0zXM2v)LQ}xX&~(Zq-BA03Xqlr(oH~G2uRNX(ja~7`55FF pWPprUKmk!8&CU-oKo&^b0QowbBN>BO*^CT~O!Z7QZ(!TO0RYnu7ia(g delta 181 zcmaDU_d;&Mp86O@28Ic23=Dcq3=D7C85qQXvS10Rs?1JW))dM=Qb z0Md_ubOVt74WzArbPX?rza2<})LQ@vX&~(mq-BA0GLV)8(v3h`2uRNc(ja~7_!#6E oWPps9Kmk!8&BhNgKn6(L0QuURBN>BOS&j7!^b9s{WZS_30JSj}7ytkO diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po similarity index 81% rename from blog/locale/ar_AR/LC_MESSAGES/django.po rename to engine/blog/locale/ar_AR/LC_MESSAGES/django.po index 828cce10..4e587d1c 100644 --- a/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,93 +13,92 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "المدونة" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "سرد جميع المشاركات (للقراءة فقط)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "استرداد منشور واحد (للقراءة فقط)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "يمثل نموذج منشور المدونة. تحدد فئة المشاركة بنية وسلوك مشاركة المدونة. " "وتتضمن سمات للمؤلف والعنوان والمحتوى ومرفق الملف الاختياري والسبيكة " -"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن" -" ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على " -"العنوان." +"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن " +"ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على العنوان." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "عنوان المنشور" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "العنوان" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "هي صفحة ثابتة" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "المنشور" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "المنشورات" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "معرّف العلامة الداخلي لعلامة المنشور" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "اسم العلامة" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "اسم سهل الاستخدام لعلامة المنشور" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "اسم عرض العلامة" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "علامة المشاركة" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "علامات المشاركة" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/cs_CZ/LC_MESSAGES/django.mo rename to engine/blog/locale/cs_CZ/LC_MESSAGES/django.mo index 4a82f5760dfd60161a82dfbf9c1f804283ef5f5a..b350ee60b1b382e231ba093c96b4664aee019519 100644 GIT binary patch delta 182 zcmWO0F%H3C0LAgwgil1JNd<|DIDt|uY+aekVsHqHr9&^!Mh{>x8Z|YF3%G*B1;iQr zlb82<<4e8F%OAR6X!S#q%|&)=t@oTh7)u+ l!WR;Ks0_b>BFz}_KngKOzG#IxZrtA6`hJ$AN$MK&Hh*Jl7SR9z diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po similarity index 78% rename from blog/locale/cs_CZ/LC_MESSAGES/django.po rename to engine/blog/locale/cs_CZ/LC_MESSAGES/django.po index 4187f2cb..3561aeb2 100644 --- a/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,96 +13,96 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Seznam všech příspěvků (pouze pro čtení)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Získání jednoho příspěvku (pouze pro čtení)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Představuje model příspěvku na blogu. Třída Post definuje strukturu a " "chování příspěvku na blogu. Obsahuje atributy pro autora, název, obsah, " "volitelnou přílohu, slug a přidružené značky. Třída vynucuje omezení, jako " -"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje" -" také automatické generování slugu na základě názvu." +"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje " +"také automatické generování slugu na základě názvu." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Název příspěvku" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Název" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "je statická stránka" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"je to příspěvek pro stránku se statickou adresou URL (např. " -"`/help/delivery`)?" +"je to příspěvek pro stránku se statickou adresou URL (např. `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Příspěvek" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Příspěvky" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se " "vylučují." -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "interní identifikátor tagu pro tag příspěvku" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Název štítku" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Uživatelsky přívětivý název pro značku příspěvku" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Označení příspěvku" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Štítky příspěvků" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -111,8 +111,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"Zapouzdřuje operace pro správu a načítání entit Post v sadě zobrazení modelu" -" pouze pro čtení. Tato třída je přizpůsobena pro práci s aktivními objekty " +"Zapouzdřuje operace pro správu a načítání entit Post v sadě zobrazení modelu " +"pouze pro čtení. Tato třída je přizpůsobena pro práci s aktivními objekty " "Post a umožňuje filtrování na základě definovaných filtrů. Integruje se s " "backendovým systémem filtrování Djanga a zajišťuje soulad operací s " "definovanými oprávněními. Sada zobrazení obsahuje také dodatečnou " diff --git a/blog/locale/da_DK/LC_MESSAGES/django.mo b/engine/blog/locale/da_DK/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/da_DK/LC_MESSAGES/django.mo rename to engine/blog/locale/da_DK/LC_MESSAGES/django.mo index 16ecd96aae4e0209a73f6d153172385bd16e7b3b..83be66a115578db2aec9e963c646611c1f1bc4d1 100644 GIT binary patch delta 182 zcmXZUzY2n27=`g8DrxOX4LoCnSL|bjORRB(ktZ#1g}l%KJ9xq_ p-mr(of3I-D{q_{fCwwWI=(i;s2ROuWzO^>CN#bNao#l6PG(TDg7$^V$ delta 181 zcmXZUI|{;36olakc&|z#K9VW~!Bm100xrQ$K_Okhy|{%SRtjQmrKHqKv`lI52Hb-9 z7gpb#892}I5f-=g%8?2y-SJbG4tQ=#b4g2As^K2Tc*Gu7IKwx_IP#<^E|3@6U>kSX o!4r1z`rj)Ya=$$F6%f7@4fI=*!3YN!m${P}GfC1UEiZO!e>+4M*Z=?k diff --git a/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po similarity index 79% rename from blog/locale/da_DK/LC_MESSAGES/django.po rename to engine/blog/locale/da_DK/LC_MESSAGES/django.po index 14d9d412..68ba1d64 100644 --- a/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,94 +13,94 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Vis alle indlæg (skrivebeskyttet)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Hent et enkelt indlæg (skrivebeskyttet)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Repræsenterer en blogindlægsmodel. Post-klassen definerer strukturen og " "adfærden i et blogindlæg. Den indeholder attributter for forfatter, titel, " "indhold, valgfri vedhæftet fil, slug og tilknyttede tags. Klassen håndhæver " "begrænsninger som f.eks. at kræve enten indhold eller en vedhæftet fil, men " -"ikke begge dele på samme tid. Den understøtter også automatisk generering af" -" slugs baseret på titlen." +"ikke begge dele på samme tid. Den understøtter også automatisk generering af " +"slugs baseret på titlen." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Indlæggets titel" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titel" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "er en statisk side" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Indlæg" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Indlæg" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "intern tag-identifikator for indlægs-tagget" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tag-navn" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Brugervenligt navn til posttagget" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Navn på tag-visning" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Tag til indlæg" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tags til indlæg" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,6 +113,5 @@ msgstr "" "skrivebeskyttet modelvisningssæt. Denne klasse er skræddersyet til at " "håndtere Post-objekter, der er aktive, og tillader filtrering baseret på " "definerede filtre. Den integreres med Djangos backend-filtreringssystem og " -"sikrer, at handlingerne er i overensstemmelse med de definerede tilladelser." -" Visningssættet indeholder også en ekstra konfiguration af tilladelsen " -"'hent'." +"sikrer, at handlingerne er i overensstemmelse med de definerede tilladelser. " +"Visningssættet indeholder også en ekstra konfiguration af tilladelsen 'hent'." diff --git a/blog/locale/de_DE/LC_MESSAGES/django.mo b/engine/blog/locale/de_DE/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/de_DE/LC_MESSAGES/django.mo rename to engine/blog/locale/de_DE/LC_MESSAGES/django.mo index 6e4506433947edb59c8ed524c93134347d18d437..9ef22b24863970252deaf7fdf1f827b8e5aa3b1b 100644 GIT binary patch delta 182 zcmWN}F$%&!6olakn2lnhU?m1D?2?FtsI}k?Or@Y_@Cf!+TX=x9sUmD^<0UNg0Cpb0 zMt>OQd%R+v@hi5s)4`Lhk>28O=+mMsXfgz$tt?D%4?KcRMc%<9I5#D9fYv4O6YRgw;Use@mf;|~Lz4Wt5dT;d70ct<8Q@g<@u pHN+K;ag9u?zzp}kB8@nXJi2&BgBM(2Yj@7Zm@G+?)Lz}#`vX(O7eW94 diff --git a/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po similarity index 81% rename from blog/locale/de_DE/LC_MESSAGES/django.po rename to engine/blog/locale/de_DE/LC_MESSAGES/django.po index 92e98930..ead9f1ac 100644 --- a/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Alle Beiträge auflisten (schreibgeschützt)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Einen einzelnen Beitrag abrufen (schreibgeschützt)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Stellt ein Blogpost-Modell dar. Die Klasse Post definiert die Struktur und " "das Verhalten eines Blogeintrags. Sie enthält Attribute für Autor, Titel, " @@ -42,70 +42,70 @@ msgstr "" "unterstützt auch die automatische Slug-Generierung auf der Grundlage des " "Titels." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Titel des Beitrags" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titel" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "ist eine statische Seite" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. " -"`/help/delivery`)?" +"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Beitrag" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Beiträge" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen " "Markdown-Inhalte!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - " "beide schließen sich gegenseitig aus" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "interner Tag-Bezeichner für den Post-Tag" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tag name" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Benutzerfreundlicher Name für das Post-Tag" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Tag-Anzeigename" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Tag eintragen" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tags eintragen" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -119,5 +119,5 @@ msgstr "" "aktiver Post-Objekte zugeschnitten und ermöglicht die Filterung auf der " "Grundlage definierter Filter. Sie integriert sich in das Backend-" "Filtersystem von Django und stellt sicher, dass die Operationen mit den " -"definierten Berechtigungen übereinstimmen. Das View Set beinhaltet auch eine" -" zusätzliche 'retrieve' Berechtigungskonfiguration." +"definierten Berechtigungen übereinstimmen. Das View Set beinhaltet auch eine " +"zusätzliche 'retrieve' Berechtigungskonfiguration." diff --git a/blog/locale/en_GB/LC_MESSAGES/django.mo b/engine/blog/locale/en_GB/LC_MESSAGES/django.mo similarity index 93% rename from blog/locale/en_GB/LC_MESSAGES/django.mo rename to engine/blog/locale/en_GB/LC_MESSAGES/django.mo index 546e6068582f8868068a5de860ec8a9c9532e217..19eced8ac1cc0448efbffce21c245f6fccb30558 100644 GIT binary patch delta 182 zcmZ1_xmt3lM< z1Jdb0+6hRP0cj~9y%R{g0O>108l+y5hk=0uNXr3fpivC!KpKb`41okIkhTNTNt4gzgPj_UljcS delta 181 zcmZ22xk_@vp89Y`28Ic23=BO$`UN`!Lj{m78l+x=hk=0uNXr6gpivBJKpKb`41feHkhTTVNSOLW>6s-UN diff --git a/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po similarity index 82% rename from blog/locale/en_GB/LC_MESSAGES/django.po rename to engine/blog/locale/en_GB/LC_MESSAGES/django.po index ff8c6d21..29b6d593 100644 --- a/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,93 +17,93 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "List all posts (read-only)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Retrieve a single post (read-only)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Post's title" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Title" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "is static page" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Posts" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown files are not supported yer - use markdown content instead!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tag name" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tag" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Post tags" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/en_US/LC_MESSAGES/django.mo b/engine/blog/locale/en_US/LC_MESSAGES/django.mo similarity index 93% rename from blog/locale/en_US/LC_MESSAGES/django.mo rename to engine/blog/locale/en_US/LC_MESSAGES/django.mo index 804f150e98f769b9ce3dbc9952798fba0d5f7448..f34a002b0a855c3d3d1ce91e8ccd4b75e728982f 100644 GIT binary patch delta 182 zcmXZUu?m845XbSK(EneiM5_%BximzGRAWQ7xVAO)20nlw;@0Hgn6>tCm delta 181 zcmdlWxn6R@p86O@28Ic23=BO$`Yk&HLj{no;$&d(WME+U%*DXK0;FxZ85lHxv=fl# z1Jc<*+6hQk0cj~9y%$Kk0O=b*8l+y9hk=0uNGkzppivCkKpKb`Oo0R|kahynN\n" "Language-Team: LANGUAGE \n" @@ -13,93 +13,93 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "List all posts (read-only)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Retrieve a single post (read-only)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Post's title" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Title" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "is static page" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Posts" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown files are not supported yer - use markdown content instead!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tag name" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tag" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Post tags" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/es_ES/LC_MESSAGES/django.mo b/engine/blog/locale/es_ES/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/es_ES/LC_MESSAGES/django.mo rename to engine/blog/locale/es_ES/LC_MESSAGES/django.mo index 0722bcdf953a87437cad7fc720375cc4e3c0b51a..5729fa3ffcf56d9287fe0a01923c518ecdbce8bd 100644 GIT binary patch delta 182 zcmXZVu?m846vg2q)L$aSAp${Y4?;q0>kZl*3Mz6X{n{n zpV0K(dpO*C3{F9L+vS#28tIO2TRLDpkWxvTq13|*PVtI9J~7ANKVLi2ihYknYS6<6 ra!M~8;Rksk+m&YMxteIquq5bAuqzZ8`r4wEUQYtAMN_;Th4M+Gu qPU(eXd?PPpTq!`$)l3tHB|+y3yTT4*+*g^kw(Uh2g;8}eAM*ovIvAG# diff --git a/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po similarity index 80% rename from blog/locale/es_ES/LC_MESSAGES/django.po rename to engine/blog/locale/es_ES/LC_MESSAGES/django.po index 3ddbd12b..c919b8e4 100644 --- a/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Listar todos los mensajes (sólo lectura)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Recuperar una única entrada (sólo lectura)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Representa un modelo de entrada de blog. La clase Post define la estructura " "y el comportamiento de una entrada de blog. Incluye atributos para autor, " @@ -41,69 +41,69 @@ msgstr "" "adjunto, pero no ambos simultáneamente. También admite la generación " "automática de slug a partir del título." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Título del mensaje" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Título" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "es una página estática" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"¿se trata de una entrada para una página con URL estática (por ejemplo, " -"`/help/delivery`)?" +"¿se trata de una entrada para una página con URL estática (por ejemplo, `/" +"help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Publicar en" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Puestos" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "se debe proporcionar un archivo markdown o contenido markdown - mutuamente " "excluyentes" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "identificador interno de la etiqueta post" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nombre de la etiqueta" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nombre fácil de usar para la etiqueta de la entrada" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Etiqueta postal" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Etiquetas" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -115,7 +115,7 @@ msgstr "" "Encapsula operaciones para gestionar y recuperar entidades Post en un " "conjunto de vistas de modelo de sólo lectura. Esta clase está adaptada para " "manejar objetos Post que están activos y permite el filtrado basado en " -"filtros definidos. Se integra con el sistema de filtrado backend de Django y" -" asegura que las operaciones se alinean con los permisos definidos. El " +"filtros definidos. Se integra con el sistema de filtrado backend de Django y " +"asegura que las operaciones se alinean con los permisos definidos. El " "conjunto de vistas también incluye una configuración adicional de permisos " "de \"recuperación\"." diff --git a/core/locale/fa_IR/LC_MESSAGES/django.mo b/engine/blog/locale/fa_IR/LC_MESSAGES/django.mo similarity index 100% rename from core/locale/fa_IR/LC_MESSAGES/django.mo rename to engine/blog/locale/fa_IR/LC_MESSAGES/django.mo diff --git a/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po similarity index 77% rename from blog/locale/fa_IR/LC_MESSAGES/django.po rename to engine/blog/locale/fa_IR/LC_MESSAGES/django.po index 94a169ef..9185b2a4 100644 --- a/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,19 +16,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,64 +38,64 @@ msgid "" "title." msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.mo b/engine/blog/locale/fr_FR/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/fr_FR/LC_MESSAGES/django.mo rename to engine/blog/locale/fr_FR/LC_MESSAGES/django.mo index 5d6773d5df7bca2c658213bc9055c209b8e7c99b..a611eed2d2ab9c20a3add0c760d99eba9f400f5c 100644 GIT binary patch delta 182 zcmXZVu?m7<0L1Z=@)IecrAbH{93qskg0|+?HU)>C#8>!Ups5!ST%BBVc5AA+M~MDG z)9<+9?is#9+g7C`StC90?MVanzEnuMO{6h?FvihTn&S#fJYs@Z%<+yc#(_lC8fSR; mdqS>MV2YPO3q=G=!G~)64Yat#uF0LVYqCwYPj^jiw%!*g!52pW delta 181 zcmXZVp$fuK0EOW*+1-#iu$Tsl;9v+|1`9T`*>+`uZ{j1k2Qc{pV=QX1YPXrR`Urx* zVEPUxobyVaNp;?po>T?W1K*)^$6HrgOFBl9j~`62(~}06;RY8t!vi|JqQOZl5jDj= n&i^ivD><~djWyJWu&3ZdHU0)pIL1rsyp=J9&28Q`K@old3V#;& diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po similarity index 80% rename from blog/locale/fr_FR/LC_MESSAGES/django.po rename to engine/blog/locale/fr_FR/LC_MESSAGES/django.po index 99b93758..28e270e4 100644 --- a/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Liste de tous les messages (en lecture seule)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Récupérer un seul message (en lecture seule)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Représente un modèle de billet de blog. La classe Post définit la structure " "et le comportement d'un billet de blog. Elle comprend des attributs pour " @@ -42,70 +42,70 @@ msgstr "" "simultanément. Elle prend également en charge la génération automatique " "d'une balise en fonction du titre." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Titre du message" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titre" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "est une page statique" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"s'agit-il d'un message pour une page dont l'URL est statique (par exemple " -"`/help/delivery`) ?" +"s'agit-il d'un message pour une page dont l'URL est statique (par exemple `/" +"help/delivery`) ?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Poste" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Postes" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du " "contenu Markdown !" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent" -" mutuellement" +"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent " +"mutuellement" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "identifiant interne de la balise post" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nom du jour" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nom convivial pour la balise post" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Tag de poste" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tags de la poste" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -114,8 +114,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"Encapsule les opérations de gestion et d'extraction des entités Post dans un" -" ensemble de vues de modèle en lecture seule. Cette classe est conçue pour " +"Encapsule les opérations de gestion et d'extraction des entités Post dans un " +"ensemble de vues de modèle en lecture seule. Cette classe est conçue pour " "gérer les objets Post qui sont actifs et permet un filtrage basé sur des " "filtres définis. Elle s'intègre au système de filtrage du backend de Django " "et garantit que les opérations s'alignent sur les permissions définies. Le " diff --git a/blog/locale/he_IL/LC_MESSAGES/django.mo b/engine/blog/locale/he_IL/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/he_IL/LC_MESSAGES/django.mo rename to engine/blog/locale/he_IL/LC_MESSAGES/django.mo index 4cbf6ef78e339a877c99e9acc728cac38c3543bc..2dc1913cb2813fe19017e1dd37e365e989c8ab20 100644 GIT binary patch delta 182 zcmXBKtqQ_m0EOZ634Zf$6VWA^(ISY9i5f%%vtez);FTe5zH(UfX9Z%IpBV-HhI@PaceagRgy|36`e se#S0d(Z@S-)e|FpyBerZXnPWyM%cgwu5gnlCa&6W5>CfaezPy<2i^S_kpKVy delta 181 zcmXBKtqQ_m0EOZ63ETYJK-45#vlzxeVHQzXH`oRiZ$yIw>j&O}cOZkMU4qTz9ax6d z=nJOjoWm)?b73iZmevfyAa6c5#Vo%*x#C9A_RUaZ=vhr}qQE5f?!K diff --git a/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po similarity index 75% rename from blog/locale/he_IL/LC_MESSAGES/django.po rename to engine/blog/locale/he_IL/LC_MESSAGES/django.po index 2f84dcab..14113b8f 100644 --- a/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,90 +13,90 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "בלוג" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "הצג את כל ההודעות (לקריאה בלבד)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "איתור פוסט בודד (לקריאה בלבד)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "מייצג מודל של פוסט בבלוג. מחלקת Post מגדירה את המבנה וההתנהגות של פוסט " "בבלוג. היא כוללת תכונות עבור מחבר, כותרת, תוכן, קובץ מצורף אופציונלי, slug " "ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא " "לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "כותרת הפוסט" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "כותרת" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "הוא דף סטטי" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "פוסט" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "פוסטים" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "מזהה תגיות פנימי עבור תגיות הפוסט" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "שם היום" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "שם ידידותי למשתמש עבור תגיות הפוסט" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "שם תצוגה של התג" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "תגית פוסט" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "תגיות פוסט" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -105,7 +105,7 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"מכיל פעולות לניהול ואחזור ישויות Post במערך תצוגה של מודל לקריאה בלבד. מחלקה" -" זו מותאמת לטיפול באובייקטי Post פעילים ומאפשרת סינון על בסיס מסננים " -"מוגדרים. היא משתלבת במערכת הסינון האחורית של Django ומבטיחה שהפעולות תואמות " -"את ההרשאות המוגדרות. מערך התצוגה כולל גם תצורת הרשאה נוספת ל'אחזור'." +"מכיל פעולות לניהול ואחזור ישויות Post במערך תצוגה של מודל לקריאה בלבד. מחלקה " +"זו מותאמת לטיפול באובייקטי Post פעילים ומאפשרת סינון על בסיס מסננים מוגדרים. " +"היא משתלבת במערכת הסינון האחורית של Django ומבטיחה שהפעולות תואמות את " +"ההרשאות המוגדרות. מערך התצוגה כולל גם תצורת הרשאה נוספת ל'אחזור'." diff --git a/core/locale/hi_IN/LC_MESSAGES/django.mo b/engine/blog/locale/hi_IN/LC_MESSAGES/django.mo similarity index 74% rename from core/locale/hi_IN/LC_MESSAGES/django.mo rename to engine/blog/locale/hi_IN/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po similarity index 76% rename from blog/locale/kk_KZ/LC_MESSAGES/django.po rename to engine/blog/locale/hi_IN/LC_MESSAGES/django.po index b17deb4c..df404363 100644 --- a/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,19 +16,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,64 +38,64 @@ msgid "" "title." msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/core/locale/hr_HR/LC_MESSAGES/django.mo b/engine/blog/locale/hr_HR/LC_MESSAGES/django.mo similarity index 100% rename from core/locale/hr_HR/LC_MESSAGES/django.mo rename to engine/blog/locale/hr_HR/LC_MESSAGES/django.mo diff --git a/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po similarity index 77% rename from blog/locale/hr_HR/LC_MESSAGES/django.po rename to engine/blog/locale/hr_HR/LC_MESSAGES/django.po index 94a169ef..9185b2a4 100644 --- a/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,19 +16,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,64 +38,64 @@ msgid "" "title." msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/id_ID/LC_MESSAGES/django.mo b/engine/blog/locale/id_ID/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/id_ID/LC_MESSAGES/django.mo rename to engine/blog/locale/id_ID/LC_MESSAGES/django.mo index 9c4458ae3e551c88777394fdfaad46f931a06aa1..ed8d0cc74dd6d1011cd11edec0ddc13a3ee6b10c 100644 GIT binary patch delta 182 zcmXZUp$fua7=_{Uqx+pW5E+(*m9Zqs7>f5{5EOP1D@HBmF^m>r7of5g5iiCoFjy_V zVd?qa6TWM33(D6aGg4`#3x0ai5sSW*N%99$7jvB84#!yG79SX)?@4Q1Vh0Q4l}@c^ m9MVYQgo595|I{3pWnr35Gj!lzvF`GAcySIOq5*M5R delta 181 zcmXZUu?m7<7=_^@`Tr#fk28AK^M{x6m<_Rt+liYHa3MfpooJ6-Ah-{(Av~H zI6dEchOdsQsCZrWj#OCbfuEst#oUt)l0si{@rW^=aEc}Fu){fqfwaLD4lqYv>DGJ4 lF\n" "Language-Team: LANGUAGE \n" @@ -13,98 +13,98 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Daftar semua postingan (hanya-baca)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Mengambil satu postingan (hanya-baca)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" -"Mewakili model posting blog. Kelas Post mendefinisikan struktur dan perilaku" -" postingan blog. Kelas ini mencakup atribut untuk penulis, judul, konten, " +"Mewakili model posting blog. Kelas Post mendefinisikan struktur dan perilaku " +"postingan blog. Kelas ini mencakup atribut untuk penulis, judul, konten, " "lampiran file opsional, slug, dan tag yang terkait. Kelas ini memberlakukan " -"batasan seperti membutuhkan konten atau lampiran file, tetapi tidak keduanya" -" secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis " +"batasan seperti membutuhkan konten atau lampiran file, tetapi tidak keduanya " +"secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis " "berdasarkan judul." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Judul postingan" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Judul" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "adalah halaman statis" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya " -"`/help/pengiriman`)?" +"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya `/help/" +"pengiriman`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Pos" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Posting" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai" -" gantinya!" +"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai " +"gantinya!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "file penurunan harga atau konten penurunan harga harus disediakan - tidak " "boleh ada yang sama" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "pengidentifikasi tag internal untuk tag pos" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nama tag" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nama yang mudah digunakan untuk tag postingan" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nama tampilan tag" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Tag pos" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tag pos" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,8 +113,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"Mengenkapsulasi operasi untuk mengelola dan mengambil entitas Post dalam set" -" tampilan model hanya-baca. Kelas ini dirancang untuk menangani objek Post " +"Mengenkapsulasi operasi untuk mengelola dan mengambil entitas Post dalam set " +"tampilan model hanya-baca. Kelas ini dirancang untuk menangani objek Post " "yang aktif dan memungkinkan penyaringan berdasarkan filter yang ditentukan. " "Kelas ini terintegrasi dengan sistem penyaringan backend Django dan " "memastikan operasi sesuai dengan izin yang ditentukan. Kumpulan view juga " diff --git a/blog/locale/it_IT/LC_MESSAGES/django.mo b/engine/blog/locale/it_IT/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/it_IT/LC_MESSAGES/django.mo rename to engine/blog/locale/it_IT/LC_MESSAGES/django.mo index 4ea69e0d6e4aa14372e4185b1e4432e6d1633940..76074b2f371fe38d01aa0b77ecfdf5f9838b134f 100644 GIT binary patch delta 182 zcmaDU^-5~Op88lu28Ic23=9{6^gDJ2hIK&t04D=OC<6mSJ~smc3y?kvq?Lj6DIhHh zq~8JQARx`c!@!^kq{D%68u2=F;x6BkOt}d!^0p4 nR-ncUQD_XLfo@@N0Mbf8+I@2*V-PEwk%5t^p2_A7Y&+Qi@6H)+ delta 181 zcmaDQ^-^lWp86O@28Ic23=9{6^jmfYhIK%CKPLl2C<6mS9ybF63y?knq?Lj6Ngyo> zq~8MRARx`m!@!^kq{D!;E0Asg(yT!G7?9=w(r17)5HVZ@68u2=5mfvWkOt}d&BGuE mR-noYQD_9Dfo@^22hvJF+HG?rV-PE=v7UjR!RC!@JJ|rw>KPsY diff --git a/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po similarity index 78% rename from blog/locale/it_IT/LC_MESSAGES/django.po rename to engine/blog/locale/it_IT/LC_MESSAGES/django.po index 98ce2242..0d86f5f7 100644 --- a/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,96 +13,96 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Elenco di tutti i messaggi (solo lettura)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Recuperare un singolo post (solo lettura)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Rappresenta il modello di un post di un blog. La classe Post definisce la " "struttura e il comportamento di un post del blog. Include gli attributi per " "l'autore, il titolo, il contenuto, l'allegato opzionale, lo slug e i tag " -"associati. La classe impone dei vincoli, come la richiesta di un contenuto o" -" di un file allegato, ma non di entrambi contemporaneamente. Supporta anche " +"associati. La classe impone dei vincoli, come la richiesta di un contenuto o " +"di un file allegato, ma non di entrambi contemporaneamente. Supporta anche " "la generazione automatica dello slug in base al titolo." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Titolo del post" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titolo" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "è una pagina statica" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"Si tratta di un post per una pagina con URL statico (ad esempio " -"`/help/delivery`)?" +"Si tratta di un post per una pagina con URL statico (ad esempio `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Posta" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Messaggi" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "deve essere fornito un file markdown o un contenuto markdown - si escludono " "a vicenda" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "identificatore interno del tag post" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nome del tag" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nome intuitivo per il tag del post" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nome del tag" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tag" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tag dei post" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,8 +113,8 @@ msgid "" msgstr "" "Incapsula le operazioni per gestire e recuperare le entità Post in un " "insieme di viste del modello di sola lettura. Questa classe è fatta su " -"misura per gestire gli oggetti Post che sono attivi e consente il filtraggio" -" in base ai filtri definiti. Si integra con il sistema di filtraggio del " +"misura per gestire gli oggetti Post che sono attivi e consente il filtraggio " +"in base ai filtri definiti. Si integra con il sistema di filtraggio del " "backend di Django e garantisce che le operazioni siano in linea con i " "permessi definiti. L'insieme di viste include anche un'ulteriore " "configurazione di permessi 'retrieve'." diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.mo b/engine/blog/locale/ja_JP/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/ja_JP/LC_MESSAGES/django.mo rename to engine/blog/locale/ja_JP/LC_MESSAGES/django.mo index 2c4d8eab86b4993b533358a08edf83b12ed419a5..9fdc269507c7a50b958bd4295f0ac3ff20e0c771 100644 GIT binary patch delta 182 zcmX>ndtP?Jp88lu28Ic23=Eb`3=Hqs85mvz`5Igd45bVV3?e)X44go^3rMQ~=_x>3 z2uSY)(m_D_43KsO((=3v4AX#gDv$=L{{y6fQVeW-5Ly^WgY+o?X`odM#z5K(NL%qS o$T9E(8HGRrkj6$J4bs>RRWM_7Bx4XOn~{N$sh-K^4Qz580BRr=mH+?% delta 181 zcmX>vdro%3p86O@28Ic23=Eb`3=D7C85mvz`RZH@45bVV48lAN44go^6G*E7>B&G^ z2uSY$(m_D_G>~=$(sH~E4AX#g3Xle={|%&pQVgto5LyUGgY?M*X`odMMnKvONL%tT n$T9E(83jNAkj4fe4bs>JRWN;XBx4XOtFfMep26mgY;qg`O?wqa diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po similarity index 54% rename from blog/locale/ja_JP/LC_MESSAGES/django.po rename to engine/blog/locale/ja_JP/LC_MESSAGES/django.po index a30de701..dd1eec7d 100644 --- a/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,88 +13,95 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "ブログ" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "すべての投稿をリストアップする(読み取り専用)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "単一の投稿を取得する(読み取り専用)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" -"ブログ記事のモデルを表します。Post " -"クラスはブログ記事の構造と動作を定義します。著者、タイトル、内容、オプションの添付ファイル、スラッグ、関連タグの属性を含みます。このクラスは、内容か添付ファイルのどちらかを要求するが、両方は同時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動生成もサポートしています。" +"ブログ記事のモデルを表します。Post クラスはブログ記事の構造と動作を定義しま" +"す。著者、タイトル、内容、オプションの添付ファイル、スラッグ、関連タグの属性" +"を含みます。このクラスは、内容か添付ファイルのどちらかを要求するが、両方は同" +"時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動" +"生成もサポートしています。" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "投稿タイトル" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "タイトル" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "は静的ページ" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "ポスト" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "投稿" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" -msgstr "マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテンツを使用してください!" +msgstr "" +"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ" +"ンツを使用してください!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" -msgstr "マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならない。" +msgstr "" +"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな" +"い。" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "投稿タグの内部タグ識別子" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "タグ名" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "投稿タグのユーザーフレンドリーな名前" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "タグ表示名" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "投稿タグ" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "投稿タグ" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -103,7 +110,9 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"読み取り専用のモデルビューセットにおける Post エンティティの管理と取得のための操作をカプセル化します。このクラスは、アクティブな Post " -"オブジェクトを扱い、定義されたフィルタに基 づいてフィルタリングできるように調整されています。Django " -"のバックエンドのフィルタリングシステムと統合し、定義されたパーミッションに沿った操作を保証します。ビューセットには、追加の 'retrieve' " -"権限設定も含まれます。" +"読み取り専用のモデルビューセットにおける Post エンティティの管理と取得のため" +"の操作をカプセル化します。このクラスは、アクティブな Post オブジェクトを扱" +"い、定義されたフィルタに基 づいてフィルタリングできるように調整されています。" +"Django のバックエンドのフィルタリングシステムと統合し、定義されたパーミッショ" +"ンに沿った操作を保証します。ビューセットには、追加の 'retrieve' 権限設定も含" +"まれます。" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.mo similarity index 74% rename from core/locale/kk_KZ/LC_MESSAGES/django.mo rename to engine/blog/locale/kk_KZ/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po similarity index 76% rename from blog/locale/hi_IN/LC_MESSAGES/django.po rename to engine/blog/locale/kk_KZ/LC_MESSAGES/django.po index b17deb4c..df404363 100644 --- a/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,19 +16,19 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " @@ -38,64 +38,64 @@ msgid "" "title." msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/ko_KR/LC_MESSAGES/django.mo b/engine/blog/locale/ko_KR/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/ko_KR/LC_MESSAGES/django.mo rename to engine/blog/locale/ko_KR/LC_MESSAGES/django.mo index bb2f4545fcb4f02a03f0f6e58b6e65a4746854dd..f55e79c2ec112dfa411f1b077b342f5506b989cb 100644 GIT binary patch delta 182 zcmew>{ZD$rp88lu28Ic23=Hpq^gDJ2hRZAd`WKhk-#GNb>+` zIUsETqe zIUsEgq\n" "Language-Team: LANGUAGE \n" @@ -13,89 +13,92 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "블로그" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "모든 게시물 나열(읽기 전용)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "단일 게시물 검색(읽기 전용)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" -"블로그 글 모델을 나타냅니다. Post 클래스는 블로그 글의 구조와 동작을 정의합니다. 여기에는 작성자, 제목, 콘텐츠, 선택적 파일 " -"첨부, 슬러그 및 관련 태그에 대한 속성이 포함됩니다. 이 클래스는 콘텐츠 또는 파일 첨부 중 하나만 요구하고 둘 다 동시에 요구하지 " -"않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자동 슬러그 생성도 지원합니다." +"블로그 글 모델을 나타냅니다. Post 클래스는 블로그 글의 구조와 동작을 정의합니" +"다. 여기에는 작성자, 제목, 콘텐츠, 선택적 파일 첨부, 슬러그 및 관련 태그에 대" +"한 속성이 포함됩니다. 이 클래스는 콘텐츠 또는 파일 첨부 중 하나만 요구하고 " +"둘 다 동시에 요구하지 않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자" +"동 슬러그 생성도 지원합니다." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "게시물 제목" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "제목" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "는 정적 페이지입니다." -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "게시물" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "게시물" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" -msgstr "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" +msgstr "" +"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다." -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "게시물 태그의 내부 태그 식별자" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "태그 이름" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "게시물 태그의 사용자 친화적인 이름" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "태그 표시 이름" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "게시물 태그" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "게시물 태그" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -104,6 +107,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"읽기 전용 모델 보기 집합에서 Post 엔티티를 관리하고 검색하기 위한 작업을 캡슐화합니다. 이 클래스는 활성 상태인 Post 개체를 " -"처리하도록 맞춤화되어 있으며 정의된 필터를 기반으로 필터링을 허용합니다. 이 클래스는 장고의 백엔드 필터링 시스템과 통합되며 정의된 " -"권한에 따라 작업이 이루어지도록 합니다. 보기 세트에는 추가 '검색' 권한 구성도 포함되어 있습니다." +"읽기 전용 모델 보기 집합에서 Post 엔티티를 관리하고 검색하기 위한 작업을 캡슐" +"화합니다. 이 클래스는 활성 상태인 Post 개체를 처리하도록 맞춤화되어 있으며 정" +"의된 필터를 기반으로 필터링을 허용합니다. 이 클래스는 장고의 백엔드 필터링 시" +"스템과 통합되며 정의된 권한에 따라 작업이 이루어지도록 합니다. 보기 세트에는 " +"추가 '검색' 권한 구성도 포함되어 있습니다." diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.mo b/engine/blog/locale/nl_NL/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/nl_NL/LC_MESSAGES/django.mo rename to engine/blog/locale/nl_NL/LC_MESSAGES/django.mo index f79e9713fe9c3357f4d92cbed42498f3652c09d5..76ac761cf9050c3f265f15feb590f9eed967b04d 100644 GIT binary patch delta 182 zcmXZUu?m7<7=_^@NO-oyvdtX?fUNQfj0OYe%}^ttV|Hg?*`mN1WjaN0?)RADrXFm9`ioQ@Uao@5q!M oIK<~azi~nSx|+)4XefRU&Oox!!vM#{&Pr?(Eu(d~Dspo+E!spE0RR91 delta 181 zcmXZUp$fua7=__8@c&husECFI+n5H&z`l!EPz3MAVlg=o1jFizL1k4?w(6}I?Ry2& z^PL0Vd3jGSeQY<5lv?S6pQd!gb6Z+Uns=lI?$F0Q4)KZ!Rv6&el~x!dQ#xS_Gh|9R n4)FHRB~Hn2R}=L)z7)R)+m#IVaE7B|?Igx5!YGW2yFJ(%yrUMe diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po similarity index 82% rename from blog/locale/nl_NL/LC_MESSAGES/django.po rename to engine/blog/locale/nl_NL/LC_MESSAGES/django.po index 3ac8cefd..f6e4949a 100644 --- a/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Alle berichten weergeven (alleen-lezen)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Een enkel bericht ophalen (alleen-lezen)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Vertegenwoordigt een blogpostmodel. De klasse Post definieert de structuur " "en het gedrag van een blogbericht. Ze bevat attributen voor auteur, titel, " @@ -41,70 +41,70 @@ msgstr "" "maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van " "slugs op basis van de titel." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Titel van de post" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titel" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "is statische pagina" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"Is dit een bericht voor een pagina met een statische URL (bijv. " -"`/help/delivery`)?" +"Is dit een bericht voor een pagina met een statische URL (bijv. `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Plaats" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Berichten" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan " "markdown-inhoud!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds" -" exclusief" +"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds " +"exclusief" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "interne tagidentifier voor de posttag" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tag naam" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Gebruiksvriendelijke naam voor de posttag" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Tag weergavenaam" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tag" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Post tags" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/no_NO/LC_MESSAGES/django.mo b/engine/blog/locale/no_NO/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/no_NO/LC_MESSAGES/django.mo rename to engine/blog/locale/no_NO/LC_MESSAGES/django.mo index a3d05808a3a6b630d89699482304a61b260bc4ba..517064209b572d93f4a4be061f7f29390145c8bd 100644 GIT binary patch delta 182 zcmXBNy$XV07>40T(61sZiXd>vDJX~tsns=XY-{LPT6GX?skJF+3ml@Ktq!5X5Rbtd zny&YKmiys7z3jc;SyE=CJC-%+jF*NKNm?}}2M;*K6L#>6Yy9B^eOC%GLK|bOV~RaI pVi&JSLN6TS$JI~+j)H-v?AAZn#u0x%-&z~T1oL1yTjV#Bm40*xN~&4A-XVFSQ8Xv4D3cxqfOYoEQ(+_MYBb)%7QpddI?^Jcn`i{ zdj9__Z`Qv)yt&N%HMPAfbyR$#m@D{NE diff --git a/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po similarity index 81% rename from blog/locale/no_NO/LC_MESSAGES/django.po rename to engine/blog/locale/no_NO/LC_MESSAGES/django.po index 2029b718..c1eefdc8 100644 --- a/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blogg" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Liste over alle innlegg (skrivebeskyttet)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Hent et enkelt innlegg (skrivebeskyttet)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Representerer en blogginnleggsmodell. Post-klassen definerer strukturen og " "virkemåten til et blogginnlegg. Den inneholder attributter for forfatter, " @@ -41,66 +41,66 @@ msgstr "" "må være med, men ikke begge deler samtidig. Den støtter også automatisk " "generering av slug basert på tittelen." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Innleggets tittel" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Title" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "er statisk side" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Innlegg" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "intern tagg-identifikator for innleggstaggen" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tagg navn" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Brukervennlig navn for innleggstaggen" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tag" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tagger for innlegg" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -114,5 +114,5 @@ msgstr "" "håndtere Post-objekter som er aktive, og tillater filtrering basert på " "definerte filtre. Den integreres med Djangos backend-filtreringssystem og " "sørger for at operasjonene er i tråd med de definerte tillatelsene. " -"Visningssettet inkluderer også en ekstra konfigurasjon for " -"\"hent\"-tillatelse." +"Visningssettet inkluderer også en ekstra konfigurasjon for \"hent\"-" +"tillatelse." diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.mo b/engine/blog/locale/pl_PL/LC_MESSAGES/django.mo similarity index 91% rename from blog/locale/pl_PL/LC_MESSAGES/django.mo rename to engine/blog/locale/pl_PL/LC_MESSAGES/django.mo index cd2b96aec53f8e6d38271c7ec4e59f14570ee723..78d8454300b7f739ad7735af3a66f42e7d1ba72e 100644 GIT binary patch delta 182 zcmXZWu?m845XbSKkpC!c3JS!UTp|dOntOs8+8lfq2N9Y=XmM$33xdGF#m1ms#%Jg& z1P7nH*=sK26JFh|Wmj7frAWo>j4RuuT+3o7K8{n9}?J(t{S~ delta 181 zcmXZWu?m7v6vpvS=-$X|2_g`2atH*u(B2!=&?fXQK_E?mI5{-61ubGUIX2Y8_zwMr z;K1*k!{Ot6!%tXt$Ac%8R(fJTmI}O0q+HT!Dvj`j37&C@58UD#Q=A9V4mUX5Uyuk@ pNa_0bj)wV#4!c0HBAT9skN!;J7cFoIj@sPY8?(+_=Gw;A_6M~E7MB13 diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po similarity index 78% rename from blog/locale/pl_PL/LC_MESSAGES/django.po rename to engine/blog/locale/pl_PL/LC_MESSAGES/django.po index f11e4f1e..1202c9ae 100644 --- a/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Lista wszystkich postów (tylko do odczytu)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Pobieranie pojedynczego wpisu (tylko do odczytu)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Reprezentuje model wpisu na blogu. Klasa Post definiuje strukturę i " "zachowanie wpisu na blogu. Zawiera atrybuty autora, tytułu, treści, " @@ -41,69 +41,68 @@ msgstr "" "nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na " "podstawie tytułu." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Tytuł postu" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Tytuł" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "jest stroną statyczną" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"Czy jest to post dla strony ze statycznym adresem URL (np. " -"`/help/delivery`)?" +"Czy jest to post dla strony ze statycznym adresem URL (np. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Posty" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się " "wykluczające" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "wewnętrzny identyfikator tagu posta" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nazwa tagu" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Przyjazna dla użytkownika nazwa tagu posta" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Tag posta" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tagi postów" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,8 +112,8 @@ msgid "" "permission configuration." msgstr "" "Enkapsuluje operacje zarządzania i pobierania encji Post w zestawie widoków " -"modelu tylko do odczytu. Klasa ta jest dostosowana do obsługi obiektów Post," -" które są aktywne i pozwala na filtrowanie w oparciu o zdefiniowane filtry. " +"modelu tylko do odczytu. Klasa ta jest dostosowana do obsługi obiektów Post, " +"które są aktywne i pozwala na filtrowanie w oparciu o zdefiniowane filtry. " "Integruje się z backendowym systemem filtrowania Django i zapewnia zgodność " "operacji ze zdefiniowanymi uprawnieniami. Zestaw widoków zawiera również " "dodatkową konfigurację uprawnień \"retrieve\"." diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.mo b/engine/blog/locale/pt_BR/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/pt_BR/LC_MESSAGES/django.mo rename to engine/blog/locale/pt_BR/LC_MESSAGES/django.mo index c446d0cf131a486de7997b8a9e37f51b702c8b14..cb104a566558969153d49c2ab25d52f9317599a6 100644 GIT binary patch delta 182 zcmWm8I|{;35QX6rFgFAZ2ns$TSwMs!SMA(_AgQ#lwzadA>>#8JS%i?*)<$#}wpwW` z{=zWdVHk$Fh4(N&AGeN_8|i~DPb%=?OG`~Cv}aT*m*LmPiEx(0HB2z>Hq)$ delta 181 zcmWm8zY2l?5XbSK;Gd)fp@_uj0g6O&>=^=aQfPK2OV&Mr@AmQ%Sxg+itCF#cK(5h7n%S7 diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po similarity index 81% rename from blog/locale/pt_BR/LC_MESSAGES/django.po rename to engine/blog/locale/pt_BR/LC_MESSAGES/django.po index 2e6d7929..4848b7a0 100644 --- a/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,97 +13,96 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Listar todas as postagens (somente leitura)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Recuperar um único post (somente leitura)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Representa um modelo de post de blog. A classe Post define a estrutura e o " "comportamento de um post de blog. Ela inclui atributos para autor, título, " "conteúdo, anexo de arquivo opcional, slug e tags associadas. A classe impõe " "restrições, como exigir conteúdo ou um anexo de arquivo, mas não ambos " -"simultaneamente. Ela também oferece suporte à geração automática de slug com" -" base no título." +"simultaneamente. Ela também oferece suporte à geração automática de slug com " +"base no título." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Título da postagem" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Título" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "é uma página estática" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"Essa é uma postagem para uma página com URL estático (por exemplo, " -"`/help/delivery`)?" +"Essa é uma postagem para uma página com URL estático (por exemplo, `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Postar" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Publicações" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"Os arquivos markdown não são suportados - use conteúdo markdown em vez " -"disso!" +"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "identificador de tag interno para a tag de postagem" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nome da etiqueta" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nome de fácil utilização para a tag de postagem" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nome de exibição da tag" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Etiqueta de postagem" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Tags de postagem" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.mo b/engine/blog/locale/ro_RO/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/ro_RO/LC_MESSAGES/django.mo rename to engine/blog/locale/ro_RO/LC_MESSAGES/django.mo index 7d77ef49a44b6849295e6a206d2ab5fef691a850..7f51f8685aa1332c9a7f8c9c2e18edb16e13d1fc 100644 GIT binary patch delta 182 zcmX>qeN1}7p88lu28Ic23=FS;^gDJ2hNVFICMN?!00RRmeN=kFp86O@28Ic23=FS;^jmfYhNVFI1}6hU00RR<9XA653y?k!q^*GT6(B7R zr1^Om7(#%wI*`@}(ltOj5J;~9(jfK!fHWVFX69vJ5CqafK$;&&s{m=BRSYITS{q1P o^D@YR4NM0LfHc%Y74!jVkik\n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Listează toate postările (doar pentru citire)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Recuperează o singură postare (read-only)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Reprezintă un model de postare pe blog. Clasa Post definește structura și " "comportamentul unei postări pe blog. Aceasta include atribute pentru autor, " @@ -41,70 +41,69 @@ msgstr "" "fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea " "automată a slug-ului pe baza titlului." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Titlul postului" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titlul" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "este o pagină statică" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" -"este aceasta o postare pentru o pagină cu URL static (de exemplu " -"`/help/delivery`)?" +"este aceasta o postare pentru o pagină cu URL static (de exemplu `/help/" +"delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Mesaje" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut " -"Markdown!" +"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "trebuie furnizat un fișier markdown sau conținut markdown - se exclud " "reciproc" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "identificator intern de etichetă pentru eticheta postului" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Nume etichetă" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Nume ușor de utilizat pentru eticheta postului" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Nume afișare etichetă" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Etichetă post" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Etichete poștale" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,8 +112,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"Încapsulează operațiunile de gestionare și extragere a entităților Post " -"într-un set de vizualizări de model numai pentru citire. Această clasă este " +"Încapsulează operațiunile de gestionare și extragere a entităților Post într-" +"un set de vizualizări de model numai pentru citire. Această clasă este " "adaptată pentru a gestiona obiectele Post care sunt active și permite " "filtrarea pe baza filtrelor definite. Se integrează cu sistemul de filtrare " "din backend al Django și asigură alinierea operațiunilor cu permisiunile " diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.mo b/engine/blog/locale/ru_RU/LC_MESSAGES/django.mo similarity index 94% rename from blog/locale/ru_RU/LC_MESSAGES/django.mo rename to engine/blog/locale/ru_RU/LC_MESSAGES/django.mo index 72b854334c72fcfb9c549dc6b1d567d00919a8d9..e69ccf0cccb972bb4ac13f015f999c9e3faf77e3 100644 GIT binary patch delta 182 zcmWm4F$)1<0LJm>$m??930XO0vb$!4W@Ub<$ax+k3_eTtHc`;s)m16usz0-I%Nh&w#u9sm8> umnyiyDxR=~DHiaCQ+)YqsLdEq*Km$}THyq@N#u-kChUYg+f6Q}@BIK?<{KLT delta 181 zcmWm4u?hik0LSs)(H*(CGZ>VlE@k?6Wiwi3aT%01@Bl`W#dLLb$*Nmyx{;^w2Fi3u z-oV%N`PJ|H42mGWZkCo5JCZ3&?}~IQNgY=@N&3{KDjpir6pv`|i)-w8(ggRI;RFBu t&X<~)U<)(s;{|JY$2q=ybv0m&soS_hK5a3=G+$UV+a8+Gg!$PSxj#JH8p{9x diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po similarity index 84% rename from blog/locale/ru_RU/LC_MESSAGES/django.po rename to engine/blog/locale/ru_RU/LC_MESSAGES/django.po index 98ca6ba8..02da530f 100644 --- a/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Блог" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Список всех сообщений (только для чтения)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Получение одного сообщения (только для чтения)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Представляет модель записи в блоге. Класс Post определяет структуру и " "поведение записи в блоге. Он включает атрибуты автора, заголовка, " @@ -41,69 +41,69 @@ msgstr "" "вложение файла, но не то и другое одновременно. Он также поддерживает " "автоматическую генерацию slug на основе заголовка." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Заголовок сообщения" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Название" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "это статическая страница" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Это сообщение для страницы со статическим URL (например, `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Пост" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Посты" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Файлы в формате Markdown не поддерживаются - используйте вместо них " "содержимое в формате Markdown!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "необходимо предоставить файл разметки или содержимое разметки - " "взаимоисключающие варианты" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "внутренний идентификатор тега для тега post" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Название тега" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Удобное для пользователя название тега поста" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Отображаемое имя тега" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Тэг поста" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Тэги постов" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -114,8 +114,8 @@ msgid "" msgstr "" "Инкапсулирует операции по управлению и получению объектов Post в наборе " "представлений модели, доступном только для чтения. Этот класс предназначен " -"для работы с активными объектами Post и позволяет осуществлять фильтрацию на" -" основе заданных фильтров. Он интегрируется с системой фильтрации бэкенда " +"для работы с активными объектами Post и позволяет осуществлять фильтрацию на " +"основе заданных фильтров. Он интегрируется с системой фильтрации бэкенда " "Django и обеспечивает соответствие операций заданным разрешениям. Набор " "представлений также включает дополнительную конфигурацию разрешения " "'retrieve'." diff --git a/blog/locale/sv_SE/LC_MESSAGES/django.mo b/engine/blog/locale/sv_SE/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/sv_SE/LC_MESSAGES/django.mo rename to engine/blog/locale/sv_SE/LC_MESSAGES/django.mo index 2bc486981888088587fde8ba757c9a5254818129..459abb9ed0be354e7122bb66337c87420a9d2a53 100644 GIT binary patch delta 182 zcmXBNu?m7<7=_^@!4M9O$_t7nQ1I;ZCg-{OOfZl>N)!f$J zD-9pdx14hx;WJFj(f7^naM delta 181 zcmXBNF%H3C0LAgw#P^B#Bod|$l8&WmDo(&`k{F21L3)K=z-nm+O@qY+dIe!&wmE=* zWBR@2z4!DVes)WDo|IXs#!p*1;I$)dC9S)X!4pP!!9KomiC+wG?xY3ov4uxuLOBlb nj7_gbE_BBbUrr+p39k1q1lSx-aE#Mx3 diff --git a/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po similarity index 82% rename from blog/locale/sv_SE/LC_MESSAGES/django.po rename to engine/blog/locale/sv_SE/LC_MESSAGES/django.po index 21f10642..a22459e2 100644 --- a/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blogg" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Lista alla inlägg (skrivskyddad)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Hämta ett enskilt inlägg (skrivskyddat)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Representerar en modell för blogginlägg. Klassen Post definierar strukturen " "och beteendet för ett blogginlägg. Den innehåller attribut för författare, " @@ -41,67 +41,67 @@ msgstr "" "filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk " "sluggenerering baserat på titeln." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Inläggets titel" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Titel" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "är statisk sida" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Post" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Inlägg" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt " "uteslutande" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "intern taggidentifierare för inläggstaggen" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tagg namn" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Användarvänligt namn för inläggstaggen" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Taggens visningsnamn" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Post tagg" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Taggar för inlägg" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -115,5 +115,5 @@ msgstr "" "objekt som är aktiva och tillåter filtrering baserat på definierade filter. " "Den integreras med Djangos backend-filtreringssystem och säkerställer att " "operationerna överensstämmer med de definierade behörigheterna. " -"Vyuppsättningen innehåller också en ytterligare behörighetskonfiguration för" -" \"hämta\"." +"Vyuppsättningen innehåller också en ytterligare behörighetskonfiguration för " +"\"hämta\"." diff --git a/blog/locale/th_TH/LC_MESSAGES/django.mo b/engine/blog/locale/th_TH/LC_MESSAGES/django.mo similarity index 94% rename from blog/locale/th_TH/LC_MESSAGES/django.mo rename to engine/blog/locale/th_TH/LC_MESSAGES/django.mo index 13f7d9df7fd25d61b7629b4dd416a56dc4d618db..a21f32ac1c525ca2f3c19ae543ba4d737c570439 100644 GIT binary patch delta 182 zcmZ3hxlVJ!p88lu28Ic23=AKb85rKNGca5M()YO;7?^kUkEiy@Vj@g@hRxq=9@TAgu+Y?V$WjAPq9F6-b8w>8ZjD satta!#w(zJD3InCVE~E%EdbJ)K-y(a z)q%8%AOk}WkoE!6`9S(6kUkEiJ%u3Z1%(+Hq=9@zAgu+YZK3=OAPq9F1xSYg=_$et ratta!#!H}pD3In8VE~E%EdbJ)K-zh8Bx4XOtFfMep26mgY=3zHv\n" "Language-Team: LANGUAGE \n" @@ -13,95 +13,90 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "บล็อก" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "แสดงรายการโพสต์ทั้งหมด (อ่านอย่างเดียว)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "ดึงโพสต์เดียว (อ่านอย่างเดียว)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" -"แทนแบบจำลองของโพสต์ในบล็อก คลาส Post " -"กำหนดโครงสร้างและพฤติกรรมของโพสต์ในบล็อก " -"ประกอบด้วยแอตทริบิวต์สำหรับผู้เขียน, ชื่อเรื่อง, เนื้อหา, ไฟล์แนบ " -"(ไม่บังคับ), slug และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น " -"ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง " -"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug " -"โดยอัตโนมัติจากชื่อเรื่อง" +"แทนแบบจำลองของโพสต์ในบล็อก คลาส Post กำหนดโครงสร้างและพฤติกรรมของโพสต์ในบล็อก " +"ประกอบด้วยแอตทริบิวต์สำหรับผู้เขียน, ชื่อเรื่อง, เนื้อหา, ไฟล์แนบ (ไม่บังคับ), slug " +"และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง " +"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug โดยอัตโนมัติจากชื่อเรื่อง" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "ชื่อโพสต์" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "ชื่อเรื่อง" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "เป็นหน้าคงที่" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "โพสต์" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "โพสต์" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - " -"ไม่สามารถใช้ร่วมกันได้" +msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "ชื่อวัน" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "โพสต์แท็ก" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "ป้ายกำกับโพสต์" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -110,9 +105,8 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"รวบรวมการดำเนินการสำหรับการจัดการและดึงข้อมูลเอนทิตีโพสต์ในชุดมุมมองแบบอ่านอย่างเดียว" -" " -"คลาสนี้ถูกออกแบบมาเพื่อจัดการกับวัตถุโพสต์ที่ใช้งานอยู่และอนุญาตให้มีการกรองตามตัวกรองที่กำหนดไว้" -" มันผสานรวมกับระบบการกรองแบ็กเอนด์ของ Django " -"และทำให้แน่ใจว่าการดำเนินการสอดคล้องกับสิทธิ์ที่กำหนดไว้ " -"ชุดมุมมองยังรวมถึงการกำหนดค่าสิทธิ์ 'ดึงข้อมูล' เพิ่มเติมด้วย" +"รวบรวมการดำเนินการสำหรับการจัดการและดึงข้อมูลเอนทิตีโพสต์ในชุดมุมมองแบบอ่านอย่างเดียว " +"คลาสนี้ถูกออกแบบมาเพื่อจัดการกับวัตถุโพสต์ที่ใช้งานอยู่และอนุญาตให้มีการกรองตามตัวกรองที่กำหนดไว้ " +"มันผสานรวมกับระบบการกรองแบ็กเอนด์ของ Django " +"และทำให้แน่ใจว่าการดำเนินการสอดคล้องกับสิทธิ์ที่กำหนดไว้ ชุดมุมมองยังรวมถึงการกำหนดค่าสิทธิ์ " +"'ดึงข้อมูล' เพิ่มเติมด้วย" diff --git a/blog/locale/tr_TR/LC_MESSAGES/django.mo b/engine/blog/locale/tr_TR/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/tr_TR/LC_MESSAGES/django.mo rename to engine/blog/locale/tr_TR/LC_MESSAGES/django.mo index 4cb496985dc7d28e988f271001bc43c087d5d623..6fabce87eba4daba514c5e2aac61cf2248d71af9 100644 GIT binary patch delta 182 zcmWm6p$fua0L1YdxKG6if{3uNpur#v87kTg))i&JVAzxF6_zYw@d*YWCVc>{c9Y#E zXc7NQzk@sO0(A&I)_iG(v3i67YrZtada%F|F5T8!88c3^G;>#5**~i984Caa diff --git a/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po similarity index 80% rename from blog/locale/tr_TR/LC_MESSAGES/django.po rename to engine/blog/locale/tr_TR/LC_MESSAGES/django.po index fee352fc..dacab8da 100644 --- a/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 19:18+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -13,98 +13,97 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Tüm gönderileri listele (salt okunur)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Tek bir gönderiyi al (salt okunur)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Bir blog yazısı modelini temsil eder. Post sınıfı, bir blog gönderisinin " "yapısını ve davranışını tanımlar. Yazar, başlık, içerik, isteğe bağlı dosya " -"eki, slug ve ilişkili etiketler için öznitelikler içerir. Sınıf, içerik veya" -" dosya eki gerektirme ancak her ikisini aynı anda gerektirmeme gibi " +"eki, slug ve ilişkili etiketler için öznitelikler içerir. Sınıf, içerik veya " +"dosya eki gerektirme ancak her ikisini aynı anda gerektirmeme gibi " "kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da " "destekler." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Gönderinin başlığı" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Başlık" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "statik sayfadır" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir " "gönderi mi?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Posta" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Mesajlar" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği " "kullanın!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini " -"dışlayan" +"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "gönderi etiketi için dahili etiket tanımlayıcısı" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Etiket adı" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Gönderi etiketi için kullanıcı dostu ad" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Etiket görünen adı" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Mesaj etiketi" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Gönderi etiketleri" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " diff --git a/blog/locale/vi_VN/LC_MESSAGES/django.mo b/engine/blog/locale/vi_VN/LC_MESSAGES/django.mo similarity index 92% rename from blog/locale/vi_VN/LC_MESSAGES/django.mo rename to engine/blog/locale/vi_VN/LC_MESSAGES/django.mo index 1ac8908010f65fe38045468f89dc542b7150888f..7872e11c3d3cc41ae806871693457c22811af035 100644 GIT binary patch delta 182 zcmaDU^GasIp88lu28Ic23=F@3^gDJ2hU-B3B_{(zHUk60L2d>H79g$5!@yt;q>X?y zKakD>(#b%&3P_s*>3cvr2}q0ZGB5zOFq8vnK_J}>rKbXEaUg#=RDM5@HU#od^D@YR nCH?{hxPStpd=LW^fV3@;ud_LlF^HAT$iT={&t&rkww>$%z_A$E delta 181 zcmaDQ^HOHQp86O@28Ic23=F@3^jmfYhU-B31t$YTHUk600d58c79g#|!@yt;qz!>I zKakD@(#b%&5=ff@>AOHW2}ld`GB5zOFq8plK_J}(rKbRCaUg#gRDK_jHU#od@iNGP mCH?>fxPSs8d=LZVfwV1\n" "Language-Team: LANGUAGE \n" @@ -13,26 +13,26 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "Blog" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "Danh sách tất cả các bài đăng (chỉ đọc)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "Lấy một bài đăng duy nhất (chỉ đọc)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" "Đại diện cho mô hình bài viết blog. Lớp Post định nghĩa cấu trúc và hành vi " "của một bài viết blog. Nó bao gồm các thuộc tính cho tác giả, tiêu đề, nội " @@ -40,69 +40,69 @@ msgstr "" "ràng buộc như yêu cầu phải có nội dung hoặc tệp đính kèm nhưng không cả hai " "cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề." -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "Tiêu đề bài đăng" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "Tiêu đề" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "là trang tĩnh" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "" "Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) " "không?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "Bài đăng" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "Bài đăng" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là " "tương phản nhau." -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "Tên ngày" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "Tên thân thiện với người dùng cho thẻ bài viết" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "Thẻ bài viết" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "Thẻ bài viết" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -113,7 +113,6 @@ msgid "" msgstr "" "Đóng gói các thao tác quản lý và truy xuất các thực thể Post trong một bộ " "xem mô hình chỉ đọc. Lớp này được thiết kế để xử lý các đối tượng Post đang " -"hoạt động và cho phép lọc dựa trên các bộ lọc đã định nghĩa. Nó tích hợp với" -" hệ thống lọc phía sau của Django và đảm bảo các thao tác tuân thủ các quyền" -" hạn đã định nghĩa. Bộ xem cũng bao gồm một cấu hình quyền 'retrieve' bổ " -"sung." +"hoạt động và cho phép lọc dựa trên các bộ lọc đã định nghĩa. Nó tích hợp với " +"hệ thống lọc phía sau của Django và đảm bảo các thao tác tuân thủ các quyền " +"hạn đã định nghĩa. Bộ xem cũng bao gồm một cấu hình quyền 'retrieve' bổ sung." diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo similarity index 91% rename from blog/locale/zh_Hans/LC_MESSAGES/django.mo rename to engine/blog/locale/zh_Hans/LC_MESSAGES/django.mo index bbdc8337ed41afc7a727016f3e7912f69f99d1eb..ffbe3cd017b7c32b051d04459dd7839ae7d06cd2 100644 GIT binary patch delta 183 zcmZ23u|i_Pp89x328Ic23=9rH`U5)ygCmeO%1(5au(jfJ%K$-_g_dw~HPD$H4AkQEKWZZ-* hcmq}N6G*EA#Tj@uM==JnvKbi|nd+Hr-oRGQ3IK!e7k>Z% delta 182 zcmZ1>v0P%pp87aO28Ic23=9rH`aL@XgCmeO;ACL1VPIe=;$mO`N-?Yl(keiD8<6G) z(zk)M1CV|Vq~(CL4mSgX1(5az(jfIMK$-_gcSGqJPD$T8AkQEKWZZx% gcnwwX14yd_#s70}j$#aCWi{3_&@\n" "Language-Team: LANGUAGE \n" @@ -13,87 +13,89 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blog/apps.py:8 +#: engine/blog/apps.py:8 msgid "blog" msgstr "博客" -#: blog/docs/drf/viewsets.py:10 +#: engine/blog/docs/drf/viewsets.py:10 msgid "list all posts (read-only)" msgstr "列出所有帖子(只读)" -#: blog/docs/drf/viewsets.py:14 +#: engine/blog/docs/drf/viewsets.py:14 msgid "retrieve a single post (read-only)" msgstr "检索单个帖子(只读)" -#: blog/models.py:12 +#: engine/blog/models.py:13 msgid "" "Represents a blog post model. The Post class defines the structure and " "behavior of a blog post. It includes attributes for author, title, content, " "optional file attachment, slug, and associated tags. The class enforces " "constraints such as requiring either content or a file attachment but not " -"both simultaneously. It also supports automatic slug generation based on the" -" title." +"both simultaneously. It also supports automatic slug generation based on the " +"title." msgstr "" -"代表博文模型。帖子类定义了博文的结构和行为。它包括作者、标题、内容、可选文件附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。" +"代表博文模型。帖子类定义了博文的结构和行为。它包括作者、标题、内容、可选文件" +"附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件" +"附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "post title" msgstr "帖子标题" -#: blog/models.py:23 +#: engine/blog/models.py:24 msgid "title" msgstr "标题" -#: blog/models.py:68 +#: engine/blog/models.py:69 msgid "is static page" msgstr "是静态页面" -#: blog/models.py:69 +#: engine/blog/models.py:70 msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?" -#: blog/models.py:76 +#: engine/blog/models.py:77 msgid "post" msgstr "职位" -#: blog/models.py:77 +#: engine/blog/models.py:78 msgid "posts" msgstr "职位" -#: blog/models.py:81 +#: engine/blog/models.py:82 msgid "markdown files are not supported yet - use markdown content instead" msgstr "不支持 Markdown 文件,请使用 Markdown 内容!" -#: blog/models.py:83 +#: engine/blog/models.py:84 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "必须提供标记符文件或标记符内容 - 相互排斥" -#: blog/models.py:115 +#: engine/blog/models.py:116 msgid "internal tag identifier for the post tag" msgstr "职位标签的内部标签标识符" -#: blog/models.py:116 +#: engine/blog/models.py:117 msgid "tag name" msgstr "标签名称" -#: blog/models.py:120 +#: engine/blog/models.py:121 msgid "user-friendly name for the post tag" msgstr "方便用户使用的帖子标签名称" -#: blog/models.py:121 +#: engine/blog/models.py:122 msgid "tag display name" msgstr "标签显示名称" -#: blog/models.py:129 +#: engine/blog/models.py:130 msgid "post tag" msgstr "职位标签" -#: blog/models.py:130 +#: engine/blog/models.py:131 msgid "post tags" msgstr "帖子标签" -#: blog/viewsets.py:16 +#: engine/blog/viewsets.py:16 msgid "" "Encapsulates operations for managing and retrieving Post entities in a read-" "only model view set. This class is tailored to handle Post objects that are " @@ -102,5 +104,6 @@ msgid "" "defined permissions. The view set also includes an additional 'retrieve' " "permission configuration." msgstr "" -"该类封装了在只读模型视图集中管理和检索 \"帖子 \"实体的操作。该类专门用于处理活动的 \"帖子 \"对象,并允许根据定义的过滤器进行过滤。它与 " -"Django 的后台过滤系统集成,确保操作与定义的权限一致。视图集还包括额外的 \"检索 \"权限配置。" +"该类封装了在只读模型视图集中管理和检索 \"帖子 \"实体的操作。该类专门用于处理" +"活动的 \"帖子 \"对象,并允许根据定义的过滤器进行过滤。它与 Django 的后台过滤" +"系统集成,确保操作与定义的权限一致。视图集还包括额外的 \"检索 \"权限配置。" diff --git a/blog/migrations/0001_initial.py b/engine/blog/migrations/0001_initial.py similarity index 100% rename from blog/migrations/0001_initial.py rename to engine/blog/migrations/0001_initial.py diff --git a/blog/migrations/0002_alter_post_slug_alter_post_title.py b/engine/blog/migrations/0002_alter_post_slug_alter_post_title.py similarity index 100% rename from blog/migrations/0002_alter_post_slug_alter_post_title.py rename to engine/blog/migrations/0002_alter_post_slug_alter_post_title.py diff --git a/blog/migrations/0003_alter_post_tags.py b/engine/blog/migrations/0003_alter_post_tags.py similarity index 100% rename from blog/migrations/0003_alter_post_tags.py rename to engine/blog/migrations/0003_alter_post_tags.py diff --git a/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py b/engine/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py similarity index 100% rename from blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py rename to engine/blog/migrations/0004_post_content_ar_ar_post_content_cs_cz_and_more.py diff --git a/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py b/engine/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py similarity index 100% rename from blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py rename to engine/blog/migrations/0005_post_content_fa_ir_post_content_he_il_and_more.py diff --git a/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py b/engine/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py similarity index 100% rename from blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py rename to engine/blog/migrations/0006_post_meta_description_post_meta_description_ar_ar_and_more.py diff --git a/blog/migrations/0007_post_is_static_page.py b/engine/blog/migrations/0007_post_is_static_page.py similarity index 100% rename from blog/migrations/0007_post_is_static_page.py rename to engine/blog/migrations/0007_post_is_static_page.py diff --git a/core/templatetags/__init__.py b/engine/blog/migrations/__init__.py similarity index 100% rename from core/templatetags/__init__.py rename to engine/blog/migrations/__init__.py diff --git a/blog/models.py b/engine/blog/models.py similarity index 95% rename from blog/models.py rename to engine/blog/models.py index 98a6b22c..ec180145 100644 --- a/blog/models.py +++ b/engine/blog/models.py @@ -1,14 +1,15 @@ +from django.conf import settings from django.db.models import CASCADE, CharField, FileField, ForeignKey, ManyToManyField, BooleanField from django.utils.translation import gettext_lazy as _ from django_extensions.db.fields import AutoSlugField from markdown.extensions.toc import TocExtension from markdown_field import MarkdownField -from core.abstract import NiceModel +from engine.core.abstract import NiceModel class Post(NiceModel): # type: ignore [django-manager-missing] - __doc__ = _( + __doc__ = _( # type: ignore [assignment] "Represents a blog post model. " "The Post class defines the structure and behavior of a blog post. " "It includes attributes for author, title, content, optional file attachment, slug, and associated tags. " @@ -18,7 +19,7 @@ class Post(NiceModel): # type: ignore [django-manager-missing] is_publicly_visible = True - author = ForeignKey(to="vibes_auth.User", on_delete=CASCADE, blank=False, null=False, related_name="posts") + author = ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=CASCADE, blank=False, null=False, related_name="posts") title = CharField( unique=True, max_length=128, blank=False, null=False, help_text=_("post title"), verbose_name=_("title") ) diff --git a/blog/serializers.py b/engine/blog/serializers.py similarity index 91% rename from blog/serializers.py rename to engine/blog/serializers.py index bf681a6c..57279ac1 100644 --- a/blog/serializers.py +++ b/engine/blog/serializers.py @@ -1,7 +1,7 @@ from rest_framework.fields import SerializerMethodField from rest_framework.serializers import ModelSerializer -from blog.models import Post, PostTag +from engine.blog.models import Post, PostTag class PostTagSerializer(ModelSerializer): diff --git a/blog/signals.py b/engine/blog/signals.py similarity index 100% rename from blog/signals.py rename to engine/blog/signals.py diff --git a/blog/static/.gitkeep b/engine/blog/static/.gitkeep similarity index 100% rename from blog/static/.gitkeep rename to engine/blog/static/.gitkeep diff --git a/payments/__init__.py b/engine/blog/templates/__init__.py similarity index 100% rename from payments/__init__.py rename to engine/blog/templates/__init__.py diff --git a/core/tests.py b/engine/blog/tests.py similarity index 100% rename from core/tests.py rename to engine/blog/tests.py diff --git a/blog/translation.py b/engine/blog/translation.py similarity index 85% rename from blog/translation.py rename to engine/blog/translation.py index 0fe484dc..c86129f7 100644 --- a/blog/translation.py +++ b/engine/blog/translation.py @@ -1,7 +1,7 @@ from modeltranslation.decorators import register from modeltranslation.translator import TranslationOptions -from blog.models import Post +from engine.blog.models import Post @register(Post) diff --git a/blog/urls.py b/engine/blog/urls.py similarity index 85% rename from blog/urls.py rename to engine/blog/urls.py index cd00f4f7..730810e3 100644 --- a/blog/urls.py +++ b/engine/blog/urls.py @@ -1,7 +1,7 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from blog.viewsets import PostViewSet +from engine.blog.viewsets import PostViewSet app_name = "blog" diff --git a/payments/docs/__init__.py b/engine/blog/utils/__init__.py similarity index 100% rename from payments/docs/__init__.py rename to engine/blog/utils/__init__.py diff --git a/blog/views.py b/engine/blog/views.py similarity index 100% rename from blog/views.py rename to engine/blog/views.py diff --git a/blog/viewsets.py b/engine/blog/viewsets.py similarity index 81% rename from blog/viewsets.py rename to engine/blog/viewsets.py index d9f58736..76a3a76d 100644 --- a/blog/viewsets.py +++ b/engine/blog/viewsets.py @@ -3,11 +3,11 @@ from django_filters.rest_framework import DjangoFilterBackend from drf_spectacular.utils import extend_schema_view from rest_framework.viewsets import ReadOnlyModelViewSet -from blog.filters import PostFilter -from blog.models import Post -from blog.serializers import PostSerializer -from blog.docs.drf.viewsets import POST_SCHEMA -from core.permissions import EvibesPermission +from engine.blog.filters import PostFilter +from engine.blog.models import Post +from engine.blog.serializers import PostSerializer +from engine.blog.docs.drf.viewsets import POST_SCHEMA +from engine.core.permissions import EvibesPermission @extend_schema_view(**POST_SCHEMA) diff --git a/blog/widgets.py b/engine/blog/widgets.py similarity index 100% rename from blog/widgets.py rename to engine/blog/widgets.py diff --git a/payments/docs/drf/__init__.py b/engine/core/__init__.py similarity index 100% rename from payments/docs/drf/__init__.py rename to engine/core/__init__.py diff --git a/core/abstract.py b/engine/core/abstract.py similarity index 100% rename from core/abstract.py rename to engine/core/abstract.py diff --git a/core/admin.py b/engine/core/admin.py similarity index 99% rename from core/admin.py rename to engine/core/admin.py index 5649fe98..1d7943b4 100644 --- a/core/admin.py +++ b/engine/core/admin.py @@ -16,8 +16,8 @@ from modeltranslation.translator import NotRegistered, translator from modeltranslation.utils import get_translation_fields from mptt.admin import DraggableMPTTAdmin -from core.forms import CRMForm, OrderForm, OrderProductForm, StockForm, VendorForm -from core.models import ( +from engine.core.forms import CRMForm, OrderForm, OrderProductForm, StockForm, VendorForm +from engine.core.models import ( Address, Attribute, AttributeGroup, @@ -449,7 +449,6 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ] def get_queryset(self, request): - # Optimize product change page to avoid N+1 queries return ( super() .get_queryset(request) diff --git a/core/apps.py b/engine/core/apps.py similarity index 73% rename from core/apps.py rename to engine/core/apps.py index 749486f9..f8e2e0a3 100644 --- a/core/apps.py +++ b/engine/core/apps.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _ class CoreConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "core" + name = "engine.core" verbose_name = _("core") icon = "fa fa-solid fa-star" priority = 88 @@ -12,5 +12,5 @@ class CoreConfig(AppConfig): # noinspection PyUnresolvedReferences def ready(self) -> None: - import core.elasticsearch.documents - import core.signals # noqa: F401 + import engine.core.elasticsearch.documents + import engine.core.signals # noqa: F401 diff --git a/core/b2b_urls.py b/engine/core/b2b_urls.py similarity index 89% rename from core/b2b_urls.py rename to engine/core/b2b_urls.py index 53a4f04c..658af948 100644 --- a/core/b2b_urls.py +++ b/engine/core/b2b_urls.py @@ -1,6 +1,6 @@ from django.urls import path -from core.views import ( +from engine.core.views import ( BuyAsBusinessView, GlobalSearchView, ) diff --git a/core/choices.py b/engine/core/choices.py similarity index 100% rename from core/choices.py rename to engine/core/choices.py diff --git a/core/crm/__init__.py b/engine/core/crm/__init__.py similarity index 60% rename from core/crm/__init__.py rename to engine/core/crm/__init__.py index 4135da1c..c5fa112c 100644 --- a/core/crm/__init__.py +++ b/engine/core/crm/__init__.py @@ -1,4 +1,4 @@ -from core.models import CustomerRelationshipManagementProvider +from engine.core.models import CustomerRelationshipManagementProvider def any_crm_integrations() -> bool: diff --git a/payments/graphene/__init__.py b/engine/core/crm/amo/__init__.py similarity index 100% rename from payments/graphene/__init__.py rename to engine/core/crm/amo/__init__.py diff --git a/core/crm/amo/gateway.py b/engine/core/crm/amo/gateway.py similarity index 97% rename from core/crm/amo/gateway.py rename to engine/core/crm/amo/gateway.py index 17a16e85..b28a8c5e 100644 --- a/core/crm/amo/gateway.py +++ b/engine/core/crm/amo/gateway.py @@ -6,9 +6,9 @@ from constance import config from django.core.cache import cache from django.db import transaction -from core.crm.exceptions import CRMException -from core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink -from core.utils import is_status_code_success +from engine.core.crm.exceptions import CRMException +from engine.core.models import CustomerRelationshipManagementProvider, Order, OrderCrmLink +from engine.core.utils import is_status_code_success logger = logging.getLogger(__name__) diff --git a/core/crm/exceptions.py b/engine/core/crm/exceptions.py similarity index 100% rename from core/crm/exceptions.py rename to engine/core/crm/exceptions.py diff --git a/core/data/.gitkeep b/engine/core/data/.gitkeep similarity index 100% rename from core/data/.gitkeep rename to engine/core/data/.gitkeep diff --git a/core/data/payment_methods.json b/engine/core/data/payment_methods.json similarity index 100% rename from core/data/payment_methods.json rename to engine/core/data/payment_methods.json diff --git a/payments/migrations/__init__.py b/engine/core/docs/__init__.py similarity index 100% rename from payments/migrations/__init__.py rename to engine/core/docs/__init__.py diff --git a/core/docs/drf/__init__.py b/engine/core/docs/drf/__init__.py similarity index 100% rename from core/docs/drf/__init__.py rename to engine/core/docs/drf/__init__.py diff --git a/core/docs/drf/views.py b/engine/core/docs/drf/views.py similarity index 95% rename from core/docs/drf/views.py rename to engine/core/docs/drf/views.py index 3d62c800..a3f4f912 100644 --- a/core/docs/drf/views.py +++ b/engine/core/docs/drf/views.py @@ -3,14 +3,14 @@ from drf_spectacular.utils import OpenApiParameter, extend_schema, inline_serial from rest_framework import status from rest_framework.fields import CharField, DictField, JSONField, ListField -from core.docs.drf import error -from core.serializers import ( +from engine.core.docs.drf import error +from engine.core.serializers import ( BuyAsBusinessOrderSerializer, CacheOperatorSerializer, ContactUsSerializer, LanguageSerializer, ) -from payments.serializers import TransactionProcessSerializer +from engine.payments.serializers import TransactionProcessSerializer CACHE_SCHEMA = { "post": extend_schema( diff --git a/core/docs/drf/viewsets.py b/engine/core/docs/drf/viewsets.py similarity index 96% rename from core/docs/drf/viewsets.py rename to engine/core/docs/drf/viewsets.py index b0fc8de3..4e34955f 100644 --- a/core/docs/drf/viewsets.py +++ b/engine/core/docs/drf/viewsets.py @@ -3,8 +3,8 @@ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import OpenApiParameter, extend_schema from rest_framework import status -from core.docs.drf import BASE_ERRORS -from core.serializers import ( +from engine.core.docs.drf import BASE_ERRORS +from engine.core.serializers import ( AddOrderProductSerializer, AddressSerializer, AddWishlistProductSerializer, @@ -49,9 +49,9 @@ from core.serializers import ( WishlistDetailSerializer, WishlistSimpleSerializer, ) -from core.serializers.seo import SeoSnapshotSerializer -from core.serializers.utility import AddressCreateSerializer, AddressSuggestionSerializer, DoFeedbackSerializer -from payments.serializers import TransactionProcessSerializer +from engine.core.serializers.seo import SeoSnapshotSerializer +from engine.core.serializers.utility import AddressCreateSerializer, AddressSuggestionSerializer, DoFeedbackSerializer +from engine.payments.serializers import TransactionProcessSerializer ATTRIBUTE_GROUP_SCHEMA = { "list": extend_schema( @@ -143,6 +143,14 @@ CATEGORY_SCHEMA = { "retrieve": extend_schema( summary=_("retrieve a single category (detailed view)"), description=_("retrieve a single category (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Category UUID or slug"), + type=str, + ), + ], responses={status.HTTP_200_OK: CategoryDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( @@ -165,12 +173,12 @@ CATEGORY_SCHEMA = { description=_("rewrite some fields of an existing category saving non-editables"), responses={status.HTTP_200_OK: CategoryDetailSerializer(), **BASE_ERRORS}, ), - "seo": extend_schema( + "seo_meta": extend_schema( summary=_("SEO Meta snapshot"), description=_("returns a snapshot of the category's SEO meta data"), parameters=[ OpenApiParameter( - name="lookup", + name="lookup_value", location="path", description=_("Category UUID or slug"), type=str, @@ -245,6 +253,14 @@ ORDER_SCHEMA = { ), "retrieve": extend_schema( summary=_("retrieve a single order (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Order UUID or human-readable id"), + type=str, + ), + ], responses={status.HTTP_200_OK: OrderDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( @@ -674,6 +690,14 @@ BRAND_SCHEMA = { ), "retrieve": extend_schema( summary=_("retrieve a single brand (detailed view)"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Brand UUID or slug"), + type=str, + ), + ], responses={status.HTTP_200_OK: BrandDetailSerializer(), **BASE_ERRORS}, ), "create": extend_schema( @@ -694,6 +718,14 @@ BRAND_SCHEMA = { ), "seo_meta": extend_schema( summary=_("SEO Meta snapshot for brand"), + parameters=[ + OpenApiParameter( + name="lookup_value", + location="path", + description=_("Brand UUID or slug"), + type=str, + ), + ], responses={status.HTTP_200_OK: SeoSnapshotSerializer(), **BASE_ERRORS}, ), } diff --git a/core/docs/images/evibes-big-simple.png b/engine/core/docs/images/evibes-big-simple.png similarity index 100% rename from core/docs/images/evibes-big-simple.png rename to engine/core/docs/images/evibes-big-simple.png diff --git a/core/docs/images/evibes-big.png b/engine/core/docs/images/evibes-big.png similarity index 100% rename from core/docs/images/evibes-big.png rename to engine/core/docs/images/evibes-big.png diff --git a/core/docs/images/evibes.ico b/engine/core/docs/images/evibes.ico similarity index 100% rename from core/docs/images/evibes.ico rename to engine/core/docs/images/evibes.ico diff --git a/core/docs/images/evibes.png b/engine/core/docs/images/evibes.png similarity index 100% rename from core/docs/images/evibes.png rename to engine/core/docs/images/evibes.png diff --git a/core/docs/images/favicon.svg b/engine/core/docs/images/favicon.svg similarity index 100% rename from core/docs/images/favicon.svg rename to engine/core/docs/images/favicon.svg diff --git a/core/elasticsearch/__init__.py b/engine/core/elasticsearch/__init__.py similarity index 99% rename from core/elasticsearch/__init__.py rename to engine/core/elasticsearch/__init__.py index 9ed5ff22..2711fb6b 100644 --- a/core/elasticsearch/__init__.py +++ b/engine/core/elasticsearch/__init__.py @@ -13,7 +13,7 @@ from elasticsearch import NotFoundError from elasticsearch.dsl import Q, Search from rest_framework.request import Request -from core.models import Brand, Category, Product +from engine.core.models import Brand, Category, Product SMART_FIELDS = [ "name^6", diff --git a/core/elasticsearch/documents.py b/engine/core/elasticsearch/documents.py similarity index 97% rename from core/elasticsearch/documents.py rename to engine/core/elasticsearch/documents.py index a958b76e..7b678699 100644 --- a/core/elasticsearch/documents.py +++ b/engine/core/elasticsearch/documents.py @@ -5,8 +5,8 @@ from django_elasticsearch_dsl import Document, fields from django_elasticsearch_dsl.registries import registry from health_check.db.models import TestModel -from core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields -from core.models import Brand, Category, Product +from engine.core.elasticsearch import COMMON_ANALYSIS, ActiveOnlyMixin, add_multilang_fields +from engine.core.models import Brand, Category, Product class BaseDocument(Document): # type: ignore [misc] diff --git a/core/errors.py b/engine/core/errors.py similarity index 100% rename from core/errors.py rename to engine/core/errors.py diff --git a/core/filters.py b/engine/core/filters.py similarity index 99% rename from core/filters.py rename to engine/core/filters.py index 6f53999a..dbde2075 100644 --- a/core/filters.py +++ b/engine/core/filters.py @@ -36,8 +36,8 @@ from django_filters import ( from graphene import Context from rest_framework.request import Request -from core.elasticsearch import process_query -from core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist +from engine.core.elasticsearch import process_query +from engine.core.models import Address, Brand, Category, Feedback, Order, Product, Stock, Wishlist logger = logging.getLogger(__name__) diff --git a/payments/static/.gitkeep b/engine/core/fixtures/.gitkeep similarity index 100% rename from payments/static/.gitkeep rename to engine/core/fixtures/.gitkeep diff --git a/engine/core/fixtures/initialization.json b/engine/core/fixtures/initialization.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/engine/core/fixtures/initialization.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/core/forms.py b/engine/core/forms.py similarity index 100% rename from core/forms.py rename to engine/core/forms.py diff --git a/core/graphene/__init__.py b/engine/core/graphene/__init__.py similarity index 100% rename from core/graphene/__init__.py rename to engine/core/graphene/__init__.py diff --git a/core/graphene/mutations.py b/engine/core/graphene/mutations.py similarity index 97% rename from core/graphene/mutations.py rename to engine/core/graphene/mutations.py index 000492b4..9cffd8cb 100644 --- a/core/graphene/mutations.py +++ b/engine/core/graphene/mutations.py @@ -10,9 +10,9 @@ from graphene import UUID, Boolean, Field, Int, List, String from graphene.types.generic import GenericScalar from graphene_django.utils import camelize -from core.elasticsearch import process_query -from core.graphene import BaseMutation -from core.graphene.object_types import ( +from engine.core.elasticsearch import process_query +from engine.core.graphene import BaseMutation +from engine.core.graphene.object_types import ( AddressType, BulkProductInput, OrderType, @@ -21,13 +21,13 @@ from core.graphene.object_types import ( WishlistType, FeedbackType, ) -from core.models import Address, Category, Order, Product, Wishlist, OrderProduct -from core.utils import format_attributes, is_url_safe -from core.utils.caching import web_cache -from core.utils.emailing import contact_us_email -from core.utils.messages import permission_denied_message -from core.utils.nominatim import fetch_address_suggestions -from payments.graphene.object_types import TransactionType +from engine.core.models import Address, Category, Order, Product, Wishlist, OrderProduct +from engine.core.utils import format_attributes, is_url_safe +from engine.core.utils.caching import web_cache +from engine.core.utils.emailing import contact_us_email +from engine.core.utils.messages import permission_denied_message +from engine.core.utils.nominatim import fetch_address_suggestions +from engine.payments.graphene.object_types import TransactionType logger = logging.getLogger(__name__) diff --git a/core/graphene/object_types.py b/engine/core/graphene/object_types.py similarity index 98% rename from core/graphene/object_types.py rename to engine/core/graphene/object_types.py index b597f834..b3f33358 100644 --- a/core/graphene/object_types.py +++ b/engine/core/graphene/object_types.py @@ -25,7 +25,7 @@ from graphene_django.filter import DjangoFilterConnectionField from graphene_django.utils import camelize from mptt.querysets import TreeQuerySet -from core.models import ( +from engine.core.models import ( Address, Attribute, AttributeGroup, @@ -45,8 +45,8 @@ from core.models import ( Vendor, Wishlist, ) -from core.utils import graphene_abs, graphene_current_lang -from core.utils.seo_builders import ( +from engine.core.utils import graphene_abs, graphene_current_lang +from engine.core.utils.seo_builders import ( brand_schema, breadcrumb_schema, category_schema, @@ -55,7 +55,7 @@ from core.utils.seo_builders import ( product_schema, website_schema, ) -from payments.graphene.object_types import TransactionType +from engine.payments.graphene.object_types import TransactionType logger = logging.getLogger(__name__) @@ -226,7 +226,7 @@ class CategoryType(DjangoObjectType): # type: ignore [misc] categories = Category.objects.filter(parent=self) if not info.context.user.has_perm("core.view_category"): categories = categories.filter(is_active=True) - result = categories + result: TreeQuerySet | list[Category] = categories with suppress(Exception): items = list(categories) Category.bulk_prefetch_filterable_attributes(items) @@ -241,7 +241,7 @@ class CategoryType(DjangoObjectType): # type: ignore [misc] return float(self.markup_percent) return 0.0 - def resolve_filterable_attributes(self: Category, info): + def resolve_filterable_attributes(self: Category, _info): return self.filterable_attributes def resolve_min_max_prices(self: Category, _info): diff --git a/core/graphene/schema.py b/engine/core/graphene/schema.py similarity index 93% rename from core/graphene/schema.py rename to engine/core/graphene/schema.py index 4553475f..f80b9ffb 100644 --- a/core/graphene/schema.py +++ b/engine/core/graphene/schema.py @@ -1,5 +1,6 @@ import logging +from django.conf import settings from django.core.cache import cache from django.core.exceptions import PermissionDenied from django.db.models import Case, Exists, IntegerField, OuterRef, Q, Value, When @@ -7,9 +8,9 @@ from django.utils import timezone from graphene import Field, List, ObjectType, Schema from graphene_django.filter import DjangoFilterConnectionField -from blog.filters import PostFilter -from blog.graphene.object_types import PostType -from core.filters import ( +from engine.blog.filters import PostFilter +from engine.blog.graphene.object_types import PostType +from engine.core.filters import ( AddressFilter, BrandFilter, CategoryFilter, @@ -18,7 +19,7 @@ from core.filters import ( ProductFilter, WishlistFilter, ) -from core.graphene.mutations import ( +from engine.core.graphene.mutations import ( AddOrderProduct, AddWishlistProduct, AutocompleteAddress, @@ -43,7 +44,7 @@ from core.graphene.mutations import ( Search, UpdateProduct, ) -from core.graphene.object_types import ( +from engine.core.graphene.object_types import ( AddressType, AttributeGroupType, BrandType, @@ -63,7 +64,7 @@ from core.graphene.object_types import ( VendorType, WishlistType, ) -from core.models import ( +from engine.core.models import ( Address, AttributeGroup, Brand, @@ -81,13 +82,12 @@ from core.models import ( Vendor, Wishlist, ) -from core.utils import get_project_parameters -from core.utils.languages import get_flag_by_language -from core.utils.messages import permission_denied_message -from evibes.settings import LANGUAGES -from payments.graphene.mutations import Deposit -from vibes_auth.filters import UserFilter -from vibes_auth.graphene.mutations import ( +from engine.core.utils import get_project_parameters +from engine.core.utils.languages import get_flag_by_language +from engine.core.utils.messages import permission_denied_message +from engine.payments.graphene.mutations import Deposit +from engine.authv.filters import UserFilter +from engine.authv.graphene.mutations import ( ActivateUser, ConfirmResetPassword, CreateUser, @@ -99,8 +99,8 @@ from vibes_auth.graphene.mutations import ( UploadAvatar, VerifyJSONWebToken, ) -from vibes_auth.graphene.object_types import UserType -from vibes_auth.models import User +from engine.authv.graphene.object_types import UserType +from engine.authv.models import User logger = logging.getLogger(__name__) @@ -137,7 +137,7 @@ class Query(ObjectType): if not languages: languages = [ - {"code": lang[0], "name": lang[1], "flag": get_flag_by_language(lang[0])} for lang in LANGUAGES + {"code": lang[0], "name": lang[1], "flag": get_flag_by_language(lang[0])} for lang in settings.LANGUAGES ] cache.set("languages", languages, 60 * 60) @@ -207,7 +207,7 @@ class Query(ObjectType): @staticmethod def resolve_users(_parent, info, **_kwargs): - if info.context.user.has_perm("vibes_auth.view_user"): + if info.context.user.has_perm("authv.view_user"): return User.objects.all() users = User.objects.filter(uuid=info.context.user.pk) return users if users.exists() else User.objects.none() diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa1ab54387452217b2a8bbd02e4da39762928d6d GIT binary patch literal 104213 zcmcGX34k3{mHw;QjfjY#2!cfrvXJg9K)^tNEGz*+LK5~RdFg&h9_jAa_Ulg4AWM*t z5JVKkWgJ9gOTrpfK^+$y8Bxb^#--a`lyMy$#cdpy|L;5J-l}@9mo)mH2bHgG)vddn z?Vfw?t?KXWv&*dszbkf1lGlU3d3BPUvvZPsVVtfeNqTgW>EIru-!nZ) zb_Z_<$AI^O`-6{wuLD01?h3vD?gRb|q}b#y;4a`!$0W&B;O?NFzaHEhd?&ac_+jwf z;77pS!1>2|z9ryEv|}lF2-iRKrX*2QKMfuL{uF$izU(?9NjObDdc2qSTaczFFQ4f+ zE8tpC{d)jB9Q-s`0)GM?44!d9l3YoBmx1%aAD@^cG%1-rD@hiDo#5}lPk`IOCuUOz z`Bu$I60#;ebG;vrf$I0Xlau6C;8~#PwG4a>*ayB0d=aD}8v?Q4W-Zan4`||0I-vkdK-wUAHvHKZG@&<5E@B`o^ zP;~wma8K|{py=`~a3SUW3KZXG&rg!?f@gqRxqif1JPUqxL6Teq-FG@WNxs4TOBW|e zFW29+1pa^zos%S|gI}ky=YwOKpw{PubNz%pjL)w$%Nv_}0 znIs#))4Mo${@>p0@^fIf^K}j={#*eb2;KxrZnuJ>&ja9i@G($y{C2qhd`SNUq)Evy zK*{Oin)CPFJ)ZwQP<(zE90NWLK105L26v{NH>^pLX0G3~E=eYU9|aEwUjV0qd-f&C z6z~L4{HTJG|8?M@;DiNHd(w7NW zxEw46C67Iz==L`7mEhMw*?}K{uK|AvN`7{Gio(CQWA~MOlz!Sme!MWhr zE8R}41dkwnIfyAr?g94#pAPpw2U11yE$}e#e2mDh;8ox&!0SNSk6XZfz%8Ko`B6~q z_#$ZS2G!mlfwDV)0oA`(UhVhCfx3Q7z|%nS>jLlqunkoEt_D-^UEoCUF>o6AT~Pem z=Ni907gW7fQ1rSQ91Cs))&6au?mrBwy`KbC-@k|Sw?WC@FG2P5cc7l%WxdmT94L7> z3RFL5f-eV81=X&_;r>;i%H0U6zFWfe4}<%Xz7G_=KM9I{UjkL%^Pu?p-y!{HFeUx+ zYrWn{p!DHrQ2m<$s{GlY_^}97IjcaGvj$XsZw2+-`#?Q+8>ss421SR*0)7@${(ew= z|1VJddG%YJk8cEZ|2R;5SqQ5AZJ_F33#vUgh5NUGuOq!Z;OE2r7eGDtTTt!U<2u)) zy+O(4Oi*%D3F&LVV@cl+z6pE*RQuns!Q0;w@FY;}T?Fd+R#5G|98`O6237B!pxXNc zsP=vV6dk?=D&H?awR@-Q9bXSB-*j*+cnYX;Dxl=xEui>)JvbYDCpZoK3MfA8zR~r3 zUr^2G9Q$Q1tpXcog^|xGOk*v-70| zJdX5AQ0==D+#UQXI3D~qsDA8rqubf>pz2uw${uV4MbFzo@#_&V1)l|F2Yw8yKRdq- z{{Y+%Tm!a(9pE=Wwdb^(oUUhqr;xq`d>MEbC^|d{s+`BcqrqoEweQcM+I#rhogXcr z@|_5(oo9nbfH#1X!N)=I@da=m_&?wY;GCPizH7l(kbWDee*FVD9ee<627d@13GVX_ zANNiH)sE9aJy!z{1lNc3ZQ#MA?*m2u=RlSFS8yD-&pRDwfTHtq@F4KIkp3{3lKxD% z{sK6K^v<`qo*xAsO8P?Z4d7LvGT`+=(GFfav=1Sf$@ zK;>T#?g_pFd_8y@DEd4Ns{aF^+VvZ7Z}5LXJ-_FBy?<{4UrBl)DEqby+!uU5sB#|! zUk-j0RQb<>l8YaLM}x`xTyCcaJOLD)P63YrF9aoTw}3~1pA6T33(h6o{C=lXH+VMb zTS3+LBT(&l5fpv)_y_0HUZC{kwV>*G11S0&35p)G!u5rq+TRAM-)|20uLV{9JH!3k z!u@Ta%h;1>)!!iOZu0f z|3jec!PB6g`wXadexylzx00 zRQY4>^75vGvX7U7Dt99|4SWPt{V#yx&uj1Y>kC1p-wKNE9|M)|X8{ko$FDB{#gD5% z(d%*WIPj<7k>KI?dU+Ru(zlyHwf7lN<-G`=3Ldt_=ZhVn(hq?%!QX=?fk$t3Tm$O* zliaogN)xEh>A`qSWCaF_dhT$u-+M0yjbc76^#6#NT#7&!KR=g(>2SkmW$ z(z`zJVsJAkIsXwTz5N}yD>&u>e{OG3XyBU0yB) zPa?eu)N`K$CxO2Q4+r14-R0yAP|x*%qSwQq==1_O5q$Y0KAuen$B|wFo(R4L6rVo^ zs@z|LZv@})D05$ME~tL52SvZPfiDMd0i_oo1VzV>fCqx#0`~;}03HPH`k2%8Q1E4> z7lV@1OF)(T9&mr~4sag$G&lj=<#BI+3#j%l0oC8DLDBUda2N0iP;~hyxDWUfQ0@2= zsDAAKgg-YEJb`o@sD9iDs{XB@`2QHFc6=06|Gon52YwG!zTbfdgH2Dme~^NcNzVp% z2fM*5!OKDM`48YB;JA;tT+ag~A8!Zu0^bWtZtnqK4So(3eZCE|0zJ3i(1J``i`Lz{Pd0zx|eeaJkrhs$6 z>EO+v>iI0FdR_!2HwS;*>pKP1^)B!r@B?65Q<6LdrposT=5(Y_1jVl@pK?42lzc1% zB{!FVtm0_Xo0KEtQ|e^39(H|Kxx9l*=}j4h^~|Nbj7r2I)!GQjoIc4~4vx+`g} zUkcs<9=m%}GLHM-*rO@=IQ8!Y6V{XdR2^4?!J&5PQ13}TT42mvY0j~tFBE1>> zIPH7c!T$WSZ)h_6_FXXL{trRv>8@#0@^#vEEciOwx%Z(>=HE;_yvfGZ>%rs6_Z)aB zxH~~o$<+$b_yMZj&jj3Se3R+>1)$1*2PixF3@HBZG@&VJ2V20yzz+oc6nGZtAA!e# z(Qp3o52*^8ty*_9zgm(!B>M#QyupMUqyNXsB(`3CxWMeYF7m5} zzWzHXefTjbJC;m${+|$VKB)3829NyKk{?(w$y&6oxcY-SSk#POX z0e=80|8Kz)!I!V}oG$>CuN&MSybe_U+rsq+K$Z6iP|tr6d=2>1aJ}jHCiAmi2`b;4K(+r= zQ2Kchcqw=pcmnu2Q04D2vne?f+#gi_GN^X+f#Tndpq{@IJOq3MlpK5oJQ@5cD85Z$ z5Yc#Y94LO?08Rw|5qvlJEGWBj@rg|~uDuVGJ^eT+|L`-Q$pI)mZ#v1-6G7?KOi=A! z5B>rCB&c>gHOu+~`dofXhMoO;>@U$339*^It&Klbq6&Tm#$)t_Alz)%EB)P<(zTcmenr zsP^x5nz#3jpvs#JmcX;YW5Gv3@#*KF`0*!DdcW^Hm&0Sh*`(hIYFzpXD0_YI>E4gI z0Y3za-hTpB&dz7J{2d6siS%?(`q>3;18)b#_tVd8GQa5pP;&7-@JR62A$>TDof=n; z1&-Qwjf|Ad-gR)~^0Vjgr2b;k?7rEV?0V;hVcrCaIlpef%vG@NC zp!(MWj!`~vf3OVdxvN0w@%^CW_*qbL{3}p)YnLTn|G}W_#S!31U>CR*+zz&a7oFqs z_zCb-()*t4^<4~#UMoS#%XU!pJqxOx&x4ZR-+`jj(dT)+Zw7V$Mo|5}J>YYo`14y( z{C)lT?oS*6otr>0Q?>(xtVg2>&4aJ*`x=+7VwCRo02kkAt-u&5)?na0jm7nF7fgI zRiOAh7F53{gQC}*kiGzv-RubI&EftBLFvO|0lxsMo*#lL=P#iAi+wKjejW-=B7Fv^ zcB}&zfp>wb@AshS^NOY3-wB}ngoWVoU>7L4c>olhzZvfDw#@l)IH+=t4tNHr=S!gE zd_5@regf3E^es^K@%1IYz6_LoxE_2bxD7lSJbt;~?*>Ju_kk&RHz@vo7L?sdTALEO zoGb?~Ci%&>CYwhcRQC4W0;>IYfTGKnK-KrXfV-^lc8&*i{gQy|1KthJ=lbWsY2a&D zdVfy`H6$ul9EKfy)0NcpCUZNVl~6b7gQA*Y6JaBT)X_gbueiZJ?gNE#Ox`+5MMy zHYJyVZv|I?zW~nz*g%fJV~8n{=N>%+C6^8Y-f&wI1m_fLTra{YkrCR;D+1@+v| z!47a)&GBDB(d+mgujh7f4e8&5E5Xj*CY$$u4O~b1#5Jy09|1-0gV%ccHc<29o!5DL z+QBPHe;vF5Jg3k3@m=t8(idIs<$n!aNcw~;nruFOGbp+GBq%%a$8demw>ZCNf=_dO zF{t}{UFqX(3d$~>2+E&73zXcqgOb}jK-r52!TZ2JhwEFfa(nOuxChri1l7myBeHL`t#tC;9l4I zxHTKpxbq%R^?wUg`wx7p%gsVi_iqFxS6>DvgRj2M({n)Cl?@@i9TcBm1jWbF2IuqV zK(%wy^~`s{w}R@=t{Yu14+Uk1jsjKwLhu;y8c^;12q^viId}m0XHa%_|4pt>SAmkp z_ksI@JKx~^*&n=u^f93HgxeThbKYF`HNr^sGr8YQ+L8ff|C8Og&S3_-9-8Uj`({r z+3!%uq$*K+L1@kWmLJ0d)<^yfH#5R{C) zHe5fJyi+)Tp5v9_xpACJj`b6LFo($(IrMvZKu<9jCcP8KU%2okjwu}9<2aGB?&JEe z3;F+*^9w^A=aWZcbPvb5T$4SMEQ!D0=eUQw{|;UPz6XrI1>t$c4JErD;rIf1wu0i} zzj8B9sKjWCmfw@e6NzTckfZGGUH{gZf$>g~$ zq!rVXz0|LX^Us0La!7~T$#)h9DwA|@=yx7@^t&89jcZ@y{5J3;aALT3Ea&>oCcTP7 zam@J~@}tJso&2Bux!x4Y*0}P9aQ?A8i|w0y4f$4cZFe2yIfk@;=WxC;Jo7K$n>c>N z^~8$g4}=;#foa$30q{TIjEIV$1$1K`d)-_N!4!!=IrcS<4sLc9px z%+bbi2lqP**LC_Ig=fy@921+okK+dJF$~(efb#v7<1x~wQ}_RZ9i;yoe2C*F4vmLL zg1_WAgmc;HA94O;P(RtxGfAf$19rvNd|pFZzxCjU{nY+_hJP>O+H&e!%=sTV{~-7@ z$7eY9<+^@5fp6xxmh(e7F40APZCqObewOF{okPFn97l7$GNeBf5O*qB#Bl`A=yw`8 z+fQvgxi6d#kmqpDe;l6M75pjb`62x$@XMrUhWs^50 zoWC(7cBi~sIDZw_aKn=QIljuF-%5^;aQ;n8p@W<+;5Z=M@8H=zxc4&B+c^#;t>0eZ z{^EeY3Wt6_#h`T zm%_D8;0MF`vVhH?){9nfyh0E1lV3KAw0`rre<#OvoKFT*T@1f>fwQ?L|L;Q_+6Ugr zQR3P~q(2UB1CQd`2^_!Yd@aWhxPC79L-1o9H*$27J`DUi$3JpZIde#5XUB&n3`hSw=havqC z_%@EqxOOJ^0dOrxC&yi+KMD46e3Wzj=5l^9#|s=wNq-ldN|}3eJYhM|C$6pH(C;9w zpTV(`L%#_Q*}vC>e5Y`~!tpHWOTcQDgZW1||1EenN16Kt8;5eT1KY{yjT+T6%L%%n2UBAaTj_3F$>BGSN!gWq<9`<3sS4;;twTh7}HW$nqenWPWl`W%j3NpIrVhx2{7z7QP4q2E&Q z1V2rl1WO$6=lFTJ-^}^%!a1i&H_tx~UIc!R>u(A7?&sPP&R@^ z7x?Y#VE;Zr{&U0gdy)4F&JO`sbG(Q1Pm$|T@TVO2aDE{ef1l;#pGkj;WB+h*kHY56K1+EMB(t*mse zOlS4pwfC0O>hjCVtv$7tbjhkpEqkJ?ySk>*R<5NhdOKTtD%H+Xd!?t( z3Tm&^dMIa7+Fhog@)|pD?Jk%6YHwFtI4gCwrETT*vaSzX>%5+{(%Dm9* zRq5QzN}VgK>7tVtFG)}7E_IaGR=Zb^%iGpbZe3OCtkgPcsjBF$@nETo7I$@5C?&0x z!S>4K@1IO)^{m8vjz7UTg1Nnao)yOQ>vAlE1k7+XN~r*p{KpeYw&<> z)XJsq)>U+{yIQNIt9s$~QdrVfTHan>T4|d^VQuB^rF2g6QELe&EuD~el96$k3|*z} zp3dHm<>hXwhfh^lu9n2pbTLiLF7!3DyxP%GYOa+jga_JEiB4Kwk*=te+uLesPc^Mo zyL-~*eJx0Cc|~QN3&67GWzM*Atrbeszm_x|GjZaq_V()9a@&lF6Vu*ab&68CIVtsC zh**8m0pUn)sAFNwR1%Us#ZIDkO%Q^E>(Am{h9dJDa^@hD$C2Y z=I(O4b)wo;R=p-iOOOq}eJ-lD7*%U+FTsFH=PJaj2l?x+cBJ#Gs6osi_68XnO1qHk zwsvte$g1-ut1_*2h6+;z+N8E6H6232q_4H!t}fBk1iuf$R9XuP;msr4azv?3g-NU4LRLgcO{9*F62g?st(I$@<9bpls@2?C?QE{~ zlvb>ec6O7)RR>O|W~p34A*oBKOJ|DBYRqR+>EPrD)Ae2qv#Fo7PpT zP$@F={52m=Cr(`42dmdjoH!$0rtC{4E;BpIJ*%p1&Gx`W$LadCaBZ4joOa3c*W9x# zD`dXquOWNm+sZ3Sz3p%p0bW*Vl^~&&%hJk<6teXo=@Y1`Vm)0pDP5MG7E(i4@=yjMO3^z?PX zPZ8+!#S6|#83&+8xuZ)uy8=@7q~mMVw6EHWx$I24B;iu!+T^wh#$*B&^mO-@mrY)_ zqSRh1yYeotR@=)Z360rzq+n9IqP>c|9G6y+y6&}=S~=~}xIrx?B-boi&b8Ty==7u1 zsIH=ISU&wI%mb7^XVIC>wbF{R$ubwqovrAZ33PX9ZEB2FX(z8Mb#%3tYcn{9=L8NV5` zJIb*ILq2uFuuq*@uEGe}hjMp!wR=W-Mfu9)G?_K*j!Qjew-W|?Mq9Rt+mvO zUCJ#jxiq@f@Ht9Ww5%wejky+{nO2v4_$Z~du5zo{{&aP@&n&3=!)Tq?u(G|nywo1Y z%{TXA(aPAV*v>-L(e5L1vod27ye6x#;#L$Fq`lH=BZG#s;6KqAMg_*aSqtZ3vfH|< zsDoJ!sYSO&Aai>1qScY$jrm|=o*T4NBm1B$dKBFkx5&}qvAV6U#&(iVW2czX76t{G zpYCdVT3v&OqEWyIh)>ts-Kjw{Qar0m#yb$UHICp|;oJ+v*~1XFqsGZ(@RUum!giu?;_|sjcYqbJ%hNeC=HRpCoX{F2XP=q%x*6B9FD4REWSYoPug&K1| znb9^3vW(yD<#iQ}k~x*=Q${6?D&}g}kara*I_JXa4`IK|p)@%S+<{wt?%3weYvi)r z+PdM}J%x06Sv4?Ri_&HM(~)I)aZj~%wKF}?vDR0^=;zM`wzv}wFMJb|U zvM@br%295`G$wYJ7_pcaRH=x8k1DNLhKg!$cWYT$dOJ&NPysnkdAC(}t{V7>kfzp! zKLr6$AS?vk?kIHyrO$dENRH;Kgg{Q@wTwv*7we`yUP`Dct0S5S86Aq5gWBUcHZSSx zDyOTkrf9!fasK=>8(Lgl+sSb4dMf_3RaRDdFqw@0STz2vwraZ77K|=j)D&ZM?5i(p zXeL&>ODiGV4!I}^_&?@edvzrOg%~ktng(dDuv{vQN?89j6U6nxDe}2NJuL(8jL>32 zV7TO{yw3E=?JmW3iW3?0%(rK{Cx0Xgn@f&ODdq61yrLM$u4}G~Pd5aEs|@R>X?B<{ zioW-}xyd}uPw|~F9yLw%ot5Rb>;{8$vjjd&|K`=wSxlwZloQV8x?Ch@qIEqgW&8zc zYZYOrbn?W6NKxdhQ?Suo_wG$|~% zXNJNJo<}|!#*AU+g6O18pykzyW|9VKsGvmom>ey&jmNHkh29kh2&N4^rA`d1GkP7I zV_s~N#$|Q$O7nQ}_#j zhEY9O*ioG$4?iOsl=l$Lno@VAio+ovE6khoV&x}eG(*+0b&-j6UKS<)NJdZ|qxCz;^j^V{Tf$QW9j zF2*ogeZ+2D^Ei_P&4`07H6WU@zJ+hD|7d`wu zj2Si}#3v~-1j6b<*yT>SVYPJ5qI2dJM;A%9N4TP`$hi|_tgd*|2UFl|%q`gZ-0Y=z zWv#2FyHpT|09d7nP3tNR6m?#E@CgtWw^%JHVPyKD@wdH?@uf$0DpDcyAA_?mGnOe! zX51JU>YAQe%H-_clBm>|EGoN472OG&c|{XbYQufUu*fUvV!(B6h+~ac2t}cT`}yW0 zM?c^CjhvdpX2o~Ja>Ful1?N}CzB2Ez2AWX!vUdtwi26&y2 zu7&;)Eh0j$IY69QNS$pOo;`a?91iMNKin?4*&EIyX?(Qk31mwn1p$#X!Lu?Zi%wg70&Jo4H|H1-BE>=D==d;5w>=_d@?JjE|DVVHg7ru-FR2c?nO*FYABmlS<=Uj9&yBm~l$Zv@d%&H{!?^=A%XT%$jc! zhyoDX5{uP}!bH0;T;QWC=3nHHV)DLPfKOjVSqm{dG&i5rgi(Q@kOt%4&I+wJ+vNJq zk^-il6|t&KdK7}U2#d2t6svZxWRdFfyp7$1B-2`#4VoGmhKncVVl852BbHgdK8Z@G z&Ha^?ctu^=xT$HObe0EKRTx!qNtnD6`XXlADj%mM4P&a7z&c97cd5&3M1|P3Rh6y~ zKeQNbY>JU7L`7ujSn#23&D7K`>1P0s54%YT4nTA^!+Ma68h$5h0#HJ1T~n#`($ad$ zO-k3&fmJfGxLCvlOGp>9cBiz;i1f)w8$-IP9M#I)55>J9g~wXV?IX0$q|Pc2-VaJ> zgH$`x4X-Xz>acw9v5 zWfOWto>)jDZ;%9+@JV~SQNz5yqDHh=R%2^z0yQb^A$X?MK#Yq^aKU8O$rc%<)+_*6 zW}o)d5zq$4LC=^AEYAn$#h#~YnO+%Tjr^4reFZ-p^~na;f-b9SO0r0)rlo2VtI~{Q zNQ`cw`KqM5c?IEHBFs2(m0DLjGAs%u9Q}hbs&l!iiv_y=(VtnUUHwJ#!EG)Ei_Iu`W@ZEo zATm|MTSd1OnIvnvELujryWF0pLDn`)#JVw~nlTnto-{0YKse9fOlNFg55BTW@;?&_`zf4B* zvc)6ZRV^ELhRn!z)XU;{$>b{6deO%M2DTdm5%p!b5M9)E4Z=y<^w3jY=gZp?YVX}J zq^vVx(dwv4&?1--4_$Mvs!Y8^^vqkYL2_^nA2jlysw8WXsXW6FY9otGA6)K;uA zP1B|WU!98s@1*E>!2$VLA#xn2mqUzh=w?sq`%DluBuLZ1!ZKR4ti3(jt7Ah)!4L-j zn(z@sW*AnGJj8oiaSaquVYt&CkT-{UkXO=ERY2QB66-NHhJQp548K&3;JgJ1p(~M{ z=zf-)EmEVPzeK5X4Wo({8eHWx#?;%fu+kSir`VS;evXgSn-jt)liVBjCg##O!RX>u zD7N5pO0{)`O~E>Q6oW7wLJnY6fk4a%m`lP}Uma4&(Py;z2v_gnQH7wP2l)c!G$$jk?2r%BLq&H(1`S9hW-}@x+Ff6nV*d?MJ#i^c z0n~;__K`T_8!4b%(UDWXBf-$9Y}k`X*m@v}iG!(i2ZsBY(|cN!h-hU)IM)en4weQm zEg>Uf=3SXvmNS)B6^Aa>8zyGCQz&cWk|P2}6&PRYkR6b=<}$#(mDp@utyHz}m(Kv@ zSF%A5$ECB6tnOFY<_&shb=NFJQuJNxM^hLQ)=7OvAtJbcZ*su6p#3Vi$6@VE6B`(B zfklZ0u|KUR!FvdTKY{&jU|Kf(QV;V}aY*VH{ScRa`~nG@1_$bja%K9j>lUg>$7K(V z^K5~#+}2{)YdpDjS`3U+&RD6|cEE=*qw18X$S zCH&pcknVB^m5|7vEzG}$F2*=BL=heABdg#PW@W)VBDa|5`jM9rrVZv|yfpgRrd1w- zw$dB5rD%vrIL6BEwr2S~eUU?rJda^Z6_`mseR7M4+&9Pw`L#4(mwi^W1*ck2D2sQVMo$zS zFNk`9gY{1pjV`kRDX?}Sp|7^j+L-1X33QfI#R#CK4s^2^aWOxSd*VQ0Oh6K}cE`j$ zOzY`o41H^bw5`N)vKCg>GPOs-xUIPYe6{$s%XZvV;W4=SE({fOjH^6#^zuMt7C5hK zf7Yma5txQd+ zuVoY>67)S24dYlOPK;`5(}{7tAOKQ^CNM|IFw8$2=tS6Y? zVqpk@Ss#cKjZcVm3<`L=$qMroNgaAsjPT`AbcWJ$se=&@F$$}4kk{LsMGBE2+svaz z`}9qc8rCoDjf9Lj_1em)+t$X@wP>Tw@yw>TwneFE+tl6YY;ZkH4Lq7vnD-2pw3X#5 zFH3Y00yUDwS}kT8;yw^Fj|a-?=UbP9s92o2&z}o;%wK9cCg4IT1vprCl)qv@N0D4CZ#B6c zY*!?E*bbo#NRlo5Nglg~je-fr?)aKyq7Jcklt0N6t+qPc+iU})>X zK_fEe@qm1;Kp3AIOKiIl^-`;*tMr3Rj8wL{#_X7}%Ve5cgCr^1Y?|Sn7`#yhA&;st zcwEkWIjG^ma=DN7+xjbIx*N?jwdBrz?3v81-pBD+x49k!If=5x=JBG5b~zOCGdhPo zLX$#J&U|cKQ%wtkmTSy6nZu*S17;;6vNrREEVmkG-Y3uHGKNe+GF_o6BeFJ?6LIkU z=15g{cPR*$o3tR_(UQU4=&DM}vMroJgM3kB2(DO|ASJlm3Sn4ZkGfjWofr|%{CS@d zHw<>g-uT?fcdz7J%K|FI!Z29w|7z_;+w|!NjS>WW@)PH)%o14P`Ab;-oyx2E&`dX;k&W*TLM-fISaq-iWbQx!fM@(p|zk^1=pFDyVEw@ zl7);+;BdZu(l%FW`W0h{?X8ME#fEr{&ZwkDtSooh&LAlTOB%jMReO-F`!UiOg}@o> zO^o9PqH6M>UK-1dR&{)LDGBqH!CSG|BV7G-k+~`EoTcnM#!wJUZ)(^~ zIZJzN=f>VOOl?)6zq4q*aGcn}-Qd>5*3>OX1@l!5Dvc!FR!QE_x~B>9&;*ax+6WRF z8U%IiDqfXB1Va%xv^GAbJ%JYKzr7fX`)Yd zAx@M^_k8FG>muHQf_33$(Rt%xg_bi1l`?Q7Yz5F_YqjpQnE@&gD=#X(!>CtJxwzusxokMbMk;+U(Z|#uuJhpYq?ZTZW)O(pg>v18mPs;0eqO^IER!KY_&Pw%|3L)&dfxSq(3 z)VtrDm<@<~(aTI{sd^d0gZ<~kWT(7rn0#c*1dLWt)*3A-*Z3retx6s?9vi%zZ3gy2 z{?e}Y-tJQSgj%BK@a^Nvq}b^AmUW<*^eK>kq|CuO`^Y>(p&?(OcPKIPBI5!|Y7EHs z5NN~KTIT2W-k`;_!lU64nIp-4V4HQS;a0Rj_8?M{Z;8{xb$21ReM?1dah!n}Ijs0% z+oMji5D_;);19()>GRjTD>foJt5$ow7`xecvDlcfOMOHqV>th#;Jm4dP!ux0qN=na zs1cb}L1IZLFWJ_5vdaqL)+I7U@}aBT9q*Q{Ec7!|tO&*T%yulx;|0rFRD;SbkS$UelNL?h-&tIw`HoBU<_wY`nl$P%YN&A=3faR;uC{kv z)-J(yNV_Y1%BD6fw_%xf;$khbybLPw8VitpTI{t2m?W;vL6{ESvBFceOL|#Fn^)|0 zeK;dy>4UI7rs11UY~jvc^=}!YV)~Ss)qYxO>2(?u7w=*v6E}0> zl6(#r_gqDHIgm!S+nM! zJORyR6{r3YJt4OJEl|bJ^VGE^S z#eQc4S-7G|csQ+fNDys1qhF~d8kaK*|k02To#izi?_h%451OJE`k!9IZqD>XT`2cYFSr zktEB&R;~P&HWL<7ns!7{T3*)Dk*s=R?;P;sRiGO$sj=2nE$=I1ZLmZd$E1kTclr;_Ohp8&1x@e>O zP-Avhd^9wT7b2}=X^~V$(!#}Phl|g9us?5}2dR9|e10|9v-luBMzl*=p2D?YI1~fem4(p&glcga>8F!lRn5XZhm{G26nzvw;JdW9X8XB@0C> z3W`W&l9%O);?sB`h|i$Q5})G5C_eSqGz8??>cl6@*wA=HC79coqaZw4S%qsspoYjD z1S-E1n5%CQLWN)k?_f9kD1-kBp;}T^ksE zJ1$Xoo{F0zGqEgOvp14MeMp|aAf)@Oxwg{e>;)P*J9(;)^BsKvF0M(CHLTfS_Vf9i z>u$7B4Q-Cg3kffh+0H@#*kQAMZ!T;#U|%1*3p)}s-4=Ex+{f20Gz6k-J=qJ@xNi#X z^QjwrOs0OTsyH7urFN&u3&^e}L{=nE?C52qmJO&Y>?21>{CtciDE0zcl4(~wNyG3{ z%WiSTn*j1SS@n}AD&EIwOZZ%*Yk$be5M30I7>_Z^F+}j4y@udRi`OvBb1nKv-7*BS zwY)S;_xWy}?7W9JQ(f5plA7hpSx1NQlZZ)Fv-#W7EN<70JO@~GMYJG=W0)iJ76rb zJ0s0E!c59{!H`kGn;4iFV#UOB(jrc7Rq!#Y$_-3G*na%rD=gtXdc2vQFtH>9XMb4rD%oS9p=lT zwqY0nVly#~%O1`08RvJLZ`d3*$r$!-m~$vNK1@rZb2MxQlZTP-4&l2G`#_Y>;8G9M zs+bGS-BC#+-4D~Dk+b+J=P(U1uYK6(ebO}S?c6&VTsr!r@R24R7FEspAe)p2n)G3e zWYFZ5E9)v9y&Y+IlgjLvJA4U7$iCT-XuH{PdEzbH=~$FG!M?H>$Uk^mY|56|wU)$| zM|o?X6FHluc1}7`YNp5L#U-YN`p3fpGF(yg?Ot}-C(Cs?!<4j>UH3l4&=gGu&K3n) zk~$m1Up3Tc(N$hX%EaA|#Jo*nXPShuDNySHHZNP%)6+G+Hetr($>w^(5Pi_xvuB+& z%LtzepW>@|7KNS~->-|qHNK8V5ZcngZ@cmS8ejakA>D$QFuc=O^IDRseZZJGNkMgO zN28fuqmrELhAC$L7~~03pSkB|NqNRCd#pea{unlQXDupS*ty^w2@l!IHJ`o5D0Z$+ z>>{?9cLu`N*KjHK6Ff^OGTe<7*a~Lw?P9B}f|%h7dpdp}-&TFDG;;aOuC8pDVb6N> zDI`JxHk3C$SXZoQnT3n3pxnR6MK#nBfsa@@A#?#BNv=y643IE;0gRsb(iP6G#utrw z2^)>%HDwwQVkY5o79R>}TL`6j@w)leY&FI>6u;4+8hzZ2<;MqYB9L7ak(7upb{Eg{ z(LXXw8ClpzNPLg5;xuupG}Jv?6O>{Z4Tl&IsLtl2Nmv&Lvq)T=Z4PxUlVV1BpPL4g z2W8|FL)f+0Eot?ax{SUn#KxL;u>hmpHKv z>JhPj`2tJ0m)fYGQLek-S-Xo5SQH@QOTLJ>a$JVdcjw_a%@+i%FyK9wj3%E%AiScSW(PA%jyA2#LUM! z3w&nU5Km;V%wJ8iD{&~uc4LLc)!Q~#BcJ5@+;yr38_jzxY@olDL(Hx_ouavxtS(cu zmPBuG*%FP%seI&PznWV-!rZb&Mw5I!lki&eyoGEG^lg*Lpzo^2!OzBY(=3be5OzSt zke?`D*@MBj`QI35jrY~T$o8n9JRMy_bD^QHli0(L_#{ovs(oENeC^Nj_65ku~xI?~i7#C6RmMC^& zW13WBm`4J&hj_wwwH39uVXB8iX`d?5dKjPP4GTHl<&hrz8y;~L8uf#&Nu$o5Db%Q+ z$np6}BN}@ihO8orQ6iYgyk`BsGa@NrugnZ{71;_BjQQBU$81Zywk5 zAveuGEqWLJfTnFT&OT)jz0}4Fc^uOune7^7y_>n51;f>vy4JK1!IVFK2O*TBsco3p z7B**Pg@^WO>7ZfnkVfhIN=bOQ?r@Z!?y@MDd*+z#TI$CAVzSKn#`UZ@Ef)m~X)K^yc zmM*9Emr7|)TwSGo{;|!>iK!)0%D9qip*dZMCo6e4*f8x#rwE<Rs9p;uN=WA$z8?@bQnDO{ zXsQl>HjXD*gwvOdqC{Cv4~%)~zS5Fy-}8uM9x@^%o<>^u)_A^#W)p79;S;oc=5EPo$mHVmuQn!=w4Aqk*o?U+V*tz@by@2zAY@75c@{owK%318!W3E@^y2^(HMX4eh&49z7LF@CS5I9H`9<*#LFXiu~<@ShA3$Z*9 zH{2*x>YHga(%8;5I_z;ujRy7GPx3B$n9cs;L2O+J&m(A%iJfqH=8PWnA>?8QAfI={ zIBFwoJ<;+^BAkSPW#Tw;#ig#aPbv~0rW}1U+5dG>E}r`&mxdW%!<}MmIMCKsK|-E< zhiJiA7w*M?Xk7Rf3p07hL@tE%wRYqNBKty93b{3Y@yT-i5kueqoP_*PFFR9+)-*x< z;qPLw6d4yC81?+`L)qU!35)!C@3~fO*Q;;&k|oLrxwEKNxG{pm6ezO8*`0ruoi6CL zBJI(jQ(=#lMr@M}UqH`tjw%{hz-x%?CsDVKfmWcHRx2n=MId;W`)z1NsDLq};CVcM-Ft$EW0p}qPMrrbq6g66oy5^UGiPB}um3G_ zt@Gg4uyo?KUp7>FnKWjXRWpiYn})*2@M2(@sR!PyF-^N3hI?bfL^f(eOOlCSJdtQ3 z>RIxNcxIF+?jwmeie75G2C=(&i7oCB2t#2QnBzp7t)ISw;L4EOtfF4#^JO%%n=QOK zIDSIDSyXw(>y-z+$T#5-c7wt<>#vNwy=JK8WXzv$s>)W>@GH{NNsNgd(M2<*s`JlaGc%FcVyn;GGHr$m zn~Q-%hVtc`KBz5-}+iqWASeDk{J~LI)m(0u@Vti=0AJTY3)G3?r)ZjyE==J=7YY28S+Q*^HajzB3cz)A z@$!s4ct|l%{VE^Bzho4r!NA27|{j~OmcMz*)aE0nq*IQZG3}Tm*q%OR z%$W>$%}eA$;wDzRDgD$1i&Bo+=bW|R-1PW43(i_HYtE9BPB~}M$y}MYsAbNA`6uw0 ze`KtA2``h+NM|paw`AVp)6$dAI`vH9jvkxAw7R*}J!byA`6uTco7ysE%p83lD*Sov z8TNj~WM&?f&g1O$G`#+q=PWs;`Pe+4n$91mXg-<0si<$z%t()2Ug;UL&_0IJdBDUaRV|4{$EB(|mlZ{_439=f-GTmF^T zbM>bMTGIY)1Dgic_is;!EKT)?5;yigJg_mPwvSk8>th|;N!~wF9eU>8{zqx@_Wt`h zdum`~|Gm0+H%)qs3-`ne+xj2qe`sKH|9$bo1Jt=*i5Bt?Y#i83b7?UBq2Jf3$xo&I zABH5GDQ4TyUGU}?KlOY{_8o2-vCUfcAoXqt)YT=rtwV)oBv&7{h@96Mb?>J;_x9gW z$kYEIZMzO)Zl$@KIj2OUE{W|a-Q8d7ef5KV;0rcFBGP;@2 z(hHd6tbWMK>A&0Rwl-xA^`}jjcxVf=$!J6nN3s1X4~ervu;4s*J$EGFLC-A% zE%}IS!oc+{iM2Vmx@HKr=$V^M&EAnITK|(&xFu9UbGB2;9k5^Kl%hmV65@&t(AZMC z;ifzkYB%#zAndj3nCb3N*&m?>Mp9TUsSW1zPE6^2Hax3Wcbd{*6(?I+K4gV!+oXZb z>BNaf&ZqmgPMkP{kGe4_wij_{dULGt2y(NMUP%Aei_-oNSnzFHL#}Cc*`{66($ccb z>rlsOjg_*we+ybZp7ZrkK~nofq>u~BSlISJzs5rBvdQh(6bXM=G_+wd8|Wv@NXHh* zIu@xI#f7|ld!R9?fkXnaHQwEVQrrpuMwvz?w+(DmD9Mf^&5F03LUL|Fx zH$eK$Mu7gi$!^9zg$eTS9%iT-t9vj#`deceq#2*RhK2&@K5W!<)NX6kf5dExk}&Kp zQCOooYL#lZrR+PDdyATY6^iT_O(}AJ@b^{zfJ_U8Y_PG3kyWhPFtAa|tLn@@WX3iW z1k_?XZsW>IKlH?3?M`o2dU?kF$>i)pB z@-=DpplLdlV8yPd(0luz)Crx1TyBW*csE*QVm%zsC?5*t83=AJ7$s|79%s~bBv)^& zaf%hlIg~Tv!2mU!N6iQ;TOGZ`e;PMTN0FeY3)?8o;sM#bTNkj0^bV@ib*o6D91K)dwkU>g62{MM;{( zVZ@8(OO~Mx${}`aFc#tU4$efc9>ok(q~@gVaJmJ0$x@~2=|V25k`L&to?^>}lPyRR zWNQ#xVbe$Gu|*gfI-4`l#4Tf9J)c;%eP4mQ*h^q)3yFCSDIXF=v|(S)poxEh83Ksc37`#QgjV#edO$71(jrQFN%G9%zNs%BnJ(U?v2h^}sSI~A%BFD!m6iqh?&Sirbj6fKd&S#9Bg z`$@{+ncijXP{j&W8PSKXHg;3`W60$qcc zW`d{7Fnzt-P$jna6U}6d!*@$eWjx@UdkwNTxl=6C$w`(&VTIidDdnCM0`<1acxSa| z9)L>+L_)Mo=O2SY(llZTgPsiGX)h*=peNMySpSpBz{Y`1sF`bp%{ROyZgj_ctLUJd zj{DG?3z%kk^$fDm|AxXdPmxYHgQu>QK2 zFD^x?(`Zl>UNbWCe-t%?zBvb2OYf-8(f&p%%ty<>Rb z8!0+-RSPYn#dV$XoS7etEMREN*$EV+VjJ{fyd;nzv3~52!cM7_yv-~aQ&SDj*^J*E zSTxbP5n4B>&Ol4=Y9^*Kdm2ILd)jZocrx4r5#k!L1Q;gC#-N;yvj_RHqilx>17wp_ z;X~93g4-4xch`RiVbi>54~k9>B!EUnCCv|wpyF!5d{ar*dlU04<<`Zfk<1Uxcg5Ki z-8^V%M8>Fr8f45d#at;mW6IZGSUW9dbDGz)9%2r>6_JO7HXA5N3HoZA3&hgkRckU; z)Ko7K>WbnX+w#e0&`mj@)HR4q!Fq4viIFU>X@!PKO*w|J^f~P`4Z)$X6(n6P7$Dg)Tn&1F zfMhm^OkB%^!eq!gxq*4uc7?RAqffZt>!Cb8X%N+7Pk26$bg6uT?b06w0dYKRY*vnF z5+8z|@|0=Mqhh&i+5P=E>)B$fvBnyZGHJzTHO3<*5Xx7~keKUd#MS0d z`ue5u`K8%SQlnNOz)ZHB)UpBfN$OOawyKD`Q92EEgBGiivBr3@@)uUF zkrwY-zKTJ~+IJ9_+4~FqR8~z*!cse~QnYIlSIDNqXeiTD5@VZ(sDJE)79*dCMQIi{ zOPm+>tef{FQZ1C|R|`CYG^#Of?-0dlD0`7MQ|F-gWV9R6X7uOg2vd_=tp)m63Im}w zc1w@wEH+%EAM7!y^`X4rVinEMoJHr%mF6^zlp6dV=Rb^$O_g*)xQ6C?BztfJiXMMd zd@()HuRa>0HWjqkvu*2Vm9fa3EOumdOKwIC718_PsY8-2#OLZQIQ(48d`f-!xSJmutO5K@M!j!bp~}L6zz^+gQUB7)3*k0 zp?30he55y8)UnRm@ADdnKv28ia&1zj05%#%9of8F%c0(L`vCg=38!G zGL^9lW>7Ql+)0>u=rmhbv>;{CI!3-az1Ph;g&(k~rwKf~x6n(bTC~9?HJPuA*webY zy)*?+*hC0BU{P4r8^jQT*^qP(m!Ms+wrWX1&81Nzb0mt(<`l(X_h0aDpiyCVfy!jg ztNaq~GUTRX>!}cAf+kQido9P2k3Er|6XITa7ASe?)` z&54YsE?03GK%M4})IUnE(INC;h_(zTy>e5;0g>%7({l;(ws6T$(H|-> zBsSqC5MkIwpdxQ+kolj%@pacDZ;y@1n{&5Z!hst)#Dv(nuW{C70m~1my|>qD8m#?g z3hF_H0$rVjJ~xD-;Tcm-pGFwTL(=CmggUBuwmenxEs<3)K!8DKQPeBqv97{T#k9e`XAVUb8t1WVEE1R}*K-q}B%!iSS z9M({kALXBZD!ymaHw8BauU*%1Na}0T6)A5v)H-{7MODP$&Rqz`b$)#dO=D&Pg)}>n zx_YCdB9haY5tK9=3kGySE$76gNCTL4Ww0Y9f^YT;qm7{$}-CyVm&YwW}lH@?K-D@5`c^Y#^PXShhT1~I4g@b$B`vcR4ud4lXp8kW=be3 z6zVX;f&`@avU5=v%u@mIUS$U_lUL#VVLF=6*g zLY^4y6^~ReTY2RBiRc#K+62V;Ah+DKaXXuZ1qI}uEeLbV{EDLEXJuQ9gB;3|xZ!3H zO{pQsy)V+lu_Wp`V`~2>M5bU8^U5RZWNaeivO!sF6QAm<$3)?|sa<(7E>2k?CXqKZ zWUwX1IveRxI0R*gVY9AMnh?fM%!FHNjYz&l+ZY`b-1%PUOYF3JIsGy6han4_jY9}f z>>2FCMJ0I(7x|&0Mw^k;69vr;`dp_;gNuY$j}P3;bGURV1a278=uB*KplPtjlIMIv zZ^Buyazm>qGL-FU$+T5%F6sfz(Hgo*oS9H@eF$S<@@~-}@)yRbLh!~+Vh|eT$;@jW z2BdN+34JTRB;;MCT-uVWx3BYhV8IN4wY12F+(c8Z4J(5*K~|tB95G|RNxqG8nd9J1 zFY?C+u@J9W!iRfI*rK1&$OS2FR$Cxr9%{xnkt--WlC5(f1<|0mc~Q}d9sa$ek8I&a zbd>hg`HJE_W*ONtd*kK>efC8T^F6j(%j?_OQCX+Y39Ek;Y|$4PS9_bmOWLAh;Xy3g zm>Jwg%_VIYCez+1-ej-0ht5Bb6>lk;{@gbSJ_SWf8*=7*SD5-@`BkpkSkTQjhV5b+E|Ft7 zDzGpe7;J>)URdL`!gR0g03N&uI-YycYknz`SuZva!VK305fNpj%Y(cZYs!ZHyA*17 zSEzySMKu=9qaiiYY^H-U=+P1}@IbEZ3Ma`pva&Exm^8}Oy+a~KF8Pi1o_4+c!xTU% z>R$p$XO~Vjgnt(sXfz&n3F6yS~vQ-;K z=O<;ufjCkxL+0`3{w~xjHoyoWRzN!Z1(DCHb(^NH-+*MAgUX7Odatc4aYq`|xyO1l zxF;^Kg*bf>x6I!%M#fp4@q{f@R)x2~WJ`t{LLpr)`(fW%VZIQiG_2Pzu5!qsr3UfYfFq z6e~OnZmnkaYp$H{kATei++|pH4c)n6TtO)+(^?v5B#+TLbNd>si3zQ5 zQlhV7>(jxaivB~(tX{36*Xu=Q8DMoar%Aq?M1ff_Bru-`w$WkjFr;r^vt|x5p(zwO25Erez zH3LKyIOBCm^4Z|Yp4x&G+9gHSc{og`WkWSXv1@hKFEf`&n3-TxJH31oA0Y;AFDS=i zwJbw_a4g+3&jN(1pdrG_pcpn7(@}1RP^*3K_h)M7F44$qjA-fP7W~a zv55ucO*8}G8~M2Sh;>1#v z4N_`Ih_u_>)LCX?Bo|C=vqDF^dD4{2c8|a?$exXeDkihXqO3MGn#A%247XU)*urc; zkLQL%t>A)pPo0xMXf{(Pva{lc?VJ}0wG0t29ci;o7}uW~_hr(oIaZ(zW#3c^H)MexgjJE;AF9gO@y$1YEFuLF!4Y_%kZzN`03dJ7YspBb} zC!)3zwf=_{7}r?vH@_zN61w&G>Yhl8o@s*dkjb|DEwHPw9ZGT&>_A}C7H%UrX`SpC zn8X~PbCih0!v26o4tM~!`AjaUTU1TF`Z7g5{EoPaWbk8NL&0Ss7Ny#@;6%BL2 zBhD7=;*gVZTdL$Ur@@woSPJyf<~u9VNQRznGu4-$BmxyTl?)c<#(g9)KtOL1Ac;@# zT_Qg;GRL?NeWUlm&J{Tp#;f=xr~V-YHr3AdqMT%&3pxbn@0BLyUOe5BLtPxHA+^5@ zXB}0`B=!in(St5z+bA+}%8K)t0+m!z@ECKa$O`*^#hqJ^U1xd6*GJh&g|MZLlOVMh z5v_z;q*iU!im1IEP3$2yacp;H41_ciA&JKsdQonAPr-*8(hvfK@JaT*?I-E)|9_t6 zUGG}^;IU)VQpJ1LdJoU}^d8njW(I&pSSa0&i-+l4Ytf+I6#|MQs#A~4AOw)Lw zpBRolW{F_LLfFHbK5mk2O1c_H5!B=aSLE;^U8Y_M1@!7lk+X_g-tozGQX*jpUE~Vk zQkYeN0#{}Pp@gz>MSN2>2P*N+Ky-8^#p9G8jbgD@KjmoMDfIlJZD9s>UHN)OQFXx( zC>lr69xDEVj7`PQ&FCnm(*b-*DOV6otFA-XARYahh9#f1bdMlcKp_W3_m)N31Zz+wIcCeHiLOH zUC1L-lRAB6t`z|y0ch8gm)4B7jJPzPG3Su#LO<2^TKLM?YrK(^L>6p2ot050XT z5+{OVFw<81NY{lY9%xI$) z@x=78zE7^B^3}&CzHvoFmP+zl`jh%jt9k^*kpzUZ9?0g==}u^HEY=d#Fp8=X;wgl7 zF=tkHun`eWkf`Kn$Gy&f7_=zJ_-B^!TyU+3xYGc!5W-*}7ppbD2t?3W^?mU`^vHoX z7oowD9&_`V97S@2Ym-fvEqa|>Y3OzrCc1WkkTCUcpua0$`lD)I5+Iw7=GtnKtQ<+G z)Io=&#V~K_tA~@EWxfPtA351rz^n@KQ9F$|#_lET;(ypdbhZ;;b05y;U}MhUaTHtK z)ykg+mDghiR3+0-5uqyA(VR&hs15&Gs%ov7`{(AdLDH-FhR(PL>l$AMfk$_mngIn!q*m@+-gBUgb-irJG<)^cMw5|(k(1|pkL@@vWd zsQmq&^bo*_FpbrmnmtHu#c<%4tCnRalCztIxhHXuPWKkV!x*$3UJkkJR{YAC2i8Fb zF(D)w?U20n>svF4#X~dSDCTqx`t@7nEIV`O)k}GSd=G|+3xpq^+AUNtn}CJLjI}#R zr{pw`JX$p}e8gzTK?s(SC3J5^m#v$Yn!uSa1WG|dgDcSv+rXUKvXnbzJ5m$&(?s*4 zkg=c%@IHm({L=)=iz^)7@KzTM5lfktfhj|WB%*je*RRSdz>l%i3^nG&VKr1I)*$Ul zlQXj;DsOc2@xiJYoeK6&JAk&T^O}(PduZ{CxzeI{4bmWcXK4_B_iid=^PZfF5b3Y4 zy}?%^uYW^d#`){~Y)*`WiwHHA`h2ulPW66-sF4g5WSlDXDYV=B&P1lPR$jGKI(4?n zw4PB)t(Wp28`QVP4iPbWbL4FdJAd6MD0spI%Qb+F9E8Asmq*y-<*xk|Mr(lq?*S6=8XEUU-I@Y`$9)wY)i_^^^gkyQr zOBz^Na~h6Jl>3cRn>416N=H4Wi6E(1x;J&0c4Z+36!!3Ml=VO%!AJ0xR2KXox!oIk zy3ZJ^ncAL%7DA29+q^ z%?9lLytDH1y6y26MU}f<5!@{to-4RjD3e?mnG``*54H?fc#c@D0>_84KM175S%Qk- zSx@VP?GYT&-8?Z_3%i1N9lI_K%h4S;ZMY8zz+&P9z#pVRIgR6Q@se?kF+V5z8l2HV z0FAJciudCSHm3V+#1sLG#T()n(8GVZ_WI%Rq)$$P$}}(_XUm;sOHd0(PVfTN=1)i2 zz9kbQD+}d=8FGy(&8iTnD4Jfizk^A1>{30`A;j%&e8cz44Z!SLq~BKg93bN;VE`mm zMym$M&lT2#2^OGSNX7~Ww!lR~Eb&O*AW+0s`C`5+>*9bPeaOh1*o;Bbs`w9p_zaqU zIA|9Pb})|#a=V0>i^AQLU_c}MB7EX0QRoZuq<9T8PSH6n=;8Haj{rDhILnYbKM})N zKO7i;n>_-=@{j;fxg6B)vL{5bp6CSFUjJ=5f`K zX^XX`fuy32lxmEso|YOggAtmMr!1$~$=dqL~wa>z`1;U2X1 zNV0y?F<=P-jOQYos#hlKh?@~-2TLm7mFHwkxjS752}$*%Ki{?_5d_fwnCfQ+KV!Cx z^(8pVI%ObHVIauo)5U{l$laSkjxm_k@#7Fm)r(XFG6-v$?Z9mef`?)g;Eo)h@JwR6 zOnWA*KE;}0*YfU)l(kLbgpz4xZPvYC%}0v#cDjxrWe>-R;#gBAWAy!nB1CCaaLmgC z1qL?yHu>udUNV!2MkG;|6QUlZ=7SZ+HUuY2J${h;qIO_nEr{wD(|4LBf+ZcIHo$DH zSloHk(Ld8bo$g80_;uNed&`U8C zlHzJ_d)O?Q$_QT=ukis=s^kt#?0i}gh$wK1>l9ihtda@5N3cRt8;tSiG?0-Pz!df=Hf(d@q6_MHLri zuTg8)q4l@;(rDG>@H^o@)w@(TGZ z){?4-)l0Rc4`tC6CybuU{OnH*e-h))>?O`-<{6vp5f%!UEcWYXx)?0Y1*E4H=pt$< z?ps%cNegF$>d%0Sltxm+Uk@%0V5`td=L>9|S zH?w#`HAzZ#7LIYovI$^Q0t4lT1OM^WDzZvI5Xm7!e6k_}6Skd|BJT0vhDfNTkrEQL z#0IK1#~AiP)KTL$mgx|>m%<5X6@eHMMm5_P{3*2nTj88-Uw~d<3rTq9`ybX}cl%DH z?lJuXU!#zpt6{^Q=&y?v(qp{HxSPoEbVET{YC;Sci)lpNRaiGd5c` zY1{cqbEiZ;bUb7RK>-Wo&=LdazEhbh0GtLdxiD!Ca$R*c#O6cZVf-hPrI%hT6_|xc z#+Xmu%IvfgnOdn{OJbH@qeA>Lg6k)>6oCX^iGo$u07^7X-Ho`WEb^@PZ30;83ac1U z;SL@!>`4G^CeF(rqcU!uq$Yl9+95UqLV>y=N_l}x|GhJPcV9F@S**u8g$8916;-!_BDKN3?f-4Yjuz+uAVDR| z#~kUe-ilk5_HSRi^3^rGM&cU(FQ=IJ$r;7_$&WY8ju)A^{CjCEogWWQO3t)eAqx=q zG5lz&*u&nB@qWrxFs#aF=3N)lCTp`Rk5G^&8-NM4*`Z79T}6^wRig;$&4dGQa#sZt z;4dE0U6loxM3$&fFJg(b|MO{?0l@?ASPPaXws;fO6X(=cU`EXnQBD4H27cr#hd0fR zu3uf*7e8T2Mobn|%RO#Wdydo4`!XIv+@bW}@cFl*IvI#PFHCdihY)O-;>} zjX@L#JguH9dx4AbV2pP2f$PojRzYELt7chbGXgB|`P>cpLE<)|K6xj_Cze^ug3}-{ zfa`7B8+321hC;4&_UMaM7dx;=H)hNq2G|{d!q3Jhft=?TTG^`o^y{A0!1~1!_s+jj zPvK|dvv8dFlccyBBTf!TK0(lUEbo`*K7hHW@F3m@jz^YkCBtWfo@Ve6(nG^$JX4%K zQ%FGssqWO40t^{pAu>TsEN}iXKfsRv{`=zVuOIy-5<$>}d;iJ>ex*75B_cJ zP)}1k?d0a5(kH^z>wS;u-4x2RcLbsg?RXb>cQu0{NOQ=;j?uJiIa;pm4P&6+MnXNu ztSQnYU~XB7Z3i^9%(l8y+L=-2DpK9h4-oA}OlWSxx8FLni@#4PARK*0agDqcqg(nkmgd4BaGZGJgnibPOh-A`3Je zPXYSWk>qvGRxWRjiL*5bkq9cwUa&JZ14oFGn=z$Z1dSmdBlXNEcnynFk0@6o2MRR( z?y-evwi;CLQ5D*=Sbh=6;6P3yxo9u-M;>$qE?VT2JpN<=*=`#{OBg4zKQ<|HcTYZK zn3lTChHG}5+{ z;ME0Plh;w7rdNx}Ca?2uq0zhaLuVu~?Z9-hB#jCDEhW@hf2h%XdDmcr@9z4SpB_8Z z6KiWd{<&l&;)jl%>i+edJ(D7<+Gk2t{$3k?bd+`S1>RvuJ+al>@_SCG*L zN$^|t_kth6;(5R3|6J?FaD6xgd+pOyRRGnf00JJ&n`{PBdz^p@3X^(4CqALNp^D=Y z@RH1%XXtMmKBg_D3MuL9=V`WtmYu8Y?CHS#NND#p4c^x?HO>6U!+}7iF7Dfek>|A= zXo+zl4i2n_QC~EamI$Fvw+AMlP>*F&JfX~;S{l@$k=-X6{3j!Czd&t}&lU6wXx}b& z8yHUoW{f_lqDW&N)^a<#pXNs|x= zr43E}ozN(yB?m_i9u42TesFwp?ec4f2S=B$F7_tCcYBK1JTgS_Xm{iQB>D!dr~_aS zH+TN>wQqct>$>TVE`}PzJ%#xs|5Gqw* z6&F!NZ{&EkWi zxv*mKIE&U@s$C1csg(s9;7^AHWS#S9DSy)|zQB84NIn6qFM2o-y<|Q3V8sPA5;e7DGg|U5THv0}s)u$2D+k8o8{Ny3(Q|6(`pSshK7Qj^6jfiiL0~w8!2- zt*)U2goceowApQXq`Ac!2)%V}7o^86a6pT?Qv-xv&trZJ0U`~$q4~g-D@HA=!FWEl?)>kZ2+AG7Z9* zvD?+xjqU?+fy?JK@nHpy$i)+Tr;CFnZFV1xjmf$8GH&i36*AS&YyuTPRe{w~BwHmp zkI)<|$`_|c>|_yWW;Yu9_pCVb=Xxg5qrXHiqeZM9oM5Sh>Crs@lf zKMx9z5(#gl9|&}=cZ*UO6iAI2$_0MJKhX0|fubI=Xqr)#1ok!l%=Vqx?(@v&m>vB{ zjFmmyRJp~w0Fz?&AB4tN!!q;k7rep1cd4K$$Ix>{F1_Z82OAQj8SPiJ*~O zg?1tczk$lK4~YAjQ%jU7n9ECGoJRYdc;r|}*3wS8r4Osq7L3O_UyJm?Pi_b~RMn{k z%L=wJb0!vZzpsf))*V<3>L~A==LrW|XyHAVNU1{6f!Nqcg5V@95;L?xOW(3(%3=P# zdp9b_&qWjXhxErT{?!J|1tpLGBH%w1P^HLvBPaxxv}FQ=)MNS%*v%IiLTpyF&k!KD zOIa^iHFh%*^x4V;KS7^fNy{yqJz{5$Q>m`enbuJ z<;Cjm*IxPamtTH)p^OLuiHDHOpHWP25>#oq<)FDt#3F1HNVpG2;+m@P-c##ewW1F? ze#f(2J^RM^aqUVRfZwoYkRY~APp6sSk7OS|11GDH{W61L$u?N&%7COR_%waF4qTcc zPlWCG`Y(~rB3;iB5~hMBVm=5GDD@tiL3V*0*UzA9Ib!fRO>2#@Mdu!~x+?2`7ltD2 zXZ-I8dt=eSE>@4B-5(^a((8!V;t3RisH5eVRA#~ifInWmdJ){@-GeqU3dC;G23RU! zBW==9?FdV;dj+w39Xc4$ zRFL!dUIu=9^PO0P$!nm7vr+1-&4zPuw~qwn?nA3b8#>K#6tqy1iQ!djJ$jBarRC0) zJ8YEcl?4*}F~G4sKM(X-$qFRS-K+dZ5qigrJBXZMZXxvcj#5n&ZGCIU6LQ)9a`QRv z4W!!vkFG#CMa`dt@k?TNgv`4kHgw!1W-=vPh_$KtOe#ZAH3qaBx2xFFhrA4yq&#%* zKX{(?dJ71~0}~;`FMrZX_|ebiOLm7%x&(b6snLhnvsP62%yAIwS89al@-IdQB{O7R z!`9&Q(J+8_9yi)JceS=6gh`#kM4+nzYDI4)xdz0!z-mm=YzCAzOw2qGgIL=l(N|P( zHnP_^HBmXoX8yow3^YvwJ6}8Adl+2TC7Am`w6)*hr`<;fl4U?NT6f8f1?c8ki|^64-*^Zyk6@P$1(kz*2Oa#1Jhm<_)-ZCeV!)79%lt1_;7e zZy2&|tYXa0<1A`j94LrK9`W{*<IX*?xG#MSVdT`_G;$1CMexJkO3im5N&`ne3>66u_h}DG34qr;NK|{ zOgV-)%cv$pB5^>Ro=oXSkRXbCazfI`F(;`QRh3z`&5bWgy%?ZJArdnQ0TVGUGCP%5 zo@eUS63aTTLfhz;PEf$Q(8?59>K-e3MkPmj1l`$KpeRdy>Z!uBmOM^gxrLt;8cm31 z+x=HRT=+_h+^|^%X)x=#Lz=ukPvuXQ12Jy~lsXEqp*IiNiO}k-9bWBc zP2j|A^T0(7eQuSql|HuWP+(tuWD5WrKpqm{@kgmxwMq(Aqq5*eHQ-YzEXxC5l8Z53 zoq|kL*J_u+J>LzGVhoJFMh6KKxCLs>xqX_%%BQeU5!Y_qKhzZRNu*it1KDqQoHCQbR0_#x4O#Y7@PDjVhSizN3>%S!|0 z{~tMKCSQdJTP$k8Wm|mCWINg)f1bvOwBzcywo(7gD) zYsXiwU!!WxNH1of5djedQfxHt$7}|O;9|4_mb=e@R$A^`BM!KA^_9P&e&J zldoBldIy**tgACscf>TZYjbfq79iHx9HV$aK7QiaWh%iu?M3Mu3Q~JC4K40&wnwj8 zM!|G4RcGPbBFeo4lVQ3VLk)tXQ+6LZI!>q>6?|U3Hygh5!_vbVC3St>aOyaNq!WkqJw zY79dyF{{dwY5Dap~6Eiz|nRx32G>939*^zJ73WxY)bCIJ~j< z#_RfVaI|-Dq#u`$_b&fHKdv0?U3t?#4)?C;|Mi>pw~zhfc<<0ZzJ0X!ZFjtSZSUF* zy}EX?ckM(!zH_kmom=|x=9_zOddwTw_ikL*llJ4*^}Snua_eO8b&qp&bMNS;+8o{9 zJG!kOKe)Pg6`1po?yB%cXLL!?WU- z)h$9=|Lk)K)|xRZXUKyr4?ZMgw{^+cF?gxcPT}%PPY08|WjNOXF;lC~eQv0^$aTkd zznV!(8w0kCZ1No`e>`n4wh;z6uO5(?#~;jivNmm9K$A_t(;pp-&tvkMZ}Aj!sibrM zv)7x+hUF%v#GHhk$8mILqO;3O5IqmE4+vUbeK>Y(pcgXcZF^eQbj^k{>-kKxc|dEs zRzUQXbp?k+3tti5!wh2sWaV<5Z2hsO?T&HzE zv8-)lzMS zoLSTsR#{V6FqUhr1OF)E)*c-1IZ@SxI6q(Wv#q6Y76<2w6I-2KoOh#BEl;9WPdP^0 zDDZUs}iT%Q{o zvWss|)lH$Xtdf=UDW>gM^^|}U;LeXWJt686`pAY_$0v~XIwr8j>Ye0X$|URj^b>YF zuR^r-E4j(oC@T7ft=hiQrwmACNXn};hOirNbF@{SR`e@Pd#>|>N()kkTUJatyMx>+_7ubl*_bh5odrVm%g!|QxD%v`=|bRHOqKR}!l37Z z)CLpVCRGyBiE@dtlwOKlOW#|BcyyDp4U&hBNndK{4dW?dS5?BsLr_1E3d&J_RL|Iy zsEBKqq{$wg#a`zP+V8PY#B|zk&usGYMkU*Pmvz2O@Il8mJ_jlDhth0w%8Ka+)TF3F@Yw1K8|5F z?elUJaAu0$JY=5Gb3)B0G!i)x5;f9tvR%1%BetwQpC&eLoc7!E zwi9{D;U0!o-wI%%U5obP-45%04Y7N6D^sy1yX+R}bG2R;nZZ{dfq|kZ-Rvm&^|`7+ zqe~hqNA!oHHb0e$bm&K&k!2JdD&um-OQVj%In<*d7dy_Ug#y&mx zl9=w!r&z9`fp_`GVhw9XapE+#!)d13+7$Qd4}@Y~t5azY>I%yK1hyWasI?Bo40#`s z5OeeHEu<3lM<+MwJf%Hoyq*+a$6SY@=!=j{}cEg6_o|x=$dZk5xAnSHWB1< zba%QF;W6Y&+wp(i=F#Bh#}^VV{-uh_VxB{QyfMT}TXcviXaqmOPN!L!Q9O;4Mh=%` zu70`FK@%D%&~6vqx1}$2320{(0vS6NBXwPlaEWD}FXE5?0f5i7kwAwDa}E1ToI|bf z&MeIjgfNke1X4DtYjaQSr6B8{O7@ob8%~aI{EY_+y&iqtRDfpRq7Ao!E~{?k$eur_ zQ2?|a8E)u=8!25{pjfzH8zS|CsLZ1B1r1P!9ork$pMxwk&9Zi8z$f11S1w}l zfdyXauah|&1pfY$It6>{&5Oq`EMT$B6nn=t&^_aZth_MZfFJnuG)@8C~KFP{c+^Jbj4eK;&%s z&@ccH^-S7HN@=4OWBj!0m^`YPhcGHj_6RF_uk)QHU!78qM24!Wp{6c}Fcnh(APhb5 z^cD`F^k=ONH=C7k`VuS=GgIB}0>zhp*?PnIc6r%~x+JhWh=2=oAcGrwstO}-tmV}$W`(#*7PS4eF zkD0Ix@P`mbaj&Iw(>|hw;3;D}?nf*Y2%zOZ8NpFq=ti4f7$MM&bdkU4U~5(rCN@wC zG?kF9EAQH_1SBmi4DaoeQ7biFL*D?xWUtB)$)Nua!TD4=R!cdPIm#}SH8Q3dehm6U z3XAY~&v+bTg+!>~o-~DsZHKlaM@PbC{D@zo%c|zK1 z1~aH+Xu+BQN#ELamc-qBe>?+5>x>6lN8I3YV{2IYW&2~g$V!>%k{ zHQTJ?#gY(Om;&DF-5G2%4)PEsK}bB6^yZ@l|514i+beH08+7?!ct4+cWk~fPl{v*D zn5^<@5@Gnu*dcTAMtL$q8}}L|*YbN60L~a9vF^i{W9CU&*05-o2B<2B)9Nj48<|01 zt{uw0z4PLo@i+~U=!T<&<9CIiQ3zVoP~ZP2BIwE%Lsz)Mdk_&xM_Q)$BocucE+Q(5 z_7}JNZ!ExG(zr2tK9^h+pyDh-M}%GSZqUndvFgc@oCz6mg6g z5(7$!IjYZ5S=fZ%BLDXIk{1Hzqp~n&tAo%bv(rSTZq4FtEF=HbxBfwdd=CJ{ zJ8luN7ASyeW6kN_Hn1{(k9RD1^Ms3Y1d9A`1ea^9+ctzg0{9E->F7OFZ6NXswgfPaN=($PcfDPgymApWn$CVWcj|&%csU2H7g&TWFFoU6GU7>~ zHIdc+5R1iDfO6dcObShgW0Ge?>{U28x-^~mh`}s1s;aiwTv%#rlQtHh>cOI}gG)V& zl@f7^U!h_7dNVdH1aR^@(pL~m@obXq>_iM8J6#`VN=zYy\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,177 +13,181 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "المعرف الفريد" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "يستخدم المعرف الفريد لتحديد أي كائن قاعدة بيانات بالتأكيد" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "نشط" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "" "إذا تم تعيينه على خطأ، لا يمكن للمستخدمين رؤية هذا الكائن دون الحاجة إلى إذن" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "تم إنشاؤها" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "عندما ظهر الكائن لأول مرة في قاعدة البيانات" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "تم التعديل" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "متى تم تحرير الكائن آخر مرة" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "الترجمات" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "جنرال لواء" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "العلاقات" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "معلومات إضافية" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "البيانات الوصفية" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "الطوابع الزمنية" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "تنشيط المحدد _PH_0__%(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "تم تفعيل العناصر المختارة!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "إلغاء التنشيط المحدد _PH_0_%(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "تم إلغاء تنشيط العناصر المحددة!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "قيمة السمة" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "قيم السمات" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "الصورة" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "الصور" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "المخزون" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "الأسهم" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "اطلب المنتجات" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "الأطفال" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "التكوين" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "الأساسيات" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "تم الانتهاء" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "التوصيل" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "تم التسليم" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "تم الإلغاء" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "فشل" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "قيد الانتظار" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "مقبولة" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "الأموال التي تم إرجاعها" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "الدفع" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "مومنتال" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "ناجح" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -191,31 +195,31 @@ msgstr "" "تطبيق مفتاح فقط لقراءة البيانات المسموح بها من ذاكرة التخزين المؤقت.\n" "تطبيق مفتاح وبيانات ومهلة مع المصادقة لكتابة البيانات إلى ذاكرة التخزين المؤقت." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "الحصول على قائمة باللغات المدعومة" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "الحصول على معلمات التطبيق القابلة للكشف" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "إرسال رسالة إلى فريق الدعم" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "نقطة نهاية بحث عالمية للاستعلام عبر جداول المشروع" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "شراء طلب شراء كشركة" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -223,127 +227,128 @@ msgstr "" "اشترِ طلبًا كعمل تجاري، باستخدام \"المنتجات\" المتوفرة مع \"معرّف_المنتج\" " "و\"السمات\"." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "سرد كل مجموعات السمات (عرض بسيط)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "استرداد مجموعة سمة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "إنشاء مجموعة سمات" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "حذف مجموعة سمات" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "إعادة كتابة مجموعة سمات موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "إعادة كتابة بعض حقول مجموعة سمات موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "سرد جميع السمات (عرض بسيط)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "استرداد سمة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "إنشاء سمة" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "حذف سمة" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "سرد جميع قيم السمات (عرض بسيط)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "استرداد قيمة سمة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "إنشاء قيمة السمة" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "حذف قيمة سمة" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "إعادة كتابة قيمة سمة موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "إعادة كتابة بعض حقول قيمة سمة موجودة حفظ غير قابل للتعديل" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "قائمة بجميع الفئات (عرض بسيط)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "استرداد فئة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "إنشاء فئة" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "حذف فئة" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "لقطة تعريفية لتحسين محركات البحث SEO" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث الخاصة بالفئة" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "معرّف الفئة UUID أو سبيكة" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "إنشاء فئة" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "حذف فئة" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "لقطة تعريفية لتحسين محركات البحث SEO" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث الخاصة بالفئة" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "قائمة بجميع الفئات (عرض بسيط)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع الطلبات الخاصة بهم فقط." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -351,36 +356,36 @@ msgstr "" "البحث في سلسلة فرعية غير حساسة لحالة الأحرف عبر human_readable_id و " "order_products.product.name و order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "تصفية الطلبات ذات وقت_الشراء >= تاريخ ووقت الشراء هذا ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "تصفية الطلبات ذات وقت_الشراء <= تاريخ ووقت الشراء ISO 8601 هذا" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "تصفية حسب الطلب الدقيق UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "التصفية حسب مُعرِّف الطلب المقروء بشريًا بالضبط" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "تصفية حسب البريد الإلكتروني للمستخدم (مطابقة تامة غير حساسة لحالة الأحرف)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "تصفية حسب معرّف المستخدم UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "تصفية حسب حالة الطلب (مطابقة سلسلة فرعية غير حساسة لحالة الأحرف)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -390,35 +395,39 @@ msgstr "" "حالة، إنشاء، تعديل، وقت_الشراء، عشوائي. البادئة بحرف \"-\" للترتيب التنازلي " "(على سبيل المثال \"-وقت_الشراء\")." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "استرداد فئة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "طلب معرّف UUID أو معرّف قابل للقراءة البشرية" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "إنشاء سمة" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "لا يعمل مع المستخدمين من غير الموظفين." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "حذف سمة" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "إعادة كتابة فئة موجودة حفظ غير المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "إعادة كتابة بعض حقول فئة موجودة حفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "سعر الشراء وقت الطلب" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -427,29 +436,29 @@ msgstr "" "ينهي أمر الشراء. إذا تم استخدام \"فرض_الرصيد\"، يتم إكمال عملية الشراء " "باستخدام رصيد المستخدم؛ إذا تم استخدام \"فرض_الدفع\"، يتم بدء المعاملة." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "شراء طلب شراء بدون إنشاء حساب" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "إنهاء طلب الشراء لمستخدم غير مسجل." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "إضافة منتج إلى الطلب" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "يضيف منتجًا إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "إضافة قائمة بالمنتجات المطلوب طلبها، لن يتم احتساب الكميات" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -457,21 +466,21 @@ msgstr "" "يضيف قائمة من المنتجات إلى طلب باستخدام \"معرّف_المنتج\" و\"السمات\" " "المتوفرة." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "إزالة منتج من الطلب" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "يزيل منتجًا من أحد الطلبات باستخدام \"معرّف_المنتج\" و\"السمات\" المتوفرة." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "إزالة منتج من الطلب، لن يتم احتساب الكميات" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -479,75 +488,75 @@ msgstr "" "يزيل قائمة من المنتجات من الطلب باستخدام \"معرّف_المنتج\" و\"السمات\" " "المتوفرة." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "سرد جميع السمات (عرض بسيط)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "بالنسبة للمستخدمين من غير الموظفين، يتم إرجاع قوائم الرغبات الخاصة بهم فقط." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "استرداد سمة واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "إنشاء سمة" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "لا يعمل مع المستخدمين من غير الموظفين." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "حذف سمة" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "إعادة كتابة سمة موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "إعادة كتابة بعض حقول سمة موجودة تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "إضافة منتج إلى الطلب" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "يضيف منتجًا إلى قائمة أمنيات باستخدام 'product_uid' المتوفرة" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "إزالة منتج من قائمة الرغبات" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "يزيل منتجًا من قائمة أمنيات باستخدام 'product_uid' المتوفرة" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "إضافة العديد من المنتجات إلى قائمة الرغبات" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "يضيف العديد من المنتجات إلى قائمة الرغبات باستخدام 'product_uids' المتوفرة" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "إزالة منتج من الطلب" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "يزيل العديد من المنتجات من قائمة الرغبات باستخدام 'product_uids' المتوفرة" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -567,15 +576,15 @@ msgstr "" "'color=exact-red'، 'size=gt-10'، 'features=in-[\"wifi\"،\"bluetooth\"]، 'fatures=in-[\"wifi\",\"bluetooth\"],\n" "\"b64-description=icontains-aGVhdC1jb2xk" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "قائمة بجميع المنتجات (عرض بسيط)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(بالضبط) UUID المنتج" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -583,666 +592,680 @@ msgstr "" "قائمة مفصولة بفواصل من الحقول للفرز حسب. البادئة بـ \"-\" للفرز التنازلي. \n" "**مسموح بها:** uuid، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "استرداد منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "معرف المنتج UUID أو سبيكة المنتج" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "إنشاء منتج" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "إعادة كتابة منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "حذف منتج" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "سرد جميع الملاحظات المسموح بها للمنتج" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "إرجاع لقطة من البيانات الوصفية لتحسين محركات البحث للمنتج" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "قائمة بجميع العناوين" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "استرجاع عنوان واحد" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "إنشاء عنوان جديد" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "حذف عنوان" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "تحديث عنوان كامل" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "تحديث جزئي للعنوان" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "إدخال عنوان الإكمال التلقائي" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "تطبيق docker compose exec تطبيق docker exec الشعر تشغيل إدارة python.py " "deepl_translate -l en-gb -l ar-ar -l cs-cz -l da-dk -l de-de-de -l en-us -l " "es-es -l fr-fr -l hi-in -l it-it -l ja-jp -l kk-kz -l nl-nl -l nl-nl -l pl-" "pl -l pt-br -l ro-ro -l ru-ru -l zh-hans -l zh-ans -a core -a geo -a geo -a " -"payments -a vibes_auth -a blog" +"payments -a authv -a blog" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "تحديد كمية النتائج، 1 < الحد < 10، الافتراضي: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "سرد جميع الملاحظات (عرض بسيط)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "استرداد تعليق واحد (عرض مفصل)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "إنشاء ملاحظات" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "حذف تعليق" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "إعادة كتابة ملاحظات حالية تحفظ المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "إعادة كتابة بعض حقول الملاحظات الحالية التي تحفظ غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "سرد جميع العلاقات بين الطلب والمنتج (عرض بسيط)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "استرداد علاقة طلب منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "إنشاء علاقة جديدة بين الطلب والمنتج" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "استبدال علاقة الطلب-المنتج الحالية" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "تحديث جزئي لعلاقة الطلب والمنتج الحالية" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "حذف علاقة الطلب-المنتج" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "قائمة بجميع العلامات التجارية (عرض بسيط)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "استرداد علامة تجارية واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID أو سبيكة العلامة التجارية" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "إنشاء علامة تجارية" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "حذف علامة تجارية" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "إعادة كتابة علامة تجارية حالية توفر المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "إعادة كتابة بعض الحقول لعلامة تجارية موجودة حفظ غير قابلة للتعديل" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "لقطة تعريفية لتحسين محركات البحث للعلامة التجارية" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "قائمة بجميع البائعين (عرض بسيط)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "استرداد بائع واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "إنشاء بائع" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "حذف بائع" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "إعادة كتابة بائع موجود حفظ المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "إعادة كتابة بعض حقول البائع الحالي لحفظ المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "سرد جميع صور المنتج (عرض بسيط)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "استرداد صورة منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "إنشاء صورة المنتج" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "حذف صورة المنتج" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "إعادة كتابة صورة منتج موجود حفظ غير قابل للتعديل" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "إعادة كتابة بعض حقول صورة منتج موجود حفظ غير قابل للتعديل" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "قائمة بجميع الرموز الترويجية (عرض بسيط)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "استرداد رمز ترويجي واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "إنشاء رمز ترويجي" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "حذف الرمز الترويجي" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "إعادة كتابة الرمز الترويجي الحالي الذي يوفر غير القابل للتعديل" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "إعادة كتابة بعض حقول الرمز الترويجي الحالي مع حفظ غير القابل للتعديل" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "قائمة بجميع العروض الترويجية (عرض بسيط)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "استرداد ترقية واحدة (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "إنشاء عرض ترويجي" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "حذف ترقية" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "إعادة كتابة عرض ترويجي حالي يوفر المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "إعادة كتابة بعض الحقول في ترقية حالية مع حفظ غير المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "قائمة بجميع الأسهم (عرض بسيط)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "استرداد مخزون واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "إنشاء سجل مخزون" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "حذف سجل مخزون" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "إعادة كتابة سجل مخزون موجود يحفظ المواد غير القابلة للتعديل" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "إعادة كتابة بعض حقول السجل الحالي للمخزون مع حفظ غير القابل للتعديل" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "سرد جميع علامات المنتج (عرض بسيط)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "استرداد علامة منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "إنشاء علامة منتج" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "حذف علامة منتج" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "إعادة كتابة علامة منتج موجود حفظ غير قابل للتعديل" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "إعادة كتابة بعض حقول علامة منتج موجود حفظ غير قابل للتعديل" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "بحث" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "الاسم" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "الفئات" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "الفئات الرخويات" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "الوسوم" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "الحد الأدنى للسعر" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "ماكس برايس" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "نشط" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "العلامة التجارية" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "السمات" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "الكمية" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "سبيكة" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "هو رقمي" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "تضمين الفئات الفرعية" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "وحدة التخزين" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "تم الشراء بعد (شامل)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "تم الشراء من قبل (شامل)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "البريد الإلكتروني للمستخدم" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "معرّف المستخدم UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "الحالة" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "معرّف قابل للقراءة من قبل الإنسان" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "الوالدين" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "المستوى" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID المنتج" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" "مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "البيانات المخزنة مؤقتاً" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "إضافة منتج إلى الطلب" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "الطلب {order_uuid} غير موجود!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "إزالة جميع المنتجات من الطلب" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "شراء طلبية" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "إزالة/إضافة" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "يُرجى تقديم قيمة \"wishlist_uid\"." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "قائمة الرغبات {wishlist_uuid} غير موجودة!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "إضافة منتج إلى الطلب" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "شراء طلبية" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "إضافة أو حذف تعليق على طلبالمنتج" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "طلب المنتج {order_product_uuid} غير موجود!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "يجب أن يكون الحد بين 1 و10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "السمات" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "السمات المجمعة" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "مجموعات السمات" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "العلامات التجارية" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "الفئات" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "النسبة المئوية للترميز" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "ما هي السمات والقيم التي يمكن استخدامها لتصفية هذه الفئة." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "الحد الأدنى والحد الأقصى لأسعار المنتجات في هذه الفئة، إذا كانت متوفرة." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "العلامات الخاصة بهذه الفئة" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "البائعون" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "خط العرض (الإحداثي Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "خط الطول (الإحداثي X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "كيفية" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "قيمة التصنيف من 1 إلى 10، شاملة، أو 0 إذا لم يتم تعيينها." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "الإشعارات" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "الملاحظات" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "عنوان إرسال الفواتير" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1250,202 +1273,210 @@ msgstr "" "عنوان الشحن لهذا الطلب، اترك العنوان فارغًا إذا كان هو نفسه عنوان إرسال " "الفواتير أو إذا لم يكن منطبقًا" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "السعر الإجمالي لهذا الطلب" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "إجمالي كمية المنتجات بالترتيب" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "هل جميع المنتجات في الطلب رقمي" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "الطلبات" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "رابط الصورة" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "العلامة التجارية" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "مجموعات السمات" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "السعر" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "الكمية" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "عدد الملاحظات" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "سعر الخصم" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "المنتجات" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "الرموز الترويجية" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "العروض الترويجية" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "قوائم التمنيات" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "علامات المنتج" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "الفئات الموسومة" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "علامات الفئات" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "اسم المشروع" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "البريد الإلكتروني للشركة" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "اسم الشركة" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "عنوان الشركة" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "رقم هاتف الشركة" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "\"البريد الإلكتروني من\"، في بعض الأحيان يجب استخدامه بدلاً من قيمة المستخدم" " المضيف" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "مستخدم البريد الإلكتروني المضيف" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "الحد الأقصى لمبلغ السداد" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "الحد الأدنى لمبلغ السداد" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "بيانات التحليلات" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "بيانات الإعلانات" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "التكوين" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "رمز اللغة" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "اسم اللغة" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "علم اللغة، إذا كان موجوداً :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "الحصول على قائمة باللغات المدعومة" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "نتائج البحث عن المنتجات" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "نتائج البحث عن المنتجات" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1457,23 +1488,23 @@ msgstr "" "يشكل بنية هرمية. يمكن أن يكون هذا مفيدًا لتصنيف السمات وإدارتها بشكل أكثر " "فعالية في النظام المعقد." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "والد هذه المجموعة" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "مجموعة السمات الرئيسية" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "مجموعة السمات" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1490,49 +1521,49 @@ msgstr "" "أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " "التي تتفاعل مع البائعين الخارجيين." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " "الخاصة بالمورّد" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "معلومات المصادقة" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "نسبة هامش الربح للبائع" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "اسم هذا البائع" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "اسم البائع" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "ملف الاستجابة" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "استجابة البائع الأخيرة للمعالجة" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "مسار ملف تكامل البائع" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "مسار التكامل" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1545,27 +1576,27 @@ msgstr "" "عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " "تخصيص البيانات الوصفية لأغراض إدارية." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1574,15 +1605,15 @@ msgstr "" "يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" " المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "علامة الفئة" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "علامات الفئة" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1602,51 +1633,51 @@ msgstr "" " الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " "العلامات أو الأولوية." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "تحميل صورة تمثل هذه الفئة" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "صورة الفئة" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "أصل هذه الفئة لتكوين بنية هرمية" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "الفئة الرئيسية" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "اسم الفئة" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "تقديم اسم لهذه الفئة" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "إضافة وصف تفصيلي لهذه الفئة" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "وصف الفئة" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "الأولوية" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1659,47 +1690,47 @@ msgstr "" "المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " "المتعلقة بالعلامة التجارية داخل التطبيق." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "الفئات" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1714,68 +1745,72 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "المنتج المرتبط" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "سمات النظام" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1795,55 +1830,55 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1858,64 +1893,64 @@ msgstr "" "من القيم، بما في ذلك السلسلة، والعدد الصحيح، والعائم، والمنطقي، والصفيف، " "والكائن. وهذا يسمح بهيكلة ديناميكية ومرنة للبيانات." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "مجموعة هذه السمة" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "الخيط" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "عدد صحيح" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "تعويم" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "منطقية" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "المصفوفة" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "الكائن" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "نوع قيمة السمة" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "نوع القيمة" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "اسم هذه السمة" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "اسم السمة" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "قابل للتصفية" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "السمة" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1924,19 +1959,19 @@ msgstr "" "يمثل قيمة محددة لسمة مرتبطة بمنتج ما. يربط \"السمة\" بـ \"قيمة\" فريدة، مما " "يسمح بتنظيم أفضل وتمثيل ديناميكي لخصائص المنتج." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "سمة هذه القيمة" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "القيمة المحددة لهذه السمة" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1948,39 +1983,39 @@ msgstr "" "بالمنتجات، بما في ذلك وظيفة تحميل ملفات الصور، وربطها بمنتجات معينة، وتحديد " "ترتيب عرضها. وتتضمن أيضًا ميزة إمكانية الوصول مع نص بديل للصور." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "صور المنتج" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1995,39 +2030,39 @@ msgstr "" "بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" " في الحملة." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "الترقية" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2038,23 +2073,23 @@ msgstr "" " لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2068,19 +2103,19 @@ msgstr "" "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2099,59 +2134,59 @@ msgstr "" "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "الشارع" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "المنطقة" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "المدينة" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "المنطقة" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "البلد" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "العنوان" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "العناوين" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2166,72 +2201,72 @@ msgstr "" "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2239,16 +2274,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2263,134 +2298,135 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "المستخدم" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "الطلب" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2398,14 +2434,14 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2424,108 +2460,108 @@ msgstr "" " تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " "للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "الاسم" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "رابط التكامل" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2540,15 +2576,15 @@ msgstr "" "إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " "عندما يكون الطلب المرتبط في حالة مكتملة." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "تنزيل" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2561,78 +2597,74 @@ msgstr "" "المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " "يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "تصنيف المنتج" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "خطأ أثناء إنشاء الرمز الترويجي: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "الصفحة الرئيسية" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "اتصل بنا" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "نبذة عنا" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "تأكيد الطلب" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "الشعار" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "مرحباً %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2642,23 +2674,23 @@ msgstr "" "شكرًا لك على طلبك #%(order.pk)s! يسعدنا إبلاغك بأننا قد أخذنا طلبك في العمل." " فيما يلي تفاصيل طلبك:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "الإجمالي" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "السعر الإجمالي" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2667,35 +2699,35 @@ msgstr "" "إذا كانت لديك أي أسئلة، فلا تتردد في الاتصال بدعمنا على " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "مع أطيب تحياتي،
فريق %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "جميع الحقوق محفوظة" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "تم تسليم الطلب" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "مرحباً %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "لقد قمنا بمعالجة طلبك بنجاح №%(order_uuid)s! فيما يلي تفاصيل طلبك:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2703,13 +2735,13 @@ msgstr "" "معلومات إضافية\n" " معلومات إضافية" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "القيمة" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2717,26 +2749,26 @@ msgid "" msgstr "" "إذا كانت لديك أي أسئلة، فلا تتردد في الاتصال بدعمنا على %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "المفتاح" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "إضافة صف" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "الرمز الترويجي الممنوح" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2744,31 +2776,31 @@ msgstr "" "شكراً لك على إقامتك معنا! لقد منحناك رمزاً ترويجياً\n" " لـ" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "شكرًا لك على طلبك! يسعدنا تأكيد طلبك. فيما يلي تفاصيل طلبك:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "سعر الشحن" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "سيتم توصيل طلبك إلى العنوان التالي:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "مع أطيب تحياتي،
فريق %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2776,48 +2808,48 @@ msgstr "" "جميع الحقوق\n" " محفوظة" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "كل من البيانات والمهلة مطلوبة" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | بادر بالاتصال بنا" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | تأكيد الطلب" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | طلبية تم تسليمها" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | الرمز الترويجي الممنوح" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "يجب تكوين معلمة NOMINATIM_URL!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2825,7 +2857,7 @@ msgstr "" "يتعامل مع طلب فهرس خريطة الموقع ويعيد استجابة XML. يضمن أن تتضمن الاستجابة " "رأس نوع المحتوى المناسب ل XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2834,16 +2866,16 @@ msgstr "" "يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " "وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2851,11 +2883,11 @@ msgstr "" "يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " "وتعيينها بمفتاح ومهلة محددة." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2863,15 +2895,15 @@ msgstr "" "يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " "الواردة." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "يتعامل مع استعلامات البحث العامة." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2879,27 +2911,27 @@ msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" "تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "الطلب_برو_منتج_uuid مطلوب" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "لا يحتوي منتج الطلب على منتج" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2907,7 +2939,7 @@ msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" "تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2917,11 +2949,11 @@ msgstr "" " توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "إرجاع الإصدار الحالي من eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2934,7 +2966,7 @@ msgstr "" "Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء " "الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2947,7 +2979,7 @@ msgstr "" "تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر " "طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2962,7 +2994,7 @@ msgstr "" "البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات " "مفصلة مقابل معلومات مبسطة حسب الطلب." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2976,7 +3008,7 @@ msgstr "" "المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال " "DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2989,7 +3021,7 @@ msgstr "" " الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " "المستخدمين المصرح لهم فقط إلى بيانات محددة." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3001,7 +3033,7 @@ msgstr "" "Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " "العلامة التجارية." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3017,7 +3049,7 @@ msgstr "" "عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " "وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3031,7 +3063,7 @@ msgstr "" "الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " "Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3047,7 +3079,7 @@ msgstr "" " \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" " البيانات." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3064,7 +3096,7 @@ msgstr "" "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3077,11 +3109,11 @@ msgstr "" "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3089,15 +3121,15 @@ msgstr "" "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "التطبيقات المختلفة." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "يمثل مجموعة عرض لإدارة الترقيات." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3114,7 +3146,7 @@ msgstr "" "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "ما لم يتم منح أذونات صريحة." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3127,12 +3159,12 @@ msgstr "" "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "ومعالجة الأذونات بناءً على سياق الطلب." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78b6b9bc7ccc8580c3ff1b0a1b690b2b066bbabb GIT binary patch literal 89136 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 U|86!uoxk|ih2_WKc9E|5zuyT%v;Y7A literal 0 HcmV?d00001 diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po similarity index 74% rename from core/locale/cs_CZ/LC_MESSAGES/django.po rename to engine/core/locale/cs_CZ/LC_MESSAGES/django.po index 6d462d69..fbf3a5dc 100644 --- a/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,20 +13,20 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Jedinečné ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Jedinečné ID slouží k jisté identifikaci jakéhokoli databázového objektu." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Je aktivní" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,158 +34,162 @@ msgstr "" "Pokud je nastaveno na false, nemohou tento objekt vidět uživatelé bez " "potřebného oprávnění." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Vytvořeno" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Kdy se objekt poprvé objevil v databázi" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Upraveno" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Kdy byl objekt naposledy upraven" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Překlady" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Obecné" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Vztahy" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "další informace" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Časová razítka" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivace vybraného %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Vybrané položky byly aktivovány!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktivace vybraných %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Vybrané položky byly deaktivovány!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Hodnota atributu" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Hodnoty atributů" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Obrázek" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Obrázky" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Zásoby" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Objednat produkty" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Děti" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfigurace" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Jádro" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Dokončeno" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Poskytování služeb" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Doručeno na" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Zrušeno" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Neúspěšný" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Čeká se na" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Přijato" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Vrácené peníze" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Platba" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Úspěšné" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Vstup/výstup mezipaměti" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -193,32 +197,32 @@ msgstr "" "Použijte pouze klíč pro čtení povolených dat z mezipaměti.\n" "Pro zápis dat do mezipaměti použijte klíč, data a časový limit s ověřením." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Získat seznam podporovaných jazyků" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Získání vystavitelných parametrů aplikace" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Odeslání zprávy týmu podpory" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Globální koncový bod vyhledávání pro dotazování napříč tabulkami projektu" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Zakoupit objednávku jako firma" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -226,137 +230,138 @@ msgstr "" "Zakoupit objednávku jako podnik s použitím zadaných `produktů` s " "`product_uuid` a `atributy`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Seznam všech skupin atributů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Získání jedné skupiny atributů (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Vytvoření skupiny atributů" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Odstranění skupiny atributů" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Přepsání existující skupiny atributů s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Přepsání některých polí existující skupiny atributů s uložením " "neupravitelných položek" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Seznam všech atributů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Získání jednoho atributu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Vytvoření atributu" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Odstranění atributu" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Přepsat existující atribut a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Přepsání některých polí existujícího atributu s uložením neupravitelných " "položek" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Seznam všech hodnot atributů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Získání jedné hodnoty atributu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Vytvoření hodnoty atributu" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Odstranění hodnoty atributu" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Přepsání existující hodnoty atributu uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Přepsání některých polí existující hodnoty atributu s uložením " "neupravitelných položek" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Seznam všech kategorií (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "UUID nebo slug kategorie" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Vytvoření kategorie" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Odstranění kategorie" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Přepsání existující kategorie ukládající neupravitelné položky" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta snímek SEO" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Vrací snímek meta dat SEO kategorie." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "UUID nebo slug kategorie" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Seznam všech kategorií (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Uživatelům, kteří nejsou zaměstnanci, se vracejí pouze jejich vlastní " "objednávky." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -365,39 +370,39 @@ msgstr "" "human_readable_id, order_products.product.name a " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrování příkazů s buy_time >= toto datum ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrování objednávek s buy_time <= toto ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrování podle přesné objednávky UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrování podle přesného lidsky čitelného ID objednávky" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrování podle e-mailu uživatele (přesná shoda bez rozlišení velkých a " "malých písmen)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrování podle UUID uživatele" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrování podle stavu objednávky (shoda podřetězce bez rozlišování velkých " "a malých písmen)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -407,36 +412,40 @@ msgstr "" "user_email, user, status, created, modified, buy_time, random. Pro sestupné " "řazení použijte předponu \"-\" (např. \"-buy_time\")." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Vyhledání jedné kategorie (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Objednávka UUID nebo lidsky čitelné ID" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Vytvoření atributu" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Odstranění atributu" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Přepsání existující kategorie ukládající neupravitelné položky" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Nákupní cena v době objednávky" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -446,30 +455,30 @@ msgstr "" " s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se " "transakce." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "zakoupení objednávky bez vytvoření účtu" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "dokončí nákup objednávky pro neregistrovaného uživatele." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Přidání produktu do objednávky" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" "Přidá produkt do objednávky pomocí zadaného `product_uuid` a `attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Přidat seznam produktů k objednání, množství se nezapočítává." -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -477,22 +486,22 @@ msgstr "" "Přidá seznam produktů do objednávky pomocí zadaného `product_uuid` a " "`attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Odstranění produktu z objednávky" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" "Odebere produkt z objednávky pomocí zadaného `product_uuid` a `attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Odstranění produktu z objednávky, množství se nezapočítává" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -500,78 +509,78 @@ msgstr "" "Odebere seznam produktů z objednávky pomocí zadaného `product_uuid` a " "`attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Seznam všech atributů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Uživatelům, kteří nejsou zaměstnanci, se vrátí pouze jejich vlastní seznamy " "přání." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Získání jednoho atributu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Vytvoření atributu" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Nefunguje pro uživatele, kteří nejsou zaměstnanci." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Odstranění atributu" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Přepsat existující atribut a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Přepsání některých polí existujícího atributu s uložením neupravitelných " "položek" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Přidání produktu do objednávky" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "Přidá produkt do seznamu přání pomocí zadaného `product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Odstranění produktu ze seznamu přání" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "Odebere produkt ze seznamu přání pomocí zadaného `product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Přidání mnoha produktů do seznamu přání" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Přidá mnoho produktů do seznamu přání pomocí zadaných `product_uuids`." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Odstranění produktu z objednávky" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Odebere mnoho produktů ze seznamu přání pomocí zadaných `product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -591,15 +600,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Seznam všech produktů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(přesně) UUID produktu" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -607,544 +616,554 @@ msgstr "" "Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné řazení použijte předponu `-`. \n" "**Povolené:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Identifikátor UUID produktu nebo Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Vytvoření produktu" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Přepsání existujícího produktu se zachováním polí, která nelze editovat" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aktualizace některých polí existujícího produktu se zachováním polí, která " "nelze upravovat." -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Odstranění produktu" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "seznam všech povolených zpětných vazeb pro produkt" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Vrátí snímek meta dat SEO produktu." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Seznam všech adres" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Získání jedné adresy" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Vytvoření nové adresy" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Odstranění adresy" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Aktualizace celé adresy" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Částečná aktualizace adresy" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Automatické dokončování zadávání adresy" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Řetězec dotazu na nezpracovaná data, doplňte prosím data z koncového bodu " "geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "omezuje množství výsledků, 1 < limit < 10, výchozí: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "seznam všech ohlasů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "načtení jedné zpětné vazby (podrobné zobrazení)." -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "vytvořit zpětnou vazbu" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "odstranit zpětnou vazbu" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "přepsat existující zpětnou vazbu a uložit neupravitelné položky." -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "seznam všech vztahů objednávka-produkt (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "načtení jednoho vztahu zakázka-produkt (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "vytvořit nový vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "nahradit existující vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "částečně aktualizovat existující vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "odstranit vztah objednávka-produkt" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Seznam všech značek (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Získání jedné značky (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Značka UUID nebo slimák" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Vytvoření značky" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Odstranění značky" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Přepsání existující značky s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snímek pro značku" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Seznam všech prodejců (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Získání jednoho prodejce (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Vytvoření prodejce" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Odstranění prodejce" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Přepsání existujícího dodavatele s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Seznam všech obrázků produktu (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Získání jednoho obrázku produktu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Vytvoření obrázku produktu" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Odstranění obrázku produktu" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Přepsání existujícího obrázku produktu s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Seznam všech propagačních kódů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Získání jednoho propagačního kódu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Vytvoření propagačního kódu" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Odstranění propagačního kódu" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Přepsání stávajícího propagačního kódu, který není určen k úpravám" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Seznam všech propagačních akcí (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Získání jednoho povýšení (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Vytvořit propagaci" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Odstranění povýšení" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Přepsání existující propagační akce s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Seznam všech zásob (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Získání jedné zásoby (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Vytvoření skladového záznamu" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Odstranění skladového záznamu" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Přepsání existujícího skladového záznamu s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Seznam všech značek produktu (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Získání jedné značky produktu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Vytvoření značky produktu" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Odstranění značky produktu" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Přepsání existující značky produktu s uložením neupravitelných položek" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Přepsat některá pole existující kategorie a uložit neupravitelné položky" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Vyhledávání" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Název" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorie Slimáci" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Štítky" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Minimální cena" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Je aktivní" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Značka" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Atributy" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Množství" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Slug" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Je digitální" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Zahrnout podkategorie" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Pro použití příznaku include_subcategories musí existovat category_uuid." -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Koupeno po (včetně)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Koupeno před (včetně)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "E-mail uživatele" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID uživatele" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Stav" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Lidsky čitelné ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Rodič" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Úroveň" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID produktu" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klíč k vyhledání v keši nebo nastavení do keše" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data k uložení do mezipaměti" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Data uložená v mezipaměti" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Přidání produktu do objednávky" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Objednávka {order_uuid} nebyla nalezena!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Odstranění všech produktů z objednávky" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Koupit objednávku" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Provedení akce na seznamu produktů v objednávce" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Odebrat/přidat" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Provedení akce na seznamu produktů v seznamu přání" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Zadejte prosím hodnotu `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Seznam přání {wishlist_uuid} nenalezen!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Přidání produktu do objednávky" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Koupit objednávku" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1152,135 +1171,139 @@ msgstr "" "Prosím, pošlete atributy jako řetězec ve formátu " "attr1=hodnota1,attr2=hodnota2." -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Přidání nebo odstranění zpětné vazby pro objednávkuprodukt" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Akce musí být buď `add` nebo `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nenalezen!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit musí být mezi 1 a 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Atributy" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Seskupené atributy" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Skupiny atributů" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Značky" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorie" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procento přirážky" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Které atributy a hodnoty lze použít pro filtrování této kategorie." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimální a maximální ceny produktů v této kategorii, pokud jsou k " "dispozici." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Štítky pro tuto kategorii" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkty v této kategorii" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Prodejci" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Zeměpisná šířka (souřadnice Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Zeměpisná délka (souřadnice X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Jak na to" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Hodnota hodnocení od 1 do 10 včetně nebo 0, pokud není nastaveno." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Oznámení" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Stáhněte si url adresu pro tento objednaný produkt, pokud je to možné" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Fakturační adresa" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1288,201 +1311,209 @@ msgstr "" "Dodací adresa pro tuto objednávku, pokud je stejná jako fakturační adresa " "nebo pokud není použitelná, ponechte prázdné." -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Celková cena této objednávky" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Celkové množství objednaných produktů" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Jsou všechny produkty v objednávce digitální" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Objednávky" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Adresa URL obrázku" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Značka" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Skupiny atributů" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Cena" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Množství" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Počet zpětných vazeb" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Cena se slevou" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkty" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Propagační kódy" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Propagační akce" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Seznamy přání" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Štítky produktu" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Kategorie s příznakem" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Štítky kategorií" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Název projektu" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "E-mail společnosti" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Název společnosti" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adresa společnosti" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Telefonní číslo společnosti" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', někdy se musí použít místo hodnoty hostitelského uživatele." -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Uživatel hostitelského e-mailu" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maximální částka pro platbu" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimální částka pro platbu" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytická data" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Reklamní údaje" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfigurace" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Kód jazyka" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Název jazyka" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Příznak jazyka, pokud existuje :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Získat seznam podporovaných jazyků" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Výsledky vyhledávání produktů" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Výsledky vyhledávání produktů" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1495,23 +1526,23 @@ msgstr "" "užitečné pro efektivnější kategorizaci a správu atributů v komplexním " "systému." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Rodič této skupiny" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Nadřazená skupina atributů" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Název skupiny atributů" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Skupina atributů" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1529,49 +1560,49 @@ msgstr "" " další metadata a omezení, takže je vhodný pro použití v systémech, které " "komunikují s prodejci třetích stran." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " "dodavatele." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informace o ověřování" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Procento přirážky prodejce" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Název tohoto prodejce" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Název prodejce" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "soubor s odpovědí" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "poslední odpověď prodejce na zpracování" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Cesta k integračnímu souboru prodejce" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Cesta integrace" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1585,27 +1616,27 @@ msgstr "" "přívětivého zobrazovacího názvu. Podporuje operace exportované " "prostřednictvím mixinů a poskytuje přizpůsobení metadat pro účely správy." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Název štítku" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1616,15 +1647,15 @@ msgstr "" "Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " "zobrazovací název." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "značka kategorie" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "štítky kategorií" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1646,51 +1677,51 @@ msgstr "" "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Nahrát obrázek reprezentující tuto kategorii" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Obrázek kategorie" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definovat procento přirážky pro produkty v této kategorii." -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Nadřazená kategorie" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Název kategorie" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Uveďte název této kategorie" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Přidejte podrobný popis této kategorie" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Popis kategorie" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priorita" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1703,47 +1734,47 @@ msgstr "" "přidružených kategorií, jedinečného slugu a pořadí důležitosti. Umožňuje " "organizaci a reprezentaci dat souvisejících se značkou v rámci aplikace." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Název značky" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Popis značky" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1759,68 +1790,72 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Související produkt" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Atributy systému" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1841,55 +1876,55 @@ msgstr "" " Používá se k definování a manipulaci s údaji o produktu a souvisejícími " "informacemi v rámci aplikace." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Název produktu" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Popis produktu" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1905,64 +1940,64 @@ msgstr "" "booleanu, pole a objektu. To umožňuje dynamické a flexibilní strukturování " "dat." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Skupina tohoto atributu" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Řetězec" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Celé číslo" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Float" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Pole" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Typ hodnoty atributu" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Typ hodnoty" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Název tohoto atributu" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Název atributu" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "je filtrovatelný" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "určuje, zda lze tento atribut použít pro filtrování, nebo ne." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1972,19 +2007,19 @@ msgstr "" " \"atribut\" s jedinečnou \"hodnotou\", což umožňuje lepší organizaci a " "dynamickou reprezentaci vlastností produktu." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Atribut této hodnoty" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Konkrétní hodnota tohoto atributu" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1998,39 +2033,39 @@ msgstr "" " zobrazení. Obsahuje také funkci pro zpřístupnění alternativního textu pro " "obrázky." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2045,39 +2080,39 @@ msgstr "" " podrobností o akci a její propojení s příslušnými produkty. Integruje se s " "katalogem produktů, aby bylo možné určit položky, kterých se kampaň týká." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Název akce" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Propagace" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2089,23 +2124,23 @@ msgstr "" "operace, jako je přidávání a odebírání produktů, a také operace pro " "přidávání a odebírání více produktů najednou." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2120,19 +2155,19 @@ msgstr "" "zpracování typu souboru a cesty k uložení souborů dokumentů. Rozšiřuje " "funkčnost konkrétních mixinů a poskytuje další vlastní funkce." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2152,59 +2187,59 @@ msgstr "" " pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k " "uživateli, což usnadňuje personalizované zpracování dat." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Ulice" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Okres" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Město" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Země" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresa" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresy" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2220,71 +2255,71 @@ msgstr "" "existuje) a stavu jeho použití. Obsahuje funkce pro ověření platnosti a " "použití propagačního kódu na objednávku při zajištění splnění omezení." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy." -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit." -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2292,16 +2327,16 @@ msgstr "" "Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli " "však oba typy slev nebo žádný z nich." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2318,136 +2353,137 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " "administrátora se používá tabulkové zobrazení." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Uživatel" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Objednávka" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Do objednávky, která není v procesu vyřizování, nelze přidat produkty." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Nelze přidat více produktů, než je dostupné na skladě" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "Nelze odebrat produkty z objednávky, která není nevyřízená." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Uživatel bez zůstatku nemůže nakupovat se zůstatkem!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2455,14 +2491,14 @@ msgstr "" "bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno " "zákazníka, e-mail zákazníka, telefonní číslo zákazníka." -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Neplatný způsob platby: {payment_method} z {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2484,108 +2520,108 @@ msgstr "" "produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " "odkaz." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu." -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Název" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2601,15 +2637,15 @@ msgstr "" "veřejně viditelné. Obsahuje metodu pro generování adresy URL pro stažení " "aktiva, když je přidružená objednávka ve stavu dokončena." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Stáhnout" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2623,81 +2659,77 @@ msgstr "" "související produkt v objednávce a hodnocení přiřazené uživatelem. Třída " "využívá databázová pole k efektivnímu modelování a správě dat zpětné vazby." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba " "týká." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Hodnocení produktu" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "pro přidání zpětné vazby musíte uvést komentář, hodnocení a uuid produktu." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Chyba při vytváření promokódu: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontaktujte nás" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "O nás" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Potvrzení objednávky" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Ahoj %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2708,23 +2740,23 @@ msgstr "" "že jsme Vaši objednávku převzali do práce. Níže jsou uvedeny údaje o vaší " "objednávce:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Celkem" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Celková cena" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2733,28 +2765,28 @@ msgstr "" "V případě dotazů se obraťte na naši podporu na adrese " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "S pozdravem,
tým %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Všechna práva vyhrazena" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Dodaná objednávka" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Ahoj %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2763,7 +2795,7 @@ msgstr "" "Úspěšně jsme zpracovali vaši objednávku №%(order_uuid)s! Níže jsou uvedeny " "podrobnosti vaší objednávky:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2771,13 +2803,13 @@ msgstr "" "další\n" " informace" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Hodnota" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2786,26 +2818,26 @@ msgstr "" "V případě dotazů se můžete obrátit na naši podporu na adrese " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Klíč" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Přidat řádek" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Udělený propagační kód" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2813,8 +2845,8 @@ msgstr "" "Děkujeme, že jste s námi zůstali! Udělili jsme vám promocode\n" " pro" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2822,24 +2854,24 @@ msgstr "" "Děkujeme vám za vaši objednávku! S potěšením potvrzujeme váš nákup. Níže " "jsou uvedeny údaje o vaší objednávce:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Cena přepravy" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Vaše objednávka bude doručena na následující adresu:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "S pozdravem,
Tým %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2847,49 +2879,49 @@ msgstr "" "všechna práva\n" " vyhrazeno" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Jsou vyžadována data i časový limit" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontaktujte nás inicioval" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potvrzení objednávky" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Objednávka doručena" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode uděleno" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "K provedení této akce nemáte oprávnění." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Rozměry obrázku by neměly přesáhnout w{max_width} x h{max_height} pixelů." -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2897,7 +2929,7 @@ msgstr "" "Zpracuje požadavek na index mapy stránek a vrátí odpověď XML. Zajistí, aby " "odpověď obsahovala odpovídající hlavičku typu obsahu XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2907,16 +2939,16 @@ msgstr "" "požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " "hlavičku Content-Type pro XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Vrátí seznam podporovaných jazyků a odpovídajících informací." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Vrátí parametry webové stránky jako objekt JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2924,11 +2956,11 @@ msgstr "" "Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se" " zadaným klíčem a časovým limitem." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Zpracovává odeslání formuláře `contact us`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2936,15 +2968,15 @@ msgstr "" "Zpracovává požadavky na zpracování a ověřování adres URL z příchozích " "požadavků POST." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Zpracovává globální vyhledávací dotazy." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Řeší logiku nákupu jako firmy bez registrace." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2952,27 +2984,27 @@ msgstr "" "Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n" "Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid je povinné" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "objednávka musí být zaplacena před stažením digitálního aktiva." -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Objednaný produkt nemá produkt" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2980,7 +3012,7 @@ msgstr "" "Zpracovává požadavky na favicon webové stránky.\n" "Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2991,11 +3023,11 @@ msgstr "" "administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" " funkci `redirect` Djanga." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Vrací aktuální verzi systému eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3009,7 +3041,7 @@ msgstr "" "na základě aktuální akce, přizpůsobitelných oprávnění a formátů " "vykreslování." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3023,7 +3055,7 @@ msgstr "" "standardizovaný způsob zpracování požadavků a odpovědí pro data " "AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3039,7 +3071,7 @@ msgstr "" "konkrétních polí nebo získávání podrobných a zjednodušených informací v " "závislosti na požadavku." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3053,7 +3085,7 @@ msgstr "" "pro různé akce používá příslušné serializátory. Možnosti filtrování jsou " "poskytovány prostřednictvím DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3067,7 +3099,7 @@ msgstr "" "kategorie. Sada pohledů také vynucuje oprávnění, aby zajistila, že ke " "konkrétním datům budou mít přístup pouze oprávnění uživatelé." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3079,7 +3111,7 @@ msgstr "" "rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " "objekty Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3097,7 +3129,7 @@ msgstr "" "podrobností o produktu, uplatňování oprávnění a přístup k související zpětné" " vazbě produktu." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3111,7 +3143,7 @@ msgstr "" "různých akcí. Účelem této třídy je poskytnout zjednodušený přístup ke " "zdrojům souvisejícím s Vendorem prostřednictvím rámce Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3127,7 +3159,7 @@ msgstr "" "objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3145,7 +3177,7 @@ msgstr "" " Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a" " podle toho vynucuje oprávnění při interakci s daty objednávek." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3159,11 +3191,11 @@ msgstr "" " požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " "vazby na instance OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Spravuje operace související s obrázky produktů v aplikaci." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3171,15 +3203,15 @@ msgstr "" "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "akcí API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Představuje sadu zobrazení pro správu povýšení." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Zpracovává operace související s údaji o zásobách v systému." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3197,7 +3229,7 @@ msgstr "" "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "udělena výslovná oprávnění." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3211,12 +3243,12 @@ msgstr "" "přepisování serializátoru a zpracování oprávnění na základě kontextu " "požadavku." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ebe10c5db8ef908c6e18bf5e4d6d518258c9b8bb GIT binary patch literal 87103 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%0DC)>qdeCi=UQ(;)UYt#3 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 literal 0 HcmV?d00001 diff --git a/core/locale/da_DK/LC_MESSAGES/django.po b/engine/core/locale/da_DK/LC_MESSAGES/django.po similarity index 74% rename from core/locale/da_DK/LC_MESSAGES/django.po rename to engine/core/locale/da_DK/LC_MESSAGES/django.po index 9cf8f65a..75045ef0 100644 --- a/core/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/core/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unikt ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "Unikt ID bruges til sikkert at identificere ethvert databaseobjekt" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Er aktiv" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,158 +33,162 @@ msgstr "" "Hvis det er sat til false, kan dette objekt ikke ses af brugere uden den " "nødvendige tilladelse." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Oprettet" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Da objektet første gang dukkede op i databasen" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modificeret" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Hvornår objektet sidst blev redigeret" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Oversættelser" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Generelt" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relationer" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "Yderligere info" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Tidsstempler" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivér valgt %(verbose_name_plural)s." -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Udvalgte varer er blevet aktiveret!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgte %(verbose_name_plural)s." -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Udvalgte varer er blevet deaktiveret!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attributværdi" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attributværdier" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Billede" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Billeder" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Lager" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aktier" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Bestil produkter" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Børn" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfig" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Kerne" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Færdig" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Leverer" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Leveret" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Annulleret" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislykket" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Afventer" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accepteret" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Penge returneret" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Betaling" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Succesfuld" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache-I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -192,31 +196,31 @@ msgstr "" "Anvend kun en nøgle til at læse tilladte data fra cachen.\n" "Anvend nøgle, data og timeout med autentificering for at skrive data til cachen." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Få en liste over understøttede sprog" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Hent applikationens eksponerbare parametre" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Send en besked til supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Anmod om en CORSed URL. Kun https er tilladt." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Globalt søgepunkt til at søge på tværs af projektets tabeller" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Køb en ordre som virksomhed" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -224,139 +228,140 @@ msgstr "" "Køb en ordre som en virksomhed ved hjælp af de angivne `produkter` med " "`produkt_uuid` og `attributter`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Liste over alle attributgrupper (simpel visning)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Hent en enkelt attributgruppe (detaljeret visning)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Opret en attributgruppe" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Slet en attributgruppe" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Omskriv en eksisterende attributgruppe, der gemmer ikke-redigerbare " "attributter" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende attributgruppe og gem ikke-" "redigerbare felter" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Liste over alle attributter (simpel visning)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Hent en enkelt attribut (detaljeret visning)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Opret en attribut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Slet en attribut" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Liste over alle attributværdier (simpel visning)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Hent en enkelt attributværdi (detaljeret visning)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Opret en attributværdi" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Slet en attributværdi" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Omskriv en eksisterende attributværdi, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende attributværdi og gem ikke-redigerbare" " felter" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Liste over alle kategorier (enkel visning)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Hent en enkelt kategori (detaljeret visning)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Kategori UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Opret en kategori" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Slet en kategori" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO-meta-snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Returnerer et øjebliksbillede af kategoriens SEO-metadata" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Kategori UUID eller slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Liste over alle kategorier (enkel visning)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "For ikke-ansatte brugere er det kun deres egne ordrer, der returneres." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -365,35 +370,35 @@ msgstr "" "human_readable_id, order_products.product.name og " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrer ordrer med buy_time >= denne ISO 8601 datetime" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrer ordrer med buy_time <= denne ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrer efter nøjagtig ordre-UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrer efter nøjagtigt menneskeligt læsbart ordre-ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "Filtrer efter brugerens e-mail (case-insensitive exact match)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrer efter brugerens UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filtrer efter ordrestatus (case-insensitive substring match)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -403,37 +408,41 @@ msgstr "" "created, modified, buy_time, random. Præfiks med '-' for faldende rækkefølge" " (f.eks. '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Hent en enkelt kategori (detaljeret visning)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Bestil UUID eller menneskeligt læsbart id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Opret en attribut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Virker ikke for ikke-ansatte brugere." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Slet en attribut" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Omskriv en eksisterende kategori, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Købspris på bestillingstidspunktet" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -443,19 +452,19 @@ msgstr "" "ved hjælp af brugerens saldo; hvis `force_payment` bruges, igangsættes en " "transaktion." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "Køb en ordre uden at oprette en konto" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "afslutter ordrekøbet for en ikke-registreret bruger." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Tilføj et produkt til ordren" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -463,11 +472,11 @@ msgstr "" "Tilføjer et produkt til en ordre ved hjælp af de angivne `product_uuid` og " "`attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Tilføj en liste med produkter til bestilling, antal tæller ikke med" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -475,11 +484,11 @@ msgstr "" "Tilføjer en liste af produkter til en ordre ved hjælp af de angivne " "`product_uuid` og `attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Fjern et produkt fra ordren" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -487,11 +496,11 @@ msgstr "" "Fjerner et produkt fra en ordre ved hjælp af de angivne `product_uuid` og " "`attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Fjern et produkt fra ordren, mængderne tæller ikke med" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -499,83 +508,83 @@ msgstr "" "Fjerner en liste af produkter fra en ordre ved hjælp af de angivne " "`product_uuid` og `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Liste over alle attributter (simpel visning)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "For ikke-ansatte brugere er det kun deres egne ønskelister, der returneres." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Hent en enkelt attribut (detaljeret visning)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Opret en attribut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Virker ikke for ikke-ansatte brugere." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Slet en attribut" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Omskriv en eksisterende attribut, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende attribut og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Tilføj et produkt til ordren" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Tilføjer et produkt til en ønskeliste ved hjælp af den angivne " "`product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Fjern et produkt fra ønskelisten" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Fjerner et produkt fra en ønskeliste ved hjælp af den angivne " "`product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Tilføj mange produkter til ønskelisten" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Tilføjer mange produkter til en ønskeliste ved hjælp af de angivne " "`product_uuids`." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Fjern et produkt fra ordren" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Fjerner mange produkter fra en ønskeliste ved hjælp af de angivne " "`product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -595,15 +604,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Liste over alle produkter (enkel visning)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(præcis) Produkt-UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -611,546 +620,556 @@ msgstr "" "Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` for faldende. \n" "**Tilladt:** uuid, vurdering, navn, slug, oprettet, ændret, pris, tilfældig" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Hent et enkelt produkt (detaljeret visning)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Opret et produkt" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Opdater nogle felter i et eksisterende produkt og bevar ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Slet et produkt" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "viser alle tilladte tilbagemeldinger for et produkt" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øjebliksbillede af produktets SEO-metadata" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Angiv alle adresser" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Opret en ny adresse" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Slet en adresse" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Opdater en hel adresse" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Delvis opdatering af en adresse" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Automatisk udfyldning af adresseinput" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Rå dataforespørgselsstreng, tilføj venligst data fra geo-IP-slutpunkt" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrænser mængden af resultater, 1 < grænse < 10, standard: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "Vis alle tilbagemeldinger (enkel visning)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "Hent en enkelt feedback (detaljeret visning)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "skab en feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "Slet en tilbagemelding" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "omskriv en eksisterende feedback, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "liste alle ordre-produkt-relationer (simpel visning)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "Hent en enkelt ordre-produkt-relation (detaljeret visning)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "Opret en ny ordre-produkt-relation" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relation" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "delvist opdatere en eksisterende ordre-produkt-relation" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relation" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Liste over alle mærker (enkel visning)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Hent et enkelt mærke (detaljeret visning)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Brand UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Skab et brand" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Slet et brand" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Omskrivning af et eksisterende brand, der gemmer non-editables" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO-meta-snapshot for brand" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Liste over alle leverandører (enkel visning)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Hent en enkelt leverandør (detaljeret visning)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Opret en leverandør" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Slet en leverandør" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Omskriv en eksisterende leverandør, der gemmer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Vis alle produktbilleder (enkel visning)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Hent et enkelt produktbillede (detaljeret visning)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Skab et produktbillede" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Slet et produktbillede" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Omskriv et eksisterende produktbillede og gem ikke-redigerbare elementer" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Liste over alle kampagnekoder (enkel visning)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Hent en enkelt kampagnekode (detaljeret visning)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Opret en kampagnekode" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Slet en kampagnekode" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Omskriv en eksisterende kampagnekode og gem ikke-redigerbare koder" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Liste over alle kampagner (enkel visning)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Hent en enkelt forfremmelse (detaljeret visning)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Opret en kampagne" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Slet en forfremmelse" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Omskriv en eksisterende kampagne og gem ikke-redigerbare elementer" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Liste over alle aktier (enkel visning)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Hent et enkelt lager (detaljeret visning)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Opret en lagerpost" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Slet en lagerpost" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Omskriv en eksisterende lagerpost og gem ikke-redigerbare varer" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Liste over alle produkttags (enkel visning)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Hent et enkelt produkttag (detaljeret visning)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Opret et produkttag" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Slet et produkttag" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Omskriv et eksisterende produkttag og gem ikke-redigerbare ting" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Omskriv nogle felter i en eksisterende kategori og gem ikke-redigerbare " "felter" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Søg efter" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Navn" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Snegle" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min. pris" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maks. pris" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Egenskaber" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Mængde" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Snegl" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Er digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "VARENUMMER" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Der skal være en category_uuid for at bruge include_subcategories-flaget" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Søg (ID, produktnavn eller reservedelsnummer)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Købt efter (inklusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Købt før (inklusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Brugerens e-mail" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "Bruger UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Menneskeligt læsbart ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Forælder" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har mindst 1 produkt eller ej)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Niveau" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøgle til at lede efter i eller lægge i cachen" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data, der skal gemmes i cachen" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder for at lægge data i cachen" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Cachelagrede data" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Tilføj et produkt til ordren" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke fundet!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Fjern alle produkter fra ordren" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Køb en ordre" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Udfør en handling på en liste af produkter i ordren" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Fjern/tilføj" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Udfør en handling på en liste af produkter i ønskelisten" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Angiv venligst værdien `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke fundet!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Tilføj et produkt til ordren" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Køb en ordre" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1158,139 +1177,143 @@ msgstr "" "Send venligst attributterne som en streng formateret som " "attr1=værdi1,attr2=værdi2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Tilføj eller slet en feedback til ordreproduktet" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Handlingen skal være enten `add` eller `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Grænsen skal være mellem 1 og 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Egenskaber" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperede attributter" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper af attributter" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Mærker" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup-procentdel" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Hvilke attributter og værdier, der kan bruges til at filtrere denne " "kategori." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategori, hvis de er " "tilgængelige." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for denne kategori" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denne kategori" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverandører" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Længdegrad (X-koordinat)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Sådan gør du" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Vurderingsværdi fra 1 til 10, inklusive, eller 0, hvis den ikke er " "indstillet." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Meddelelser" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Faktureringsadresse" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1298,201 +1321,209 @@ msgstr "" "Leveringsadresse for denne ordre, lad den være tom, hvis den er den samme " "som faktureringsadressen, eller hvis den ikke er relevant" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Samlet pris for denne ordre" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Samlet antal produkter i ordren" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Er alle produkterne i ordren digitale?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Bestillinger" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Billed-URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributgrupper" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Pris" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Mængde" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antal tilbagemeldinger" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Rabatpris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkter" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Kampagner" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Ønskelister" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Produktmærker" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged kategorier" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriernes tags" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Projektets navn" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Virksomhedens e-mail" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Virksomhedens navn" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Virksomhedens adresse" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Virksomhedens telefonnummer" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'e-mail fra', nogle gange skal den bruges i stedet for værtsbrugerværdien" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "E-mail-værtsbruger" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maksimalt beløb til betaling" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimumsbeløb for betaling" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytiske data" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Data om reklamer" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfiguration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Sprogkode" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Sprogets navn" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Sprogflag, hvis det findes :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Få en liste over understøttede sprog" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Søgeresultater for produkter" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Søgeresultater for produkter" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1505,23 +1536,23 @@ msgstr "" "struktur. Dette kan være nyttigt til at kategorisere og styre attributter " "mere effektivt i et komplekst system." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Forælder til denne gruppe" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Overordnet attributgruppe" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Attributgruppens navn" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attributgruppe" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1540,49 +1571,49 @@ msgstr "" "begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer" " med tredjepartsleverandører." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " "leverandørens API-kommunikation" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Oplysninger om godkendelse" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Sælgerens markup-procentdel" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Navn på denne leverandør" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "Svarfil" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "leverandørens sidste behandlingssvar" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Leverandørens sti til integrationsfilen" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integrationsvej" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1597,27 +1628,27 @@ msgstr "" "operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" " af metadata til administrative formål." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1628,15 +1659,15 @@ msgstr "" "produkter. Den indeholder attributter til en intern tag-identifikator og et " "brugervenligt visningsnavn." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "Kategori-tag" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "Kategori-tags" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1658,51 +1689,51 @@ msgstr "" " angive navn, beskrivelse og hierarki for kategorier samt tildele " "attributter som billeder, tags eller prioritet." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Upload et billede, der repræsenterer denne kategori" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Kategori billede" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definer en markup-procentdel for produkter i denne kategori" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Forælder til denne kategori for at danne en hierarkisk struktur" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Giv et navn til denne kategori" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Tilføj en detaljeret beskrivelse af denne kategori" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Beskrivelse af kategori" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioritet" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1716,47 +1747,47 @@ msgstr "" " Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Varemærke" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1772,68 +1803,72 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Salgspris" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Tilknyttet produkt" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Den pris, der er betalt til sælgeren for dette produkt" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digital fil" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Systemets egenskaber" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1853,55 +1888,55 @@ msgstr "" " egenskaber for at forbedre ydeevnen. Den bruges til at definere og " "manipulere produktdata og tilhørende oplysninger i en applikation." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Produktets navn" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Varenummer" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1917,66 +1952,66 @@ msgstr "" "string, integer, float, boolean, array og object. Det giver mulighed for " "dynamisk og fleksibel datastrukturering." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Gruppe af denne attribut" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Streng" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Heltal" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flyder" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolsk" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type af attributtens værdi" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Værditype" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Navn på denne attribut" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Attributtens navn" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Hvilke attributter og værdier, der kan bruges til at filtrere denne " "kategori." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1987,19 +2022,19 @@ msgstr "" "mulighed for bedre organisering og dynamisk repræsentation af " "produktegenskaber." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribut for denne værdi" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Den specifikke værdi for denne attribut" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2013,39 +2048,39 @@ msgstr "" "specifikke produkter og bestemme deres visningsrækkefølge. Den indeholder " "også en tilgængelighedsfunktion med alternativ tekst til billederne." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Produktbillede" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2061,39 +2096,39 @@ msgstr "" "relevante produkter. Den integreres med produktkataloget for at bestemme de " "berørte varer i kampagnen." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2106,23 +2141,23 @@ msgstr "" "produkter samt operationer til at tilføje og fjerne flere produkter på én " "gang." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2138,19 +2173,19 @@ msgstr "" "dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " "giver yderligere brugerdefinerede funktioner." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2171,59 +2206,59 @@ msgstr "" "Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " "letter personlig datahåndtering." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresselinje" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Gade" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distrikt" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "By" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Land" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresse" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresser" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2239,72 +2274,72 @@ msgstr "" " for dens brug. Den indeholder funktionalitet til at validere og anvende " "kampagnekoden på en ordre og samtidig sikre, at begrænsningerne er opfyldt." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unik kode, der bruges af en bruger til at indløse en rabat" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2312,16 +2347,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2338,138 +2373,139 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" " tabelvisningen" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Bruger" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Køb tid" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Bestil" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "En bruger må kun have én afventende ordre ad gangen!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Du kan ikke tilføje flere produkter, end der er på lager" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2477,14 +2513,14 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2506,110 +2542,110 @@ msgstr "" "en download-URL for digitale produkter. Modellen integreres med Order- og " "Product-modellerne og gemmer en reference til dem." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Navn" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL til integrationen" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM'er" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2626,15 +2662,15 @@ msgstr "" "URL til download af aktivet, når den tilknyttede ordre har status som " "afsluttet." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Download" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Downloads" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2649,82 +2685,78 @@ msgstr "" "bruger databasefelter til effektivt at modellere og administrere " "feedbackdata." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Henviser til det specifikke produkt i en ordre, som denne feedback handler " "om" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Produktvurdering" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Du skal angive en kommentar, en vurdering og et produkt-uid for at tilføje " "feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Fejl under oprettelse af promokode: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Hjem" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt os" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Om os" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Ordrebekræftelse" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hej %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2734,23 +2766,23 @@ msgstr "" "Tak for din ordre #%(order.pk)s! Vi er glade for at kunne informere dig om, " "at vi har taget din ordre i brug. Nedenfor er detaljerne om din ordre:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "I alt" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Samlet pris" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2759,28 +2791,28 @@ msgstr "" "Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Med venlig hilsen,
teamet %(config.PROJECT_NAME)s." -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Alle rettigheder forbeholdes" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Order Delivered" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2789,7 +2821,7 @@ msgstr "" "Vi har behandlet din ordre №%(order_uuid)s! Nedenfor er detaljerne om din " "ordre:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2797,13 +2829,13 @@ msgstr "" "yderligere\n" " oplysninger" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Værdi" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2812,26 +2844,26 @@ msgstr "" "Hvis du har spørgsmål, er du velkommen til at kontakte vores support på " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Nøgle" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Tilføj række" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promokode tildelt" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2839,8 +2871,8 @@ msgstr "" "Tak, fordi du bor hos os! Vi har givet dig en promokode\n" " til" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2848,24 +2880,24 @@ msgstr "" "Tak for din bestilling! Vi er glade for at kunne bekræfte dit køb. Nedenfor " "er detaljerne om din ordre:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Forsendelsespris" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Din ordre vil blive leveret til følgende adresse:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "De bedste hilsner,
The %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2873,50 +2905,50 @@ msgstr "" "alle rettigheder\n" " forbeholdt" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data og timeout er påkrævet" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt os påbegyndt" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekræftelse" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode givet" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Du har ikke tilladelse til at udføre denne handling." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} " "pixels." -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2924,7 +2956,7 @@ msgstr "" "Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den " "sikrer, at svaret indeholder den passende indholdstypeheader for XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2934,17 +2966,17 @@ msgstr "" "behandler anmodningen, henter det relevante sitemap-detaljesvar og " "indstiller Content-Type-headeren til XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over understøttede sprog og de tilhørende oplysninger." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2952,11 +2984,11 @@ msgstr "" "Håndterer cache-operationer som f.eks. læsning og indstilling af cachedata " "med en specificeret nøgle og timeout." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Håndterer indsendelser af `kontakt os`-formularer." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2964,15 +2996,15 @@ msgstr "" "Håndterer anmodninger om behandling og validering af URL'er fra indgående " "POST-anmodninger." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Håndterer globale søgeforespørgsler." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2980,27 +3012,27 @@ msgstr "" "Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n" "Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrævet" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "Ordren skal betales, før det digitale aktiv downloades." -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3008,7 +3040,7 @@ msgstr "" "Håndterer anmodninger om et websteds favicon.\n" "Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3019,11 +3051,11 @@ msgstr "" "administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " "til at håndtere HTTP-omdirigeringen." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returnerer den aktuelle version af eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3037,7 +3069,7 @@ msgstr "" "understøttelse af dynamiske serializer-klasser baseret på den aktuelle " "handling, tilladelser, der kan tilpasses, og gengivelsesformater." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3051,7 +3083,7 @@ msgstr "" "API-lag og giver en standardiseret måde at behandle anmodninger og svar for " "AttributeGroup-data på." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3067,7 +3099,7 @@ msgstr "" "data, f.eks. filtrering efter specifikke felter eller hentning af " "detaljerede eller forenklede oplysninger afhængigt af anmodningen." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3081,7 +3113,7 @@ msgstr "" "mekanismer og bruger passende serializers til forskellige handlinger. " "Filtreringsfunktioner leveres gennem DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3095,7 +3127,7 @@ msgstr "" "serialisering af kategoridata. ViewSet håndhæver også tilladelser for at " "sikre, at kun autoriserede brugere kan få adgang til specifikke data." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3107,7 +3139,7 @@ msgstr "" "objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " "implementeringen af API-slutpunkter for Brand-objekter." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3125,7 +3157,7 @@ msgstr "" " til at hente produktoplysninger, anvende tilladelser og få adgang til " "relateret feedback om et produkt." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3140,7 +3172,7 @@ msgstr "" "strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-" "frameworket." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3157,7 +3189,7 @@ msgstr "" " basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " "forespørge på data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3176,7 +3208,7 @@ msgstr "" "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "overensstemmelse hermed, mens der interageres med ordredata." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3191,11 +3223,11 @@ msgstr "" "Derudover indeholder det en detaljeret handling til håndtering af feedback " "på OrderProduct-instanser." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Håndterer operationer relateret til produktbilleder i applikationen." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3203,15 +3235,15 @@ msgstr "" "Administrerer hentning og håndtering af PromoCode-instanser gennem " "forskellige API-handlinger." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Repræsenterer et visningssæt til håndtering af kampagner." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operationer relateret til lagerdata i systemet." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3229,7 +3261,7 @@ msgstr "" "integreret for at sikre, at brugere kun kan administrere deres egne " "ønskelister, medmindre der er givet eksplicitte tilladelser." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3243,12 +3275,12 @@ msgstr "" "omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " "af serializer og håndtering af tilladelser baseret på anmodningskonteksten." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..623464565533e5035b2908aa3f408073efadc62a GIT binary patch literal 92200 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Eindeutige ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Eindeutige ID wird zur sicheren Identifizierung jedes Datenbankobjekts " "verwendet" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Ist aktiv" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Wenn auf false gesetzt, kann dieses Objekt von Benutzern ohne die " "erforderliche Berechtigung nicht gesehen werden." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Erstellt" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Wann das Objekt zum ersten Mal in der Datenbank erschienen ist" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Geändert" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Wann das Objekt zuletzt bearbeitet wurde" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Übersetzungen" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Allgemein" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Beziehungen" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "Zusatzinfo" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadaten" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Zeitstempel" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s aktivieren" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Ausgewählte Artikel wurden aktiviert!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s deaktivieren" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Ausgewählte Artikel wurden deaktiviert!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attribut Wert" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attribut Werte" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Bild" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Lagerbestand" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Bestände" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Produkte bestellen" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Kinder" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfigurieren Sie" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Kern" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Fertige" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Bereitstellung von" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Geliefert" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Abgesagt" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Gescheitert" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Anhängig" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Angenommen" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Zurückgegebenes Geld" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Zahlung" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momente" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Erfolgreich" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,31 +198,31 @@ msgstr "" "Wenden Sie nur einen Schlüssel an, um erlaubte Daten aus dem Cache zu lesen.\n" "Schlüssel, Daten und Timeout mit Authentifizierung anwenden, um Daten in den Cache zu schreiben." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Eine Liste der unterstützten Sprachen abrufen" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Abrufen der exponierbaren Parameter der Anwendung" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Senden Sie eine Nachricht an das Support-Team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Globaler Suchendpunkt zur Abfrage aller Tabellen des Projekts" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Eine Bestellung als Unternehmen kaufen" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -226,143 +230,144 @@ msgstr "" "Kauf einer Bestellung als Unternehmen unter Verwendung der angegebenen " "\"Produkte\" mit \"product_uuid\" und \"Attributen\"." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Alle Attributgruppen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Abrufen einer einzelnen Attributgruppe (Detailansicht)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Erstellen einer Attributgruppe" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Löschen einer Attributgruppe" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Umschreiben einer bestehenden Attributgruppe mit Speicherung von Nicht-" "Editierbarkeit" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Attributgruppe, wobei nicht " "editierbare Felder gespeichert werden" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Alle Attribute auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Ein Attribut erstellen" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Ein Attribut löschen" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " "gespeichert werden" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Alle Attributwerte auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Abrufen eines einzelnen Attributwertes (Detailansicht)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Einen Attributwert erstellen" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Löschen eines Attributwertes" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Umschreiben eines vorhandenen Attributwerts mit Speicherung von Nicht-" "Editierbarkeit" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Umschreiben einiger Felder eines vorhandenen Attributwerts, wobei nicht " "bearbeitbare Daten gespeichert werden" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Alle Kategorien auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Kategorie UUID oder Slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Eine Kategorie erstellen" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Eine Kategorie löschen" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO-Meta-Schnappschuss" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Gibt einen Schnappschuss der SEO-Metadaten der Kategorie zurück" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Kategorie UUID oder Slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Alle Kategorien auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Bei Nicht-Mitarbeitern werden nur die eigenen Bestellungen zurückgeschickt." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -371,39 +376,39 @@ msgstr "" "human_readable_id, order_products.product.name und " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Aufträge mit Kaufzeitpunkt >= dieser ISO 8601-Datumszeit filtern" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Aufträge mit Kaufzeitpunkt <= dieser ISO 8601-Datumszeit filtern" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filter nach exakter UUID der Bestellung" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtern nach exakter, von Menschen lesbarer Bestell-ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filter nach der E-Mail des Benutzers (Groß-/Kleinschreibung nicht " "berücksichtigend, exakte Übereinstimmung)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filter nach der UUID des Benutzers" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filter nach Bestellstatus (Groß-/Kleinschreibung nicht berücksichtigende " "Teilstring-Übereinstimmung)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -413,38 +418,42 @@ msgstr "" "status, created, modified, buy_time, random. Präfix mit '-' für absteigend " "(z. B. '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Eine einzelne Kategorie abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Auftrag UUID oder menschenlesbare ID" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Ein Attribut erstellen" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Ein Attribut löschen" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -454,21 +463,21 @@ msgstr "" "wird der Kauf mit dem Guthaben des Benutzers abgeschlossen; bei Verwendung " "von \"force_payment\" wird eine Transaktion ausgelöst." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "eine Bestellung kaufen, ohne ein Konto anzulegen" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" "schließt den Kauf einer Bestellung für einen nicht registrierten Benutzer " "ab." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -476,13 +485,13 @@ msgstr "" "Fügt ein Produkt unter Verwendung der angegebenen `product_uuid` und " "`attributes` zu einer Bestellung hinzu." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Fügen Sie eine Liste der zu bestellenden Produkte hinzu, Mengen werden nicht" " gezählt" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -490,11 +499,11 @@ msgstr "" "Fügt einer Bestellung eine Liste von Produkten unter Verwendung der " "angegebenen `product_uuid` und `attributes` hinzu." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -502,12 +511,12 @@ msgstr "" "Entfernt ein Produkt aus einer Bestellung unter Verwendung der angegebenen " "`product_uuid` und `attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" "Ein Produkt aus der Bestellung entfernen, die Mengen werden nicht gezählt" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -515,85 +524,85 @@ msgstr "" "Entfernt eine Liste von Produkten aus einer Bestellung unter Verwendung der " "angegebenen `product_uuid` und `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Alle Attribute auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Bei Nicht-Mitarbeitern werden nur ihre eigenen Wunschlisten zurückgegeben." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Ein einzelnes Attribut abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Ein Attribut erstellen" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Funktioniert nicht für Benutzer, die nicht zum Personal gehören." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Ein Attribut löschen" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Umschreiben eines vorhandenen Attributs, wobei nicht editierbare Daten " "gespeichert werden" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Umschreiben einiger Felder eines vorhandenen Attributs, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Fügt ein Produkt mit der angegebenen `product_uuid` zu einer Wunschliste " "hinzu" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Ein Produkt von der Wunschliste entfernen" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Entfernt ein Produkt aus einer Wunschliste unter Verwendung der angegebenen " "`product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Viele Produkte auf den Wunschzettel setzen" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Fügt einer Wunschliste viele Produkte unter Verwendung der angegebenen " "`product_uuids` hinzu" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Entfernt viele Produkte aus einer Wunschliste unter Verwendung der " "angegebenen `product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -613,15 +622,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Alle Produkte auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(genaue) Produkt-UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -629,703 +638,717 @@ msgstr "" "Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. Präfix mit \"-\" für absteigend. \n" "**Erlaubt:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Produkt UUID oder Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Ein Produkt erstellen" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer" " Felder" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Einige Felder eines bestehenden Produkts aktualisieren, nicht editierbare " "Felder beibehalten" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Ein Produkt löschen" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "listet alle zulässigen Rückmeldungen für ein Produkt auf" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Gibt einen Schnappschuss der SEO-Metadaten des Produkts zurück" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Alle Adressen auflisten" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Eine einzelne Adresse abrufen" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Eine neue Adresse erstellen" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Eine Adresse löschen" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Eine ganze Adresse aktualisieren" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Teilweise Aktualisierung einer Adresse" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autovervollständigung der Adresseingabe" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" " -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " "it-it -l ja-jp -l kk-kz -l nl-nl -l pl -l pt-br -l ro-ro -l ru-ru -l zh-hans" -" -a core -a geo -a payments -a vibes_auth -a blog" +" -a core -a geo -a payments -a authv -a blog" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrenzt die Anzahl der Ergebnisse, 1 < Limit < 10, Standard: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "alle Rückmeldungen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "eine einzelne Rückmeldung abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "ein Feedback erstellen" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "eine Rückmeldung löschen" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "alle Bestell-Produkt-Beziehungen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "eine einzelne Auftrag-Produkt-Relation abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "eine neue Auftrag-Produkt-Beziehung erstellen" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Relation ersetzen" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "eine bestehende Auftrag-Produkt-Beziehung teilweise aktualisieren" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "eine Auftrag-Produkt-Beziehung löschen" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Alle Marken auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Abrufen einer einzelnen Marke (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Marke UUID oder Slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Eine Marke schaffen" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Eine Marke löschen" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO-Meta-Momentaufnahme für die Marke" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Alle Lieferanten auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Abruf eines einzelnen Lieferanten (Detailansicht)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Einen Verkäufer erstellen" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Einen Lieferanten löschen" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Alle Produktbilder auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Abrufen eines einzelnen Produktbildes (Detailansicht)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Ein Produktbild erstellen" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Ein Produktbild löschen" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Alle Promo-Codes auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Einen einzelnen Promo-Code abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Einen Promo-Code erstellen" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Einen Promo-Code löschen" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Alle Aktionen auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Abrufen einer einzelnen Aktion (Detailansicht)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Eine Werbeaktion erstellen" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Eine Aktion löschen" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Alle Bestände auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Abruf einer einzelnen Aktie (Detailansicht)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Einen Bestandssatz erstellen" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Löschen eines Bestandsdatensatzes" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Alle Produkt-Tags auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Ein einzelnes Produkt-Tag abrufen (detaillierte Ansicht)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Ein Produkt-Tag erstellen" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Ein Produkt-Tag löschen" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Eine bestehende Kategorie umschreiben und dabei Nicht-Editierbares speichern" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Umschreiben einiger Felder einer bestehenden Kategorie, um nicht editierbare" " Daten zu speichern" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Suche" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Name" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorien" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorien Schnecken" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Mindestpreis" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maximaler Preis" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Ist aktiv" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marke" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attribute" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Menge" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Schnecke" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Unterkategorien einbeziehen" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories" " zu verwenden" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Suche (ID, Produktname oder Teilenummer)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Gekauft nach (einschließlich)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Gekauft vor (einschließlich)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Benutzer-E-Mail" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Elternteil" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Ebene" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Im Cache zu speichernde Daten" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Zwischengespeicherte Daten" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Auftrag {order_uuid} nicht gefunden!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Alle Produkte aus der Bestellung entfernen" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Eine Bestellung kaufen" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Bitte geben Sie entweder order_uuid oder order_hr_id an - beide schließen " "sich gegenseitig aus!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Eine Aktion für eine Liste von Produkten in der Bestellung ausführen" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Entfernen/Hinzufügen" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Bitte geben Sie den Wert `wishlist_uuid` an." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nicht gefunden!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Eine Bestellung kaufen" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Bitte senden Sie die Attribute als String im Format attr1=wert1,attr2=wert2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Aktion muss entweder `Add` oder `remove` sein!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attribute" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gruppierte Attribute" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Gruppen von Attributen" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marken" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorien" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welche Attribute und Werte können für die Filterung dieser Kategorie " "verwendet werden." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Mindest- und Höchstpreise für Produkte in dieser Kategorie, sofern " "verfügbar." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags für diese Kategorie" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkte in dieser Kategorie" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Anbieter" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breitengrad (Y-Koordinate)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Längengrad (X-Koordinate)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Wie" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Bewertungswert von 1 bis einschließlich 10 oder 0, wenn nicht festgelegt." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Benachrichtigungen" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Rückmeldung" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Rechnungsadresse" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1333,201 +1356,209 @@ msgstr "" "Lieferadresse für diese Bestellung, leer lassen, wenn sie mit der " "Rechnungsadresse übereinstimmt oder nicht zutrifft" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Gesamtpreis für diese Bestellung" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Gesamtmenge der bestellten Produkte" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Sind alle Produkte in der Bestellung digital" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Bestellungen" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Bild URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marke" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribut-Gruppen" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Preis" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Menge" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Anzahl der Rückmeldungen" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Rabattierter Preis" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkte" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Werbeaktionen" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Wunschzettel" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Produkt-Tags" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Markierte Kategorien" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategorien'-Tags" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Name des Projekts" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Unternehmen E-Mail" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Name des Unternehmens" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adresse des Unternehmens" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Telefonnummer des Unternehmens" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "E-Mail von\", muss manchmal anstelle des Host-Benutzerwerts verwendet werden" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "E-Mail-Host-Benutzer" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Höchstbetrag für die Zahlung" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Mindestbetrag für die Zahlung" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytische Daten" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Advertisement data" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfiguration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Sprachcode" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Name der Sprache" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Sprachflagge, falls vorhanden :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Eine Liste der unterstützten Sprachen abrufen" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Suchergebnisse für Produkte" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Suchergebnisse für Produkte" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1540,23 +1571,23 @@ msgstr "" "eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in" " einem komplexen System effektiver zu kategorisieren und zu verwalten." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Elternteil dieser Gruppe" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Übergeordnete Attributgruppe" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attribut-Gruppe" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1575,51 +1606,51 @@ msgstr "" "verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich " "für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " "des Anbieters erforderlich sind" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informationen zur Authentifizierung" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " "bezogen werden" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Prozentualer Aufschlag des Lieferanten" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Name dieses Anbieters" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Name des Anbieters" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "Antwortdatei" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "die letzte Verarbeitungsantwort des Lieferanten" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Pfad der Integrationsdatei des Anbieters" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integrationspfad" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1634,27 +1665,27 @@ msgstr "" "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tag name" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1665,15 +1696,15 @@ msgstr "" "zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " "Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "Kategorie-Tag" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "Kategorie-Tags" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1696,53 +1727,53 @@ msgstr "" " Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Kategorie Bild" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" "Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "" "Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Übergeordnete Kategorie" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Name der Kategorie" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Geben Sie einen Namen für diese Kategorie an" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Beschreibung der Kategorie" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priorität" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1756,48 +1787,48 @@ msgstr "" "der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " "von markenbezogenen Daten innerhalb der Anwendung." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Markenname" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1813,69 +1844,73 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Zugehöriges Produkt" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "System-Attribute" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1897,56 +1932,56 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Teilnummer" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1963,66 +1998,66 @@ msgstr "" "Array und Object. Dies ermöglicht eine dynamische und flexible " "Datenstrukturierung." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Gruppe dieses Attributs" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Zeichenfolge" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Integer" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Schwimmer" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolesche" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Typ des Attributwerts" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Werttyp" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Name dieses Attributs" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Name des Attributs" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "ist filterbar" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Welche Attribute und Werte können für die Filterung dieser Kategorie " "verwendet werden." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2033,20 +2068,20 @@ msgstr "" "und ermöglicht so eine bessere Organisation und dynamische Darstellung der " "Produktmerkmale." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribut dieses Wertes" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "" "Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Der spezifische Wert für dieses Attribut" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2060,41 +2095,41 @@ msgstr "" "Produkten und der Festlegung ihrer Anzeigereihenfolge. Sie enthält auch eine" " Funktion zur Barrierefreiheit mit alternativem Text für die Bilder." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " "zu gewährleisten." -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Produktbild" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Produktbilder" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2111,39 +2146,39 @@ msgstr "" "Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" " Kampagne zu bestimmen." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Förderung" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2156,23 +2191,23 @@ msgstr "" "Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" " gleichzeitig." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2189,19 +2224,19 @@ msgstr "" " die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2223,59 +2258,59 @@ msgstr "" "ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " "personalisierte Datenverarbeitung erleichtert." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresszeile" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Straße" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Bezirk" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Stadt" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Land" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresse" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adressen" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2293,76 +2328,76 @@ msgstr "" "Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " "sichergestellt wird, dass die Einschränkungen eingehalten werden." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" "Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " "verwendet" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2370,16 +2405,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2397,143 +2432,144 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " "sollen; in der Admin-UI wird die Tabellenansicht verwendet" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Benutzer" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Bestellung" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in " "Bearbeitung ist." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar " "Minuten erneut." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2541,14 +2577,14 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2571,112 +2607,112 @@ msgstr "" "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt " "hat" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Name" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL der Integration" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2693,15 +2729,15 @@ msgstr "" " zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " "zugehörige Bestellung in einem abgeschlossenen Status befindet." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Herunterladen" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2716,82 +2752,78 @@ msgstr "" "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese" " Rückmeldung bezieht" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Produktbewertung" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Sie müssen einen Kommentar, eine Bewertung und eine Produktnummer angeben, " "um eine Bewertung abzugeben." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Fehler bei der Erstellung des Promocodes: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Startseite" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Über uns" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Bestätigung der Bestellung" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hallo %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2802,23 +2834,23 @@ msgstr "" "mitteilen zu können, dass wir Ihre Bestellung in Arbeit genommen haben. " "Nachfolgend finden Sie die Details Ihrer Bestellung:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Insgesamt" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Gesamtpreis" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2827,28 +2859,28 @@ msgstr "" "Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Mit freundlichen Grüßen,
das %(config.PROJECT_NAME)s-Team" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Alle Rechte vorbehalten" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Bestellung Geliefert" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2857,7 +2889,7 @@ msgstr "" "Wir haben Ihre Bestellung erfolgreich bearbeitet №%(order_uuid)s! " "Nachstehend finden Sie die Details Ihrer Bestellung:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2865,13 +2897,13 @@ msgstr "" "zusätzliche\n" " Informationen" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Wert" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2880,26 +2912,26 @@ msgstr "" "Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Schlüssel" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Zeile hinzufügen" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode granted" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2907,8 +2939,8 @@ msgstr "" "Danke, dass Sie bei uns bleiben! Wir haben Ihnen einen Promocode gewährt\n" " für" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2916,24 +2948,24 @@ msgstr "" "Vielen Dank für Ihre Bestellung! Wir freuen uns, Ihren Kauf zu bestätigen. " "Nachstehend finden Sie die Details Ihrer Bestellung:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Versandpreis" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Ihre Bestellung wird an die folgende Adresse geliefert:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Mit freundlichen Grüßen,
Das %(config.PROJECT_NAME)s-Team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2941,51 +2973,51 @@ msgstr "" "alle Rechte\n" " vorbehalten" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sowohl Daten als auch Timeout sind erforderlich" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | Kontakt eingeleitet" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Auftragsbestätigung" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestellung ausgeliefert" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Promocode gewährt" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " "überschreiten" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2994,7 +3026,7 @@ msgstr "" "zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" "Header für XML enthält." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3004,18 +3036,18 @@ msgstr "" "Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" "Detailantwort ab und setzt den Content-Type-Header für XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Gibt eine Liste der unterstützten Sprachen und der entsprechenden " "Informationen zurück." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Gibt die Parameter der Website als JSON-Objekt zurück." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3023,11 +3055,11 @@ msgstr "" "Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " "einem bestimmten Schlüssel und Timeout." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3035,15 +3067,15 @@ msgstr "" "Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " "eingehenden POST-Anfragen." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Bearbeitet globale Suchanfragen." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3051,29 +3083,29 @@ msgstr "" "Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n" "Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid ist erforderlich" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" "die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " "werden" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Das Bestellprodukt hat kein Produkt" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3081,7 +3113,7 @@ msgstr "" "Bearbeitet Anfragen nach dem Favicon einer Website.\n" "Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3092,11 +3124,11 @@ msgstr "" "Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " "Django für die Bearbeitung der HTTP-Umleitung." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Gibt die aktuelle Version von eVibes zurück." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3110,7 +3142,7 @@ msgstr "" "enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage " "der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3124,7 +3156,7 @@ msgstr "" "API-Schicht der Anwendung und bietet eine standardisierte Methode zur " "Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3141,7 +3173,7 @@ msgstr "" "oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach " "Anfrage." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3156,7 +3188,7 @@ msgstr "" " für verschiedene Aktionen. Filterfunktionen werden über das " "DjangoFilterBackend bereitgestellt." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3171,7 +3203,7 @@ msgstr "" "Berechtigungen, um sicherzustellen, dass nur autorisierte Benutzer auf " "bestimmte Daten zugreifen können." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3183,7 +3215,7 @@ msgstr "" "Objekten. Sie verwendet das ViewSet-Framework von Django, um die " "Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3202,7 +3234,7 @@ msgstr "" "zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige " "Rückmeldungen zu einem Produkt." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3217,7 +3249,7 @@ msgstr "" "dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" "Ressourcen über das Django REST-Framework." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3234,7 +3266,7 @@ msgstr "" "implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " "Filtersystem von Django zur Abfrage von Daten." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3254,7 +3286,7 @@ msgstr "" "basieren, die durchgeführt wird, und erzwingt die entsprechenden " "Berechtigungen, während es mit den Bestelldaten interagiert." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3269,12 +3301,12 @@ msgstr "" "Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" " zu OrderProduct-Instanzen" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3282,15 +3314,15 @@ msgstr "" "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "verschiedene API-Aktionen." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3309,7 +3341,7 @@ msgstr "" "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "Berechtigungen erteilt wurden." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3324,12 +3356,12 @@ msgstr "" "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "Berechtigungen auf der Grundlage des Anfragekontexts." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.mo b/engine/core/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2ed21f08106d2ef24db537e959781c02059354d0 GIT binary patch literal 83909 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 literal 0 HcmV?d00001 diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po similarity index 73% rename from core/locale/en_GB/LC_MESSAGES/django.po rename to engine/core/locale/en_GB/LC_MESSAGES/django.po index 284c4577..a71f9947 100644 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,19 +17,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "Unique ID is used to surely identify any database object" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Is Active" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -37,158 +37,162 @@ msgstr "" "If set to false, this object can't be seen by users without needed " "permission" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Created" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "When the object first appeared on the database" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modified" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "When the object was last edited" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Translations" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "additional info" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attribute Values" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Image" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Order Product" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Order Products" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Children" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Config" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Core" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Finished" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Delivering" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Delivered" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Canceled" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Failed" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Pending" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accepted" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Money Returned" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Payment" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Successful" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -196,31 +200,31 @@ msgstr "" "Apply only a key to read permitted data from cache.\n" "Apply key, data and timeout with authentication to write data to cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Get a list of supported languages" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Get application's exposable parameters" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Send a message to the support team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Global search endpoint to query across project's tables" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Purchase an order as a Business" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -228,129 +232,130 @@ msgstr "" "Purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "List all attribute groups (simple view)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Retrieve a single attribute group (detailed view)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Create an attribute group" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Delete an attribute group" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "Rewrite an existing attribute group saving non-editables" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rewrite some fields of an existing attribute group saving non-editables" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "List all attributes (simple view)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Retrieve a single attribute (detailed view)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Rewrite an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "Rewrite some fields of an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "List all attribute values (simple view)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Retrieve a single attribute value (detailed view)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Create an attribute value" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Delete an attribute value" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Rewrite an existing attribute value saving non-editables" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rewrite some fields of an existing attribute value saving non-editables" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "List all categories (simple view)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Retrieve a single category (detailed view)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "Create a category" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "Delete a category" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "SEO Meta snapshot" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "Returns a snapshot of the category's SEO meta data" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "Category UUID or slug" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "Create a category" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "Delete a category" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "Rewrite some fields of an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returns a snapshot of the category's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "List all categories (simple view)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "For non-staff users, only their own orders are returned." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -358,35 +363,35 @@ msgstr "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filter orders with buy_time >= this ISO 8601 datetime" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filter orders with buy_time <= this ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filter by exact order UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filter by exact human-readable order ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "Filter by user's email (case-insensitive exact match)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filter by user's UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filter by order status (case-insensitive substring match)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -396,35 +401,39 @@ msgstr "" " modified, buy_time, random. Prefix with '-' for descending (e.g. " "'-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Retrieve a single category (detailed view)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Order UUID or human-readable id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Doesn't work for non-staff users." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Rewrite an existing category saving non-editables" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "Rewrite some fields of an existing category saving non-editables" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Purchase price at order time" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -434,19 +443,19 @@ msgstr "" "completed using the user's balance; If `force_payment` is used, a " "transaction is initiated." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalizes the order purchase for a non-registered user." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Add a product to the order" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -454,11 +463,11 @@ msgstr "" "Adds a product to an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Add a list of products to order, quantities will not count" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -466,11 +475,11 @@ msgstr "" "Adds a list of products to an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Remove a product from the order" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -478,11 +487,11 @@ msgstr "" "Removes a product from an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Remove a product from order, quantities will not count" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -490,73 +499,73 @@ msgstr "" "Removes a list of products from an order using the provided `product_uuid` " "and `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "List all attributes (simple view)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "For non-staff users, only their own wishlists are returned." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Retrieve a single attribute (detailed view)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Doesn't work for non-staff users." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Rewrite an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "Rewrite some fields of an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Add a product to the order" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "Adds a product to an wishlist using the provided `product_uuid`" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Remove a product from the wishlist" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "Removes a product from an wishlist using the provided `product_uuid`" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Add many products to the wishlist" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "Adds many products to an wishlist using the provided `product_uuids`" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Remove a product from the order" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Removes many products from an wishlist using the provided `product_uuids`" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -576,15 +585,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, \n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "List all products (simple view)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -592,527 +601,537 @@ msgstr "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Update some fields of an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Delete a product" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returns a snapshot of the product's SEO meta data" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "List all addresses" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Create a new address" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Delete an address" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Update an entire address" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Partially update an address" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Raw data query string, please append with data from geo-IP endpoint" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limits the results amount, 1 < limit < 10, default: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "create a feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "delete a feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "rewrite some fields of an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "List all brands (simple view)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Retrieve a single brand (detailed view)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Brand UUID or slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Create a brand" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Delete a brand" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Rewrite an existing brand saving non-editables" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "Rewrite some fields of an existing brand saving non-editables" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot for brand" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "List all vendors (simple view)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Retrieve a single vendor (detailed view)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Create a vendor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Delete a vendor" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Rewrite an existing vendor saving non-editables" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "Rewrite some fields of an existing vendor saving non-editables" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "List all product images (simple view)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Retrieve a single product image (detailed view)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Create a product image" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Delete a product image" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "Rewrite an existing product image saving non-editables" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "Rewrite some fields of an existing product image saving non-editables" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "List all promo codes (simple view)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Retrieve a single promo code (detailed view)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Create a promo code" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Delete a promo code" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Rewrite an existing promo code saving non-editables" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "Rewrite some fields of an existing promo code saving non-editables" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "List all promotions (simple view)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Retrieve a single promotion (detailed view)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Create a promotion" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Delete a promotion" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Rewrite an existing promotion saving non-editables" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "Rewrite some fields of an existing promotion saving non-editables" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "List all stocks (simple view)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Retrieve a single stock (detailed view)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Create a stock record" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Delete a stock record" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Rewrite an existing stock record saving non-editables" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "Rewrite some fields of an existing stock record saving non-editables" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "List all product tags (simple view)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Retrieve a single product tag (detailed view)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Create a product tag" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Delete a product tag" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Rewrite an existing product tag saving non-editables" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "Rewrite some fields of an existing product tag saving non-editables" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Search" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Name" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categories" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Slug" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "User email" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Parent" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Level" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Cached data" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Add a product to the order" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Buy an order" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remove/Add" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Buy an order" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1120,134 +1139,138 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attributes" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grouped attributes" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groups of attributes" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Brands" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categories" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for this category" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Comment" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notifications" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Billing address" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1255,200 +1278,208 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Total price of this order" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Orders" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribute groups" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Price" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Quantity" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Discount price" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Products" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Product" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Wishlists" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Product tags" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged categories" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categories' tags" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Project name" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Company Email" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Company Name" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Company Address" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Company Phone Number" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Email host user" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytics data" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Advertisement data" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Language code" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Language name" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Get a list of supported languages" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Products search results" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Products search results" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1460,23 +1491,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1494,48 +1525,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "response file" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Vendor's integration file path" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integration path" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1549,27 +1580,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tag name" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Product tag" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1579,15 +1610,15 @@ msgstr "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "category tag" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "category tags" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1609,51 +1640,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Category image" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Parent category" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Category name" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Category description" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priority" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1667,47 +1698,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Brand name" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Brand description" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categories" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1723,68 +1754,72 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Selling price" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Associated product" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digital file" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "System attributes" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1804,55 +1839,55 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Product name" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Product description" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Part number" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1868,64 +1903,64 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "String" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Integer" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Float" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Object" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Value type" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "is filterable" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1935,19 +1970,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1961,39 +1996,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Product image" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Display priority" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Product images" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2009,39 +2044,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Included products" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promotion" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2053,23 +2088,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2085,19 +2120,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentary" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2117,59 +2152,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Address line" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Street" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "District" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "City" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postal code" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Country" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Address" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresses" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2185,71 +2220,71 @@ msgstr "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Promo code" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2257,16 +2292,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2282,135 +2317,136 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Order status" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "User" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Buy time" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Order" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2418,14 +2454,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2447,108 +2483,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Parent order" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Product line status" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Name" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2564,15 +2600,15 @@ msgstr "" " is publicly visible. It includes a method to generate a URL for downloading" " the asset when the associated order is in a completed status." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Download" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Downloads" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2586,80 +2622,76 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Related order product" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Product rating" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Error during promocode creation: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Contact Us" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "About Us" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Order Confirmation" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hello %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2669,23 +2701,23 @@ msgstr "" "Thank you for your order #%(order.pk)s! We are pleased to inform you that we" " have taken your order into work. Below are the details of your order:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Total Price" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2694,28 +2726,28 @@ msgstr "" "If you have any questions, feel free to contact our support at " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Best regards,
the %(config.PROJECT_NAME)s team" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "All rights reserved" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Order Delivered" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2724,7 +2756,7 @@ msgstr "" "We have successfully processed your order №%(order_uuid)s! Below are the " "details of your order:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2732,13 +2764,13 @@ msgstr "" "additional\n" " information" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Value" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2747,26 +2779,26 @@ msgstr "" "If you have any questions, feel free to contact our support at " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Key" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Add Row" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode granted" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2774,8 +2806,8 @@ msgstr "" "Thank you for staying with us! We have granted you with a promocode\n" " for" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2783,24 +2815,24 @@ msgstr "" "Thank you for your order! We are pleased to confirm your purchase. Below are" " the details of your order:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Shipping price" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Your order will be delivered to the following address:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Best regards,
The %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2808,49 +2840,49 @@ msgstr "" "All rights\n" " reserved" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "You do not have permission to perform this action." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2858,7 +2890,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2868,17 +2900,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2886,11 +2918,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2898,15 +2930,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Handles global search queries." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2914,27 +2946,27 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon not found" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2942,7 +2974,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2952,11 +2984,11 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2970,7 +3002,7 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2984,7 +3016,7 @@ msgstr "" "provides a standardized way to process requests and responses for " "AttributeGroup data." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3000,7 +3032,7 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3014,7 +3046,7 @@ msgstr "" "mechanisms and uses appropriate serializers for different actions. Filtering" " capabilities are provided through the DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3028,7 +3060,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3040,7 +3072,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3058,7 +3090,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3072,7 +3104,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3088,7 +3120,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3106,7 +3138,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3120,11 +3152,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3132,15 +3164,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3158,7 +3190,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3172,12 +3204,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b5379a1ec726b09301ebf4e6fa83394a9a63f1d7 GIT binary patch literal 83900 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 literal 0 HcmV?d00001 diff --git a/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po similarity index 73% rename from core/locale/en_US/LC_MESSAGES/django.po rename to engine/core/locale/en_US/LC_MESSAGES/django.po index a774b3e1..29727f21 100644 --- a/core/locale/en_US/LC_MESSAGES/django.po +++ b/engine/core/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "Unique ID is used to surely identify any database object" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Is Active" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,158 +33,162 @@ msgstr "" "If set to false, this object can't be seen by users without needed " "permission" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Created" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "When the object first appeared on the database" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modified" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "When the object was last edited" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Translations" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "additional info" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activate selected %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Selected items have been activated!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactivate selected %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Selected items have been deactivated!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attribute Value" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attribute Values" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Image" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Order Product" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Order Products" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Children" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Config" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Core" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Finished" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Delivering" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Delivered" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Canceled" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Failed" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Pending" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accepted" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Money Returned" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Payment" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Successful" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -192,31 +196,31 @@ msgstr "" "Apply only a key to read permitted data from cache.\n" "Apply key, data and timeout with authentication to write data to cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Get a list of supported languages" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Get application's exposable parameters" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Send a message to the support team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Global search endpoint to query across project's tables" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Purchase an order as a Business" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -224,129 +228,130 @@ msgstr "" "Purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "List all attribute groups (simple view)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Retrieve a single attribute group (detailed view)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Create an attribute group" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Delete an attribute group" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "Rewrite an existing attribute group saving non-editables" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rewrite some fields of an existing attribute group saving non-editables" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "List all attributes (simple view)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Retrieve a single attribute (detailed view)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Rewrite an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "Rewrite some fields of an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "List all attribute values (simple view)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Retrieve a single attribute value (detailed view)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Create an attribute value" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Delete an attribute value" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Rewrite an existing attribute value saving non-editables" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rewrite some fields of an existing attribute value saving non-editables" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "List all categories (simple view)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Retrieve a single category (detailed view)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "Create a category" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "Delete a category" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "Rewrite an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "Rewrite some fields of an existing category saving non-editables" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "SEO Meta snapshot" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "Returns a snapshot of the category's SEO meta data" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "Category UUID or slug" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "Create a category" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "Delete a category" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "Rewrite an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "Rewrite some fields of an existing category saving non-editables" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returns a snapshot of the category's SEO meta data" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "List all categories (simple view)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "For non-staff users, only their own orders are returned." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -354,35 +359,35 @@ msgstr "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filter orders with buy_time >= this ISO 8601 datetime" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filter orders with buy_time <= this ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filter by exact order UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filter by exact human-readable order ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "Filter by user's email (case-insensitive exact match)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filter by user's UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filter by order status (case-insensitive substring match)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -392,35 +397,39 @@ msgstr "" " modified, buy_time, random. Prefix with '-' for descending (e.g. " "'-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Retrieve a single category (detailed view)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Order UUID or human-readable id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Doesn't work for non-staff users." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Rewrite an existing category saving non-editables" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "Rewrite some fields of an existing category saving non-editables" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Purchase price at order time" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -430,19 +439,19 @@ msgstr "" "completed using the user's balance; If `force_payment` is used, a " "transaction is initiated." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalizes the order purchase for a non-registered user." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Add a product to the order" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -450,11 +459,11 @@ msgstr "" "Adds a product to an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Add a list of products to order, quantities will not count" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -462,11 +471,11 @@ msgstr "" "Adds a list of products to an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Remove a product from the order" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -474,11 +483,11 @@ msgstr "" "Removes a product from an order using the provided `product_uuid` and " "`attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Remove a product from order, quantities will not count" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -486,73 +495,73 @@ msgstr "" "Removes a list of products from an order using the provided `product_uuid` " "and `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "List all attributes (simple view)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "For non-staff users, only their own wishlists are returned." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Retrieve a single attribute (detailed view)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Create an attribute" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Doesn't work for non-staff users." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Delete an attribute" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Rewrite an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "Rewrite some fields of an existing attribute saving non-editables" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Add a product to the order" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "Adds a product to an wishlist using the provided `product_uuid`" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Remove a product from the wishlist" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "Removes a product from an wishlist using the provided `product_uuid`" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Add many products to the wishlist" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "Adds many products to an wishlist using the provided `product_uuids`" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Remove a product from the order" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Removes many products from an wishlist using the provided `product_uuids`" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -572,15 +581,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "List all products (simple view)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -588,527 +597,537 @@ msgstr "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Update some fields of an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Delete a product" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "lists all permitted feedbacks for a product" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returns a snapshot of the product's SEO meta data" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "List all addresses" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Retrieve a single address" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Create a new address" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Delete an address" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Update an entire address" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Partially update an address" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autocomplete address input" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Raw data query string, please append with data from geo-IP endpoint" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limits the results amount, 1 < limit < 10, default: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "list all feedbacks (simple view)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "retrieve a single feedback (detailed view)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "create a feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "delete a feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "rewrite an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "rewrite some fields of an existing feedback saving non-editables" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "list all order–product relations (simple view)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "retrieve a single order–product relation (detailed view)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "create a new order–product relation" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "replace an existing order–product relation" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "partially update an existing order–product relation" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "delete an order–product relation" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "List all brands (simple view)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Retrieve a single brand (detailed view)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Brand UUID or slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Create a brand" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Delete a brand" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Rewrite an existing brand saving non-editables" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "Rewrite some fields of an existing brand saving non-editables" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot for brand" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "List all vendors (simple view)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Retrieve a single vendor (detailed view)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Create a vendor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Delete a vendor" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Rewrite an existing vendor saving non-editables" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "Rewrite some fields of an existing vendor saving non-editables" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "List all product images (simple view)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Retrieve a single product image (detailed view)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Create a product image" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Delete a product image" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "Rewrite an existing product image saving non-editables" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "Rewrite some fields of an existing product image saving non-editables" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "List all promo codes (simple view)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Retrieve a single promo code (detailed view)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Create a promo code" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Delete a promo code" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Rewrite an existing promo code saving non-editables" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "Rewrite some fields of an existing promo code saving non-editables" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "List all promotions (simple view)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Retrieve a single promotion (detailed view)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Create a promotion" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Delete a promotion" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Rewrite an existing promotion saving non-editables" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "Rewrite some fields of an existing promotion saving non-editables" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "List all stocks (simple view)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Retrieve a single stock (detailed view)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Create a stock record" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Delete a stock record" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Rewrite an existing stock record saving non-editables" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "Rewrite some fields of an existing stock record saving non-editables" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "List all product tags (simple view)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Retrieve a single product tag (detailed view)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Create a product tag" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Delete a product tag" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Rewrite an existing product tag saving non-editables" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "Rewrite some fields of an existing product tag saving non-editables" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Search" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Name" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categories" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Slug" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "User email" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Parent" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Level" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Cached data" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Add a product to the order" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Buy an order" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remove/Add" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Buy an order" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1116,134 +1135,138 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attributes" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grouped attributes" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groups of attributes" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Brands" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categories" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "Which attributes and values can be used for filtering this category." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimum and maximum prices for products in this category, if available." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags for this category" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (Y coordinate)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (X coordinate)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "How to" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Rating value from 1 to 10, inclusive, or 0 if not set." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Represents feedback from a user." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notifications" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Billing address" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1251,200 +1274,208 @@ msgstr "" "Shipping address for this order, leave blank if same as billing address or " "if not applicable" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Total price of this order" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Total quantity of products in order" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Are all of the products in the order digital" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Orders" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribute groups" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Price" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Quantity" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Number of feedbacks" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Discount price" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Products" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Product" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Wishlists" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Product tags" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Tagged categories" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categories' tags" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Project name" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Company Email" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Company Name" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Company Address" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Company Phone Number" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', sometimes it must be used instead of host user value" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Email host user" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maximum amount for payment" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimum amount for payment" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytics data" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Advertisement data" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Language code" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Language name" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Language flag, if exists :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Get a list of supported languages" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Products search results" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Products search results" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1456,23 +1487,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1490,48 +1521,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "response file" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Vendor's integration file path" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integration path" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1545,27 +1576,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tag name" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Product tag" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1575,15 +1606,15 @@ msgstr "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "category tag" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "category tags" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1605,51 +1636,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Category image" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Parent category" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Category name" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Category description" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priority" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1663,47 +1694,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Brand name" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Brand description" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categories" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1719,68 +1750,72 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Selling price" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Associated product" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digital file" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "System attributes" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1800,55 +1835,55 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Product name" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Product description" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Part number" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1864,64 +1899,64 @@ msgstr "" " including string, integer, float, boolean, array, and object. This allows " "for dynamic and flexible data structuring." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Group of this attribute" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "String" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Integer" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Float" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Object" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type of the attribute's value" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Value type" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Name of this attribute" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "is filterable" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribute" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1931,19 +1966,19 @@ msgstr "" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribute of this value" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "The specific value for this attribute" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1957,39 +1992,39 @@ msgstr "" "determining their display order. It also includes an accessibility feature " "with alternative text for the images." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Product image" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Display priority" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Product images" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2005,39 +2040,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Included products" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promotion" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2049,23 +2084,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2081,19 +2116,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentary" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2113,59 +2148,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Address line" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Street" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "District" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "City" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postal code" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Country" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Address" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresses" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2181,71 +2216,71 @@ msgstr "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Promo code" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2253,16 +2288,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2278,135 +2313,136 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Order status" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "User" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Buy time" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Order" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2414,14 +2450,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2443,108 +2479,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Parent order" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Product line status" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Name" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2560,15 +2596,15 @@ msgstr "" " is publicly visible. It includes a method to generate a URL for downloading" " the asset when the associated order is in a completed status." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Download" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Downloads" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2582,80 +2618,76 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Related order product" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Product rating" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Error during promocode creation: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Contact Us" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "About Us" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Order Confirmation" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hello %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2665,23 +2697,23 @@ msgstr "" "Thank you for your order #%(order.pk)s! We are pleased to inform you that we" " have taken your order into work. Below are the details of your order:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Total Price" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2690,28 +2722,28 @@ msgstr "" "If you have any questions, feel free to contact our support at " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Best regards,
the %(config.PROJECT_NAME)s team" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "All rights reserved" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Order Delivered" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2720,7 +2752,7 @@ msgstr "" "We have successfully processed your order №%(order_uuid)s! Below are the " "details of your order:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2728,13 +2760,13 @@ msgstr "" "additional\n" " information" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Value" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2743,26 +2775,26 @@ msgstr "" "If you have any questions, feel free to contact our support at " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Key" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Add Row" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode granted" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2770,8 +2802,8 @@ msgstr "" "Thank you for staying with us! We have granted you with a promocode\n" " for" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2779,24 +2811,24 @@ msgstr "" "Thank you for your order! We are pleased to confirm your purchase. Below are" " the details of your order:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Shipping price" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Your order will be delivered to the following address:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Best regards,
The %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2804,49 +2836,49 @@ msgstr "" "all rights\n" " reserved" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contact us initiated" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Order Confirmation" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Order Delivered" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "You do not have permission to perform this action." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2854,7 +2886,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2864,17 +2896,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2882,11 +2914,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2894,15 +2926,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Handles global search queries." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2910,27 +2942,27 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon not found" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2938,7 +2970,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2948,11 +2980,11 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2966,7 +2998,7 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2980,7 +3012,7 @@ msgstr "" "provides a standardized way to process requests and responses for " "AttributeGroup data." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2996,7 +3028,7 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3010,7 +3042,7 @@ msgstr "" "mechanisms and uses appropriate serializers for different actions. Filtering" " capabilities are provided through the DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3024,7 +3056,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3036,7 +3068,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3054,7 +3086,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3068,7 +3100,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3084,7 +3116,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3102,7 +3134,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3116,11 +3148,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3128,15 +3160,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3154,7 +3186,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3168,12 +3200,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..013b8cc42a6bc0dbea6eb7e2010404c3d0d720d3 GIT binary patch literal 90218 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 WYde4a<~KL8wXnn58flFD!v6zP3^6?b literal 0 HcmV?d00001 diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/engine/core/locale/es_ES/LC_MESSAGES/django.po similarity index 75% rename from core/locale/es_ES/LC_MESSAGES/django.po rename to engine/core/locale/es_ES/LC_MESSAGES/django.po index 5f56c55d..5eae5ec4 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/core/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Identificación única" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "El identificador único se utiliza para identificar con seguridad cualquier " "objeto de la base de datos" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Está activo" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Si se establece en false, este objeto no puede ser visto por los usuarios " "sin el permiso necesario" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Creado" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Cuando el objeto apareció por primera vez en la base de datos" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modificado" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Cuándo se editó el objeto por última vez" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Traducciones" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "General" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relaciones" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "información adicional" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadatos" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Marcas de tiempo" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activar %(verbose_name_plural)s seleccionado" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Los artículos seleccionados se han activado." -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desactivar %(verbose_name_plural)s seleccionado" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Los artículos seleccionados se han desactivado." -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Atributo Valor" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Valores de los atributos" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Imagen" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imágenes" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Acciones" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Pedir productos" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Niños" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Configurar" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Núcleo" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Terminado" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "En" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Entregado" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Cancelado" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Fallido" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Pendiente" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Aceptado" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Dinero devuelto" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Pago" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momento" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Éxito" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "E/S de caché" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Aplicar sólo una clave para leer datos permitidos de la caché.\n" "Aplicar clave, datos y tiempo de espera con autenticación para escribir datos en la caché." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Obtener una lista de los idiomas admitidos" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Obtener los parámetros exponibles de la aplicación" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Enviar un mensaje al equipo de asistencia" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicitar una URL CORSed. Solo se permite https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Punto final de búsqueda global para consultar todas las tablas del proyecto" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Comprar un pedido como empresa" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,137 +231,138 @@ msgstr "" "Compra un pedido como empresa, utilizando los `productos` proporcionados con" " `product_uuid` y `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Lista de todos los grupos de atributos (vista simple)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Recuperar un único grupo de atributos (vista detallada)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Crear un grupo de atributos" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Eliminar un grupo de atributos" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "Reescribir un grupo de atributos existente guardando los no editables" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Reescribir algunos campos de un grupo de atributos existente guardando los " "no editables" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Listar todos los atributos (vista simple)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Recuperar un único atributo (vista detallada)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Crear un atributo" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Borrar un atributo" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Reescribir un atributo existente guardando los no editables" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Reescribir algunos campos de un atributo existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Listar todos los valores de atributos (vista simple)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Recuperar un único valor de atributo (vista detallada)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Crear un valor de atributo" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Borrar un valor de atributo" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Reescribir un valor de atributo existente guardando los no editables" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Reescribir algunos campos de un valor de atributo existente guardando los no" " editables" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Lista de todas las categorías (vista simple)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Recuperar una sola categoría (vista detallada)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "UUID o slug de la categoría" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Crear una categoría" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Eliminar una categoría" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Reescribir una categoría existente guardando los no editables" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Devuelve una instantánea de los metadatos SEO de la categoría" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "UUID o slug de la categoría" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Lista de todas las categorías (vista simple)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Para los usuarios que no forman parte del personal, sólo se devuelven sus " "propios pedidos." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -366,39 +371,39 @@ msgstr "" "human_readable_id, order_products.product.name y " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrar los pedidos con buy_time >= esta fecha ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrar pedidos con hora de compra <= esta fecha ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrar por UUID de pedido exacto" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrar por ID de pedido exacto legible por el ser humano" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrar por correo electrónico del usuario (coincidencia exacta insensible a" " mayúsculas y minúsculas)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrar por UUID de usuario" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrar por estado del pedido (coincidencia de subcadenas insensible a " "mayúsculas y minúsculas)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -408,37 +413,41 @@ msgstr "" "modified, buy_time, random. Utilice el prefijo '-' para orden descendente " "(por ejemplo, '-tiempo_compra')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Recuperar una sola categoría (vista detallada)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID del pedido o identificador legible" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Crear un atributo" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "No funciona para los usuarios que no son personal." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Borrar un atributo" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Reescribir una categoría existente guardando los no editables" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Precio de compra en el momento del pedido" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -448,19 +457,19 @@ msgstr "" "finaliza utilizando el saldo del usuario; Si se utiliza `force_payment`, se " "inicia una transacción." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "comprar un pedido sin crear una cuenta" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finaliza la compra del pedido para un usuario no registrado." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Añadir un producto al pedido" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -468,11 +477,11 @@ msgstr "" "Añade un producto a un pedido utilizando el `product_uuid` y los " "`attributes` proporcionados." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Añadir una lista de productos a la orden, las cantidades no contarán" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -480,11 +489,11 @@ msgstr "" "Añade una lista de productos a un pedido utilizando el `product_uuid` y los " "`attributes` proporcionados." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Eliminar un producto del pedido" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -492,11 +501,11 @@ msgstr "" "Elimina un producto de un pedido utilizando el `product_uuid` y los " "`attributes` proporcionados." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Eliminar un producto del pedido, las cantidades no contarán" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -504,84 +513,84 @@ msgstr "" "Elimina una lista de productos de un pedido utilizando el `product_uuid` y " "los `attributes` proporcionados." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Listar todos los atributos (vista simple)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Para los usuarios que no forman parte del personal, sólo se devuelven sus " "propias listas de deseos." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Recuperar un único atributo (vista detallada)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Crear un atributo" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "No funciona para los usuarios que no son personal." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Borrar un atributo" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Reescribir un atributo existente guardando los no editables" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Reescribir algunos campos de un atributo existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Añadir un producto al pedido" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Añade un producto a una lista de deseos utilizando el `product_uuid` " "proporcionado" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Eliminar un producto de la lista de deseos" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Elimina un producto de una lista de deseos utilizando el `product_uuid` " "proporcionado." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Añadir muchos productos a la lista de deseos" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Añade varios productos a una lista de deseos utilizando los `product_uuids` " "proporcionados." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Eliminar un producto del pedido" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Elimina varios productos de una lista de deseos utilizando los " "`product_uuids` proporcionados." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -601,15 +610,15 @@ msgstr "" "`color=rojo exacto`, `tamaño=gt-10`, `características=en-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Listar todos los productos (vista simple)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "UUID (exacto) del producto" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -617,551 +626,561 @@ msgstr "" "Lista separada por comas de campos por los que ordenar. Prefiérela con `-` para que sea descendente. \n" "**Permitido:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Recuperar un solo producto (vista detallada)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID o babosa del producto" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Crear un producto" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Reescribir un producto existente conservando los campos no editables" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Actualizar algunos campos de un producto existente, conservando los campos " "no editables" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Eliminar un producto" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "enumera todas las opiniones permitidas sobre un producto" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Devuelve una instantánea de los metadatos SEO del producto" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Enumerar todas las direcciones" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Recuperar una única dirección" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Crear una nueva dirección" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Borrar una dirección" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Actualizar una dirección completa" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Actualizar parcialmente una dirección" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autocompletar direcciones" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Cadena de consulta de datos sin procesar, adjunte los datos del punto final " "geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita la cantidad de resultados, 1 < límite < 10, por defecto: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "lista de todas las reacciones (vista simple)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar una sola respuesta (vista detallada)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "crear una retroalimentación" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "eliminar un comentario" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "reescribir una respuesta existente guardando los no editables" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "listar todas las relaciones pedido-producto (vista simple)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperar una única relación pedido-producto (vista detallada)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "crear una nueva relación pedido-producto" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "sustituir una relación pedido-producto existente" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "actualizar parcialmente una relación pedido-producto existente" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "suprimir una relación pedido-producto" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "añadir o eliminar comentarios en una relación pedido-producto" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Lista de todas las marcas (vista simple)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Recuperar una sola marca (vista detallada)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID o slug de la marca" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Crear una marca" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Borrar una marca" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Reescribir una marca existente ahorrando no editables" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot para la marca" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Listar todos los vendedores (vista simple)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperar un único proveedor (vista detallada)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Crear un proveedor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Eliminar un proveedor" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Reescribir un proveedor existente guardando los no editables" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Listar todas las imágenes de los productos (vista simple)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Recuperar una sola imagen del producto (vista detallada)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Crear una imagen del producto" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Eliminar la imagen de un producto" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Reescribir una imagen de producto existente guardando los no editables" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Listar todos los códigos promocionales (vista simple)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperar un único código promocional (vista detallada)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Crear un código promocional" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Eliminar un código promocional" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Reescribir un código promocional existente guardando los no editables" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Lista de todas las promociones (vista simple)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperar una sola promoción (vista detallada)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Crear una promoción" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Eliminar una promoción" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Reescribir una promoción existente guardando los no editables" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Listar todas las acciones (vista simple)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Recuperar una sola acción (vista detallada)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Crear una ficha de existencias" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Borrar una ficha de existencias" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Reescribir un registro de existencias existente guardando los no editables" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Listar todas las etiquetas de productos (vista simple)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperar una sola etiqueta de producto (vista detallada)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Crear una etiqueta de producto" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Eliminar una etiqueta de producto" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Reescribir una etiqueta de producto existente guardando los no editables" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Reescribir algunos campos de una categoría existente guardando los no " "editables" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Buscar en" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nombre" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categorías" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categorías Babosas" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Etiquetas" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Precio mínimo" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Precio máximo" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Está activo" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marca" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Cantidad" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Babosa" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Es Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Incluir subcategorías" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Debe haber un category_uuid para usar la bandera include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Búsqueda (ID, nombre del producto o número de pieza)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Comprado después (inclusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Correo electrónico del usuario" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID de usuario" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Estado" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Identificación legible" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Padres" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Toda la categoría (tenga o no al menos 1 producto)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Nivel" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID del producto" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clave que hay que buscar o introducir en la caché" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Datos a almacenar en caché" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tiempo de espera en segundos para poner los datos en la caché" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Datos en caché" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Añadir un producto al pedido" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} ¡no encontrado!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Eliminar todos los productos del pedido" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Comprar un pedido" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Realizar una acción en una lista de productos del pedido" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Quitar/Agregar" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Realizar una acción en una lista de productos de la lista de deseos" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Por favor, proporcione el valor `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de deseos {wishlist_uuid} ¡no encontrada!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Añadir un producto al pedido" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Comprar un pedido" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1169,138 +1188,142 @@ msgstr "" "Por favor, envíe los atributos como una cadena formateada como " "attr1=valor1,attr2=valor2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Añadir o eliminar un comentario para el pedido-producto" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "No se ha encontrado el producto {order_product_uuid}." -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "El límite debe estar entre 1 y 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Atributos" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atributos agrupados" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupos de atributos" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marcas" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorías" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Porcentaje de recargo" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Qué atributos y valores se pueden utilizar para filtrar esta categoría." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Precios mínimo y máximo de los productos de esta categoría, si están " "disponibles." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Etiquetas para esta categoría" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Productos de esta categoría" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendedores" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitud (coordenada Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitud (coordenada X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Cómo" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Valor de calificación de 1 a 10, ambos inclusive, o 0 si no está " "configurado." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notificaciones" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Comentarios" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Dirección de facturación" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1308,201 +1331,209 @@ msgstr "" "Dirección de envío para este pedido, dejar en blanco si es la misma que la " "de facturación o si no procede" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Precio total de este pedido" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Cantidad total de productos del pedido" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "¿Están todos los productos en el pedido digital" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Pedidos" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL de la imagen" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupos de atributos" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Precio" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Cantidad" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Número de reacciones" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Precio reducido" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Productos" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Códigos promocionales" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promociones" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Listas de deseos" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Etiquetas del producto" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorías" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Etiquetas de las categorías" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nombre del proyecto" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Correo electrónico de la empresa" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Nombre de la empresa" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Dirección de la empresa" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Teléfono de la empresa" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a veces debe utilizarse en lugar del valor del usuario host" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Correo electrónico del usuario anfitrión" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Importe máximo de pago" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Importe mínimo de pago" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Datos analíticos" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Datos publicitarios" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuración" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Código de idioma" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Nombre de la lengua" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Bandera de idioma, si existe :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Obtener una lista de los idiomas admitidos" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Resultados de la búsqueda de productos" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Resultados de la búsqueda de productos" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1515,23 +1546,23 @@ msgstr "" "Esto puede ser útil para categorizar y gestionar los atributos de manera más" " eficaz en un sistema complejo." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Padre de este grupo" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Grupo de atributos padre" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1550,51 +1581,51 @@ msgstr "" " restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " "que interactúan con proveedores externos." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Almacena las credenciales y los puntos finales necesarios para la " "comunicación API del proveedor" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Información de autenticación" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definir el margen de beneficio para los productos recuperados de este " "proveedor" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Porcentaje de margen del vendedor" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Nombre de este vendedor" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Nombre del vendedor" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "archivo de respuesta" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "última respuesta de procesamiento del proveedor" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Ruta del archivo de integración del proveedor" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Vía de integración" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1609,27 +1640,27 @@ msgstr "" "operaciones exportadas a través de mixins y proporciona personalización de " "metadatos con fines administrativos." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1640,15 +1671,15 @@ msgstr "" "clasificar productos. Incluye atributos para un identificador de etiqueta " "interno y un nombre de visualización fácil de usar." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "etiqueta de categoría" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "etiquetas de categoría" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1671,51 +1702,51 @@ msgstr "" "descripción y la jerarquía de las categorías, así como asignar atributos " "como imágenes, etiquetas o prioridad." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Cargar una imagen que represente esta categoría" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Categoría imagen" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definir un porcentaje de recargo para los productos de esta categoría" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Padre de esta categoría para formar una estructura jerárquica" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Categoría de padres" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Nombre de la categoría" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Indique un nombre para esta categoría" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Añadir una descripción detallada para esta categoría" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Descripción de la categoría" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioridad" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1729,47 +1760,47 @@ msgstr "" "Permite organizar y representar los datos relacionados con la marca dentro " "de la aplicación." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Marca" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categorías" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1786,68 +1817,72 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Producto asociado" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Atributos del sistema" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1869,55 +1904,55 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Número de pieza" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1933,65 +1968,65 @@ msgstr "" "enteros, flotantes, booleanos, matrices y objetos. Esto permite una " "estructuración dinámica y flexible de los datos." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Grupo de este atributo" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Cadena" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Entero" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flotador" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Booleano" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Matriz" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objeto" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Tipo del valor del atributo" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Nombre de este atributo" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Nombre del atributo" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "es filtrable" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Qué atributos y valores se pueden utilizar para filtrar esta categoría." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2001,19 +2036,19 @@ msgstr "" "Vincula el \"atributo\" a un \"valor\" único, lo que permite una mejor " "organización y representación dinámica de las características del producto." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Atributo de este valor" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "El valor específico de este atributo" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2027,40 +2062,40 @@ msgstr "" "específicos y determinar su orden de visualización. También incluye una " "función de accesibilidad con texto alternativo para las imágenes." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Proporcione un texto alternativo para la imagen en aras de la accesibilidad" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2076,39 +2111,39 @@ msgstr "" "promoción y vincularla a los productos aplicables. Se integra con el " "catálogo de productos para determinar los artículos afectados en la campaña." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promoción" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2121,23 +2156,23 @@ msgstr "" "productos, así como soportar operaciones para añadir y eliminar múltiples " "productos a la vez." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2153,19 +2188,19 @@ msgstr "" "de almacenamiento de los archivos documentales. Amplía la funcionalidad de " "mixins específicos y proporciona características personalizadas adicionales." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documental" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2187,59 +2222,59 @@ msgstr "" " clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Dirección" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Calle" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distrito" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Ciudad" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Región" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Promo code" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "País" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Dirección" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Direcciones" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2256,72 +2291,72 @@ msgstr "" "para validar y aplicar el código promocional a un pedido garantizando el " "cumplimiento de las restricciones." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Código único utilizado por un usuario para canjear un descuento" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Promo code" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2329,16 +2364,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "¡Tipo de descuento no válido para el código promocional {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2355,137 +2390,138 @@ msgstr "" " envío o facturación. Del mismo modo, la funcionalidad permite gestionar los" " productos en el ciclo de vida del pedido." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Estructura JSON de las notificaciones para mostrar a los usuarios, en la " "interfaz de administración se utiliza la vista de tabla." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Representación JSON de los atributos de la orden para esta orden" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Usuario" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Pida" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Un usuario sólo puede tener una orden pendiente a la vez." -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "No puede añadir productos a un pedido que no esté pendiente" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "No puede añadir más productos de los disponibles en stock" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "No puede eliminar productos de un pedido que no esté pendiente" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sólo puede comprar productos físicos con la dirección de envío especificada." -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "No puede comprar en este momento, por favor inténtelo de nuevo en unos " "minutos." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2493,14 +2529,14 @@ msgstr "" "no puede comprar sin registrarse, facilite la siguiente información: nombre " "del cliente, correo electrónico del cliente, número de teléfono del cliente" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2523,110 +2559,110 @@ msgstr "" "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" "El precio pagado por el cliente por este producto en el momento de la compra" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nombre" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL de la integración" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2643,15 +2679,15 @@ msgstr "" " para descargar el activo cuando el pedido asociado está en estado " "completado." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Descargar" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Descargas" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2667,82 +2703,78 @@ msgstr "" "clase utiliza campos de base de datos para modelar y gestionar eficazmente " "los datos de los comentarios." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Hace referencia al producto específico de un pedido sobre el que trata esta " "opinión" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Valoración del producto" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "debe proporcionar un comentario, una valoración y el uuid del producto " "solicitado para añadir comentarios." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Error durante la creación del promocode: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Inicio" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Contacte con nosotros" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Quiénes somos" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Confirmación de pedido" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logotipo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hola %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2752,23 +2784,23 @@ msgstr "" "¡Gracias por su pedido #%(order.pk)s! Nos complace informarle de que hemos " "recibido su pedido. A continuación encontrará los detalles de su pedido:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Precio total" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2777,28 +2809,28 @@ msgstr "" "Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " "servicio de asistencia en %(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Saludos cordiales,
el equipo %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Todos los derechos reservados" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Pedido entregado" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hola %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2807,7 +2839,7 @@ msgstr "" "¡Hemos procesado correctamente su pedido №%(order_uuid)s! A continuación " "encontrará los detalles de su pedido:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2815,13 +2847,13 @@ msgstr "" "información adicional\n" " información adicional" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Valor" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2830,26 +2862,26 @@ msgstr "" "Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " "servicio de asistencia en %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Clave" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Añadir fila" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode concedido" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2857,8 +2889,8 @@ msgstr "" "¡Gracias por quedarte con nosotros! Le hemos concedido un promocode\n" " para" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2866,24 +2898,24 @@ msgstr "" "Gracias por su pedido. Nos complace confirmarle su compra. A continuación " "encontrará los detalles de su pedido:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Precio del envío" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Su pedido se entregará en la siguiente dirección:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Saludos cordiales,
El equipo %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2891,51 +2923,51 @@ msgstr "" "todos los derechos\n" " reservados" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Tanto los datos como el tiempo de espera son necesarios" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contacto iniciado" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmación de pedido" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregado" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "No tiene permiso para realizar esta acción." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "El parámetro NOMINATIM_URL debe estar configurado." -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " "píxeles." -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2944,7 +2976,7 @@ msgstr "" " XML. Se asegura de que la respuesta incluya el encabezado de tipo de " "contenido apropiado para XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2954,18 +2986,18 @@ msgstr "" "función procesa la solicitud, obtiene la respuesta detallada del mapa del " "sitio y establece el encabezado Content-Type para XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Devuelve una lista de los idiomas admitidos y su información " "correspondiente." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Devuelve los parámetros del sitio web como un objeto JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2973,11 +3005,11 @@ msgstr "" "Gestiona las operaciones de caché, como la lectura y el establecimiento de " "datos de caché con una clave y un tiempo de espera especificados." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Gestiona los formularios de contacto." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2985,15 +3017,15 @@ msgstr "" "Gestiona las solicitudes de procesamiento y validación de URL de las " "solicitudes POST entrantes." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Gestiona las consultas de búsqueda global." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Maneja la lógica de la compra como empresa sin registro." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3001,27 +3033,27 @@ msgstr "" "Gestiona la descarga de un activo digital asociado a un pedido.\n" "Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid es obligatorio" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "el pedido debe pagarse antes de descargar el activo digital" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "El producto del pedido no tiene un producto" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon no encontrado" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3029,7 +3061,7 @@ msgstr "" "Gestiona las peticiones del favicon de un sitio web.\n" "Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3040,11 +3072,11 @@ msgstr "" "de la interfaz de administración de Django. Utiliza la función `redirect` de" " Django para gestionar la redirección HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Devuelve la versión actual del eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3058,7 +3090,7 @@ msgstr "" "Incluye soporte para clases serializadoras dinámicas basadas en la acción " "actual, permisos personalizables y formatos de representación." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3072,7 +3104,7 @@ msgstr "" " de la aplicación y proporciona una forma estandarizada de procesar las " "solicitudes y respuestas de los datos de AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3089,7 +3121,7 @@ msgstr "" "específicos o la recuperación de información detallada o simplificada en " "función de la solicitud." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3104,7 +3136,7 @@ msgstr "" "acciones. Las capacidades de filtrado se proporcionan a través de " "DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3118,7 +3150,7 @@ msgstr "" "de categorías. El conjunto de vistas también aplica permisos para garantizar" " que sólo los usuarios autorizados puedan acceder a datos específicos." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3130,7 +3162,7 @@ msgstr "" " Brand. Utiliza el marco ViewSet de Django para simplificar la " "implementación de puntos finales de API para objetos Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3149,7 +3181,7 @@ msgstr "" "producto, aplicar permisos y acceder a comentarios relacionados de un " "producto." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3164,7 +3196,7 @@ msgstr "" "proporcionar un acceso simplificado a los recursos relacionados con el " "vendedor a través del marco REST de Django." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3181,7 +3213,7 @@ msgstr "" "objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" " sistema de filtrado de Django para la consulta de datos." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3200,7 +3232,7 @@ msgstr "" "acción específica que se esté realizando y aplica los permisos " "correspondientes al interactuar con los datos del pedido." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3215,13 +3247,13 @@ msgstr "" "Además, proporciona una acción detallada para gestionar los comentarios " "sobre las instancias de OrderProduct." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestiona las operaciones relacionadas con las imágenes de productos en la " "aplicación." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3229,16 +3261,16 @@ msgstr "" "Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "varias acciones de la API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Representa un conjunto de vistas para gestionar promociones." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestiona las operaciones relacionadas con los datos de Stock en el sistema." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3257,7 +3289,7 @@ msgstr "" "integrados para garantizar que los usuarios sólo puedan gestionar sus " "propias listas de deseos a menos que se concedan permisos explícitos." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3271,12 +3303,12 @@ msgstr "" "comportamientos especializados para diferentes métodos HTTP, anulaciones del" " serializador y gestión de permisos basada en el contexto de la solicitud." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/payments/locale/fa_IR/LC_MESSAGES/django.mo b/engine/core/locale/fa_IR/LC_MESSAGES/django.mo similarity index 100% rename from payments/locale/fa_IR/LC_MESSAGES/django.mo rename to engine/core/locale/fa_IR/LC_MESSAGES/django.mo diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po similarity index 62% rename from core/locale/hr_HR/LC_MESSAGES/django.po rename to engine/core/locale/fa_IR/LC_MESSAGES/django.po index 7b5c45d6..a4091592 100644 --- a/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,518 +16,526 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 msgid "failed" msgstr "" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "rewrite some fields of an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "rewrite some fields of an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, order_products." "product.name, and order_products.product.partnumber" msgstr "" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created, " "modified, buy_time, random. Prefix with '-' for descending (e.g. '-" "buy_time')." msgstr "" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -544,871 +552,893 @@ msgid "" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1416,23 +1446,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1443,47 +1473,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1492,42 +1522,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1540,51 +1570,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1592,47 +1622,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1642,67 +1672,72 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:526 core/models.py:779 core/models.py:825 core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1714,55 +1749,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1772,83 +1807,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It " "links the 'attribute' to a unique 'value', allowing better organization and " "dynamic representation of product characteristics." msgstr "" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1857,39 +1892,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1899,39 +1934,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1939,23 +1974,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1965,19 +2000,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1989,59 +2024,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2051,86 +2086,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2140,144 +2175,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2290,108 +2326,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2401,15 +2437,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2418,77 +2454,73 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2497,220 +2529,220 @@ msgid "" " order:" msgstr "" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below " "are\n" " the details of your order:" msgstr "" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2718,27 +2750,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2746,18 +2778,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2766,7 +2798,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2774,7 +2806,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2784,7 +2816,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2793,7 +2825,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2802,7 +2834,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2810,7 +2842,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2821,7 +2853,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2830,7 +2862,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2840,7 +2872,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2851,7 +2883,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2860,25 +2892,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2889,7 +2921,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2898,12 +2930,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbaeda4734cfdd9a56e4166ac734dbabbf594ec7 GIT binary patch literal 92971 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unique ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "L'identifiant unique est utilisé pour identifier de manière sûre tout objet " "de la base de données." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Est actif" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Si la valeur est fixée à false, cet objet ne peut pas être vu par les " "utilisateurs qui n'ont pas l'autorisation nécessaire." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Créée" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Date de la première apparition de l'objet dans la base de données" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modifié" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Date de la dernière modification de l'objet" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Traductions" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Général" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relations" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "Informations complémentaires" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Métadonnées" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Horodatage" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activer la %(verbose_name_plural)s sélectionnée" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Les articles sélectionnés ont été activés !" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Désactiver la %(verbose_name_plural)s sélectionnée" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Les articles sélectionnés ont été désactivés !" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Valeur de l'attribut" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Valeurs des attributs" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Image" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Images" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Commander des produits" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Les enfants" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Config" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Cœur de métier" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Fini" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Délivrer" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Livré" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Annulé" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Échec" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "En attente" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accepté" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Argent restitué" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Paiement" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Réussite" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Appliquer uniquement une clé pour lire les données autorisées dans la mémoire cache.\n" "Appliquer une clé, des données et un délai d'attente avec authentification pour écrire des données dans la mémoire cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Obtenir la liste des langues prises en charge" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Obtenir les paramètres exposables de l'application" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Envoyer un message à l'équipe d'assistance" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Demander une URL CORSée. Seul https est autorisé." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Point d'arrivée de la recherche globale pour interroger les tables du projet" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Acheter une commande en tant qu'entreprise" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,142 +231,143 @@ msgstr "" "Acheter une commande en tant qu'entreprise, en utilisant les `produits` " "fournis avec `product_uuid` et `attributs`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Liste de tous les groupes d'attributs (vue simple)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Récupérer un seul groupe d'attributs (vue détaillée)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Créer un groupe d'attributs" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Supprimer un groupe d'attributs" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Réécrire un groupe d'attributs existant en sauvegardant les éléments non " "modifiables" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Réécrire certains champs d'un groupe d'attributs existant en sauvegardant " "les non-éditables" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Liste de tous les attributs (vue simple)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Récupérer un seul attribut (vue détaillée)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Créer un attribut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Supprimer un attribut" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Réécrire un attribut existant en sauvegardant les éléments non modifiables" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Réécrire certains champs d'un attribut existant en sauvegardant les éléments" " non modifiables" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Liste de toutes les valeurs d'attributs (vue simple)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Récupérer une seule valeur d'attribut (vue détaillée)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Créer une valeur d'attribut" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Supprimer une valeur d'attribut" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Réécrire une valeur d'attribut existante en sauvegardant les éléments non " "modifiables" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Réécrire certains champs d'une valeur d'attribut existante en sauvegardant " "les éléments non modifiables" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Liste de toutes les catégories (vue simple)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Récupérer une seule catégorie (vue détaillée)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Catégorie UUID ou slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Créer une catégorie" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Supprimer une catégorie" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Méta snapshot SEO" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Renvoie un instantané des métadonnées SEO de la catégorie." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Catégorie UUID ou slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Liste de toutes les catégories (vue simple)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Pour les utilisateurs non fonctionnaires, seules leurs propres commandes " "sont renvoyées." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -370,39 +375,39 @@ msgstr "" "Recherche insensible à la casse dans human_readable_id, " "order_products.product.name, et order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrer les commandes dont l'heure d'achat est >= cette date ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrer les commandes avec buy_time <= this ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtre sur l'UUID exact de l'ordre" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtre sur l'identifiant exact de la commande, lisible par l'homme" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtre sur l'adresse électronique de l'utilisateur (correspondance exacte " "insensible à la casse)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrer par UUID de l'utilisateur" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtre sur l'état de la commande (correspondance insensible aux majuscules " "et aux minuscules)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -412,37 +417,41 @@ msgstr "" "user_email, user, status, created, modified, buy_time, random. Préfixer avec" " '-' pour l'ordre décroissant (par exemple '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Récupérer une seule catégorie (vue détaillée)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID de la commande ou identifiant lisible par l'homme" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Créer un attribut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Supprimer un attribut" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Réécrire une catégorie existante en sauvegardant les non-éditables" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Prix d'achat au moment de la commande" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -452,19 +461,19 @@ msgstr "" " complété en utilisant le solde de l'utilisateur ; Si `force_payment` est " "utilisé, une transaction est initiée." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "acheter une commande sans créer de compte" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalise l'achat d'une commande pour un utilisateur non enregistré." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Ajouter un produit à la commande" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -472,13 +481,13 @@ msgstr "" "Ajoute un produit à une commande en utilisant le `product_uuid` et les " "`attributs` fournis." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Ajouter une liste de produits à la commande, les quantités ne seront pas " "prises en compte" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -486,11 +495,11 @@ msgstr "" "Ajoute une liste de produits à une commande en utilisant le `product_uuid` " "et les `attributs` fournis." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Supprimer un produit de la commande" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -498,13 +507,13 @@ msgstr "" "Supprime un produit d'une commande en utilisant le `product_uuid` et les " "`attributs` fournis." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" "Retirer un produit de la commande, les quantités ne seront pas prises en " "compte" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -512,85 +521,85 @@ msgstr "" "Supprime une liste de produits d'une commande en utilisant le `product_uuid`" " et les `attributs` fournis." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Liste de tous les attributs (vue simple)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Pour les utilisateurs non fonctionnaires, seules leurs propres listes de " "souhaits sont renvoyées." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Récupérer un seul attribut (vue détaillée)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Créer un attribut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Ne fonctionne pas pour les utilisateurs non fonctionnaires." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Supprimer un attribut" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Réécrire un attribut existant en sauvegardant les éléments non modifiables" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Réécrire certains champs d'un attribut existant en sauvegardant les éléments" " non modifiables" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Ajouter un produit à la commande" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Ajoute un produit à une liste de souhaits en utilisant le `product_uuid` " "fourni" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Supprimer un produit de la liste de souhaits" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Supprime un produit d'une liste de souhaits en utilisant l'identifiant " "`product_uuid` fourni." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Ajouter plusieurs produits à la liste de souhaits" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Ajoute plusieurs produits à une liste de souhaits en utilisant les " "`product_uuids` fournis" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Supprimer un produit de la commande" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Supprime plusieurs produits d'une liste de souhaits en utilisant les " "`product_uuids` fournis" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -610,15 +619,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Liste de tous les produits (vue simple)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "UUID (exact) du produit" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -626,564 +635,574 @@ msgstr "" "Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un tri descendant. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Récupérer un seul produit (vue détaillée)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID ou Slug du produit" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Créer un produit" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Réécrire un produit existant en préservant les champs non modifiables" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Mettre à jour certains champs d'un produit existant, en préservant les " "champs non modifiables" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Supprimer un produit" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "liste tous les commentaires autorisés pour un produit" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Renvoie un instantané des métadonnées SEO du produit" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Liste de toutes les adresses" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Récupérer une seule adresse" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Créer une nouvelle adresse" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Supprimer une adresse" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Mise à jour d'une adresse entière" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Mise à jour partielle d'une adresse" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Saisie automatique des adresses" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Chaîne de requête de données brutes, à compléter avec les données du point " "d'extrémité géo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limite la quantité de résultats, 1 < limite < 10, par défaut : 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "liste de tous les commentaires (vue simple)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "récupérer un seul retour d'information (vue détaillée)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "créer un retour d'information" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "supprimer un feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "réécrire un feedback existant en sauvegardant les éléments non modifiables" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "lister toutes les relations commande-produit (vue simple)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "récupérer une seule relation commande-produit (vue détaillée)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "créer une nouvelle relation commande-produit" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "remplacer une relation commande-produit existante" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "mettre à jour partiellement une relation commande-produit existante" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "supprimer une relation commande-produit" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Liste de toutes les marques (vue simple)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Récupérer une seule marque (vue détaillée)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID ou slug de la marque" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Créer une marque" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Supprimer une marque" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Réécrire une marque existante en sauvegardant les non-éditables" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "Meta snapshot SEO pour la marque" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Liste de tous les fournisseurs (vue simple)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Récupérer un seul fournisseur (vue détaillée)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Créer un fournisseur" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Supprimer un fournisseur" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Réécrire un vendeur existant en sauvegardant les éléments non modifiables" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Liste de toutes les images de produits (vue simple)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Récupérer l'image d'un seul produit (vue détaillée)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Créer une image du produit" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Supprimer une image de produit" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Réécrire l'image d'un produit existant en sauvegardant les éléments non " "modifiables" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Liste de tous les codes promo (vue simple)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Récupérer un seul code promo (vue détaillée)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Créer un code promo" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Supprimer un code promo" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Réécrire un code promo existant en sauvegardant les non-éditables" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Liste de toutes les promotions (vue simple)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Récupérer une seule promotion (vue détaillée)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Créer une promotion" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Supprimer une promotion" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Réécrire une promotion existante en sauvegardant les éléments non " "modifiables" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Liste de toutes les actions (vue simple)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Récupérer une seule action (vue détaillée)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Créer une fiche de stock" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Supprimer une fiche de stock" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Réécrire une fiche de stock existante en sauvegardant les éléments non " "modifiables" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Liste de toutes les étiquettes de produits (vue simple)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Récupérer une seule étiquette de produit (vue détaillée)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Créer une étiquette de produit" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Supprimer une étiquette de produit" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Réécrire une étiquette de produit existante en sauvegardant les éléments non" " modifiables" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Réécrire certains champs d'une catégorie existante en sauvegardant les non-" "éditables" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Recherche" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nom" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Catégories" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Catégories Limaces" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Prix minimum" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Prix maximum" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Est actif" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marque" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attributs" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Quantité" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Limace" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Inclure des sous-catégories" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Inclure les produits commandés par les particuliers" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Il doit y avoir un category_uuid pour utiliser le drapeau " "include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Recherche (ID, nom du produit ou numéro de pièce)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Acheté après (inclus)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Acheté avant (inclus)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Courriel de l'utilisateur" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID de l'utilisateur" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Statut" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "ID lisible par l'homme" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Parent" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Catégorie entière (avec au moins 1 produit ou non)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Niveau" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID du produit" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clé à rechercher ou à insérer dans la cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Données à stocker dans la mémoire cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Délai d'attente en secondes pour placer les données dans le cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Données mises en cache" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Ajouter un produit à la commande" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} introuvable !" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Supprimer tous les produits de la commande" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Acheter une commande" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Veuillez fournir soit order_uuid, soit order_hr_id - les deux s'excluent " "mutuellement !" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Le mauvais type provient de la méthode order.buy() : {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Effectuer une action sur une liste de produits dans la commande" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Supprimer/Ajouter" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Effectuer une action sur une liste de produits dans la liste de souhaits" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Veuillez indiquer la valeur de `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} introuvable !" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Ajouter un produit à la commande" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Acheter une commande" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1191,139 +1210,143 @@ msgstr "" "Veuillez envoyer les attributs sous la forme d'une chaîne formatée comme " "attr1=valeur1,attr2=valeur2." -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "L'action doit être soit `add` soit `remove` !" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Le produit {order_product_uuid} n'a pas été trouvé !" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "La limite doit être comprise entre 1 et 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attributs" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Attributs groupés" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groupes d'attributs" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marques" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Catégories" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Markup Percentage" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quels attributs et valeurs peuvent être utilisés pour filtrer cette " "catégorie." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prix minimum et maximum pour les produits de cette catégorie, s'ils sont " "disponibles." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags pour cette catégorie" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produits dans cette catégorie" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendeurs" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordonnée Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (coordonnée X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Comment" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valeur d'évaluation de 1 à 10 inclus, ou 0 si elle n'est pas définie." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notifications" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de téléchargement pour ce produit de la commande, le cas échéant" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Retour d'information" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Adresse de facturation" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1331,202 +1354,210 @@ msgstr "" "Adresse d'expédition pour cette commande, laisser vide si elle est identique" " à l'adresse de facturation ou si elle n'est pas applicable" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prix total de la commande" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantité totale de produits dans la commande" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Tous les produits de la commande sont-ils numériques ?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Commandes" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Image URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marque" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Groupes d'attributs" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Prix" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Quantité" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Nombre de retours d'information" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Prix d'escompte" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produits" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Liste de souhaits" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Étiquettes du produit" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Catégories marquées" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tags des catégories" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nom du projet" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Courriel de l'entreprise" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Nom de l'entreprise" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adresse de l'entreprise" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Numéro de téléphone de l'entreprise" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', parfois il doit être utilisé à la place de la valeur de " "l'utilisateur de l'hôte" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Utilisateur de l'hôte de messagerie" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Montant maximum du paiement" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Montant minimum pour le paiement" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Données analytiques" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Advertisement data" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Code langue" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Nom de la langue" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Drapeau linguistique, s'il existe :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Obtenir la liste des langues prises en charge" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Résultats de la recherche de produits" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Résultats de la recherche de produits" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1539,23 +1570,23 @@ msgstr "" "hiérarchique. Cela peut être utile pour catégoriser et gérer les attributs " "plus efficacement dans un système complexe." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Parent de ce groupe" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Groupe d'attributs parent" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Groupe d'attributs" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1575,50 +1606,50 @@ msgstr "" "permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs " "tiers." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stocke les informations d'identification et les points d'extrémité " "nécessaires à la communication avec l'API du fournisseur." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informations sur l'authentification" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Définir la majoration pour les produits récupérés auprès de ce fournisseur" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Pourcentage de marge du vendeur" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Nom de ce vendeur" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Nom du vendeur" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "dossier de réponse" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "la dernière réponse du vendeur en matière de traitement" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Chemin d'accès au fichier d'intégration du fournisseur" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Parcours d'intégration" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1633,27 +1664,27 @@ msgstr "" "biais de mixins et permet de personnaliser les métadonnées à des fins " "administratives." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1664,15 +1695,15 @@ msgstr "" " et classer des produits. Elle comprend des attributs pour un identifiant de" " balise interne et un nom d'affichage convivial." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "étiquette de catégorie" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "balises de catégorie" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1696,52 +1727,52 @@ msgstr "" "catégories, ainsi que d'attribuer des attributs tels que des images, des " "balises ou une priorité." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Télécharger une image représentant cette catégorie" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Image de catégorie" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" "Définir un pourcentage de majoration pour les produits de cette catégorie" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Parent de cette catégorie pour former une structure hiérarchique" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Catégorie de parents" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Nom de la catégorie" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Donnez un nom à cette catégorie" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Ajouter une description détaillée pour cette catégorie" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Description de la catégorie" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priorité" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1755,47 +1786,47 @@ msgstr "" "de priorité. Elle permet d'organiser et de représenter les données relatives" " à la marque dans l'application." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Catégories" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1811,68 +1842,72 @@ msgstr "" "Elle fait partie du système de gestion des stocks pour permettre le suivi et" " l'évaluation des produits disponibles auprès de différents fournisseurs." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Produit associé" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Attributs du système" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1894,55 +1929,55 @@ msgstr "" "performances. Elle est utilisée pour définir et manipuler les données " "produit et les informations associées dans une application." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Nom du produit" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Description du produit" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1959,66 +1994,66 @@ msgstr "" "les entiers, les flottants, les booléens, les tableaux et les objets. Cela " "permet une structuration dynamique et flexible des données." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Groupe de cet attribut" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Chaîne" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Entier" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flotteur" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Booléen" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Tableau" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objet" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type de la valeur de l'attribut" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Type de valeur" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Nom de cet attribut" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Nom de l'attribut" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "est filtrable" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quels attributs et valeurs peuvent être utilisés pour filtrer cette " "catégorie." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2029,19 +2064,19 @@ msgstr "" "organisation et une représentation dynamique des caractéristiques du " "produit." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribut de cette valeur" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "La valeur spécifique de cet attribut" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2056,39 +2091,39 @@ msgstr "" " comprend également une fonction d'accessibilité avec un texte alternatif " "pour les images." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Image du produit" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Images du produit" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2105,39 +2140,39 @@ msgstr "" "Elle s'intègre au catalogue de produits pour déterminer les articles " "concernés par la campagne." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Produits inclus" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promotion" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2151,23 +2186,23 @@ msgstr "" "opérations permettant d'ajouter et de supprimer plusieurs produits à la " "fois." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2184,19 +2219,19 @@ msgstr "" "documentaires. Elle étend les fonctionnalités de mixins spécifiques et " "fournit des fonctionnalités personnalisées supplémentaires." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentaire" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2219,59 +2254,59 @@ msgstr "" "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Rue" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "District" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Ville" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Région" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Code postal" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Pays" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresse" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresses" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2289,76 +2324,76 @@ msgstr "" "d'appliquer le code promotionnel à une commande tout en veillant à ce que " "les contraintes soient respectées." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" "Code unique utilisé par un utilisateur pour bénéficier d'une réduction" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore" " été utilisé." -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Code promo" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2366,16 +2401,16 @@ msgstr "" "Un seul type de remise doit être défini (montant ou pourcentage), mais pas " "les deux ni aucun des deux." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Type de réduction non valide pour le code promo {self.uuid} !" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2393,145 +2428,146 @@ msgstr "" " peuvent être mis à jour. De même, la fonctionnalité permet de gérer les " "produits dans le cycle de vie de la commande." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Structure JSON des notifications à afficher aux utilisateurs ; dans " "l'interface d'administration, la vue en tableau est utilisée." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Utilisateur" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Commande" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en " "cours." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" "Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Vous ne pouvez acheter que des produits physiques dont l'adresse de " "livraison est spécifiée !" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques " "minutes." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Un utilisateur sans solde ne peut pas acheter avec un solde !" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2540,7 +2576,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2548,7 +2584,7 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2572,111 +2608,111 @@ msgstr "" "modèle s'intègre aux modèles de commande et de produit et stocke une " "référence à ces derniers." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Le prix payé par le client pour ce produit au moment de l'achat" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Mauvaise action spécifiée pour le retour d'information : {action} !" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nom" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL de l'intégration" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Références d'authentification" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Vous ne pouvez avoir qu'un seul fournisseur de CRM par défaut" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2693,15 +2729,15 @@ msgstr "" "méthode permettant de générer une URL pour le téléchargement de l'actif " "lorsque la commande associée est terminée." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Télécharger" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2717,82 +2753,78 @@ msgstr "" "La classe utilise des champs de base de données pour modéliser et gérer " "efficacement les données de feedback." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Fait référence au produit spécifique d'une commande sur lequel porte le " "retour d'information." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Evaluation du produit" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "vous devez fournir un commentaire, une note et l'uuid du produit commandé " "pour ajouter un commentaire." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Erreur lors de la création du promocode : {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Accueil" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Nous contacter" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "À propos de nous" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Confirmation de commande" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Bonjour %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2803,23 +2835,23 @@ msgstr "" "informer que nous avons pris en compte votre commande. Vous trouverez ci-" "dessous les détails de votre commande :" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Prix total" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2828,28 +2860,28 @@ msgstr "" "Si vous avez des questions, n'hésitez pas à contacter notre support à " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Meilleures salutations,
l'équipe %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Tous droits réservés" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Commande livrée" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Bonjour %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2858,7 +2890,7 @@ msgstr "" "Nous avons traité avec succès votre commande №%(order_uuid)s ! Vous " "trouverez ci-dessous les détails de votre commande :" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2866,13 +2898,13 @@ msgstr "" "informations\n" " complémentaires" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Valeur" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2881,26 +2913,26 @@ msgstr "" "Si vous avez des questions, n'hésitez pas à contacter notre service " "d'assistance à %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Clé" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Ajouter une rangée" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode granted" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2908,8 +2940,8 @@ msgstr "" "Merci de rester avec nous ! Nous vous avons accordé un code promo\n" " pour" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2918,24 +2950,24 @@ msgstr "" "confirmer votre achat. Vous trouverez ci-dessous les détails de votre " "commande :" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Prix d'expédition" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Votre commande sera livrée à l'adresse suivante :" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Meilleures salutations,
L'équipe %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2943,52 +2975,52 @@ msgstr "" "tous les droits\n" " réservés" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Les données et le délai d'attente sont tous deux nécessaires" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "La valeur du délai d'attente n'est pas valide, elle doit être comprise entre" " 0 et 216000 secondes." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | nous contacter initié" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmation de commande" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Commande livrée" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode accordé" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Vous n'êtes pas autorisé à effectuer cette action." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Le paramètre NOMINATIM_URL doit être configuré !" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Les dimensions de l'image ne doivent pas dépasser w{max_width} x " "h{max_height} pixels." -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2996,7 +3028,7 @@ msgstr "" "Gère la demande d'index sitemap et renvoie une réponse XML. Il s'assure que " "la réponse inclut l'en-tête de type de contenu approprié pour XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3006,18 +3038,18 @@ msgstr "" "demande, récupère la réponse détaillée appropriée du plan du site et définit" " l'en-tête Content-Type pour XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Renvoie une liste des langues prises en charge et des informations " "correspondantes." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Renvoie les paramètres du site web sous la forme d'un objet JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3025,11 +3057,11 @@ msgstr "" "Gère les opérations de cache telles que la lecture et la définition des " "données de cache avec une clé et un délai spécifiés." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Gère les soumissions du formulaire `contact us`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3037,15 +3069,15 @@ msgstr "" "Gère les demandes de traitement et de validation des URL à partir des " "requêtes POST entrantes." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Traite les demandes de recherche globales." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3053,27 +3085,27 @@ msgstr "" "Gère le téléchargement d'un bien numérique associé à une commande.\n" "Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid est obligatoire" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "la commande doit être payée avant le téléchargement du bien numérique" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Le produit de la commande n'a pas de produit" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon introuvable" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3081,7 +3113,7 @@ msgstr "" "Gère les demandes de favicon d'un site web.\n" "Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3092,11 +3124,11 @@ msgstr "" " d'index de l'interface d'administration de Django. Elle utilise la fonction" " `redirect` de Django pour gérer la redirection HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Renvoie la version actuelle d'eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3111,7 +3143,7 @@ msgstr "" "l'action en cours, les autorisations personnalisables et les formats de " "rendu." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3125,7 +3157,7 @@ msgstr "" "couche API de l'application et fournit un moyen normalisé de traiter les " "demandes et les réponses concernant les données de l'AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3142,7 +3174,7 @@ msgstr "" "récupération d'informations détaillées ou simplifiées en fonction de la " "demande." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3157,7 +3189,7 @@ msgstr "" "actions. Les capacités de filtrage sont fournies par le backend " "DjangoFilter." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3172,7 +3204,7 @@ msgstr "" "également des permissions pour s'assurer que seuls les utilisateurs " "autorisés peuvent accéder à des données spécifiques." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3185,7 +3217,7 @@ msgstr "" " simplifier la mise en œuvre des points d'extrémité de l'API pour les objets" " Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3203,7 +3235,7 @@ msgstr "" "comprend des méthodes pour récupérer les détails d'un produit, appliquer des" " permissions et accéder aux commentaires connexes d'un produit." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3219,7 +3251,7 @@ msgstr "" "ressources relatives aux vendeurs par l'intermédiaire du cadre REST de " "Django." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3237,7 +3269,7 @@ msgstr "" "la classe de base `EvibesViewSet` et utilise le système de filtrage de " "Django pour l'interrogation des données." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3257,7 +3289,7 @@ msgstr "" "autorisations en conséquence lors de l'interaction avec les données de la " "commande." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3272,11 +3304,11 @@ msgstr "" " En outre, il fournit une action détaillée pour gérer le retour " "d'informations sur les instances OrderProduct." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Gère les opérations liées aux images des produits dans l'application." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3284,15 +3316,15 @@ msgstr "" "Gère la récupération et le traitement des instances de PromoCode par le " "biais de diverses actions API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Représente un jeu de vues pour la gestion des promotions." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Gère les opérations liées aux données de stock dans le système." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3312,7 +3344,7 @@ msgstr "" "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "explicites sont accordées." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3327,12 +3359,12 @@ msgstr "" " HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" " sur le contexte de la demande." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d7e03b9f21baf5a0a10a5dad34c671962b5d61f GIT binary patch literal 96944 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 literal 0 HcmV?d00001 diff --git a/core/locale/he_IL/LC_MESSAGES/django.po b/engine/core/locale/he_IL/LC_MESSAGES/django.po similarity index 76% rename from core/locale/he_IL/LC_MESSAGES/django.po rename to engine/core/locale/he_IL/LC_MESSAGES/django.po index b17741f6..af55ca2b 100644 --- a/core/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/core/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,176 +13,180 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "מזהה ייחודי" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "מזהה ייחודי משמש לזיהוי ודאי של כל אובייקט במסד הנתונים." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "פעיל" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "אם מוגדר כ-false, אובייקט זה לא יהיה גלוי למשתמשים ללא ההרשאה הנדרשת." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "נוצר" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "כאשר האובייקט הופיע לראשונה במסד הנתונים" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "משונה" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "מתי האובייקט נערך לאחרונה" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "תרגומים" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "כללי" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "יחסים" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "מידע נוסף" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "מטא-נתונים" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "חותמות זמן" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "הפעל את %(verbose_name_plural)s שנבחר" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "הפריטים שנבחרו הופעלו!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "השבת את %(verbose_name_plural)s שנבחר" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "פריטים נבחרים הושבתו!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "ערך התכונה" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "ערכי תכונות" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "תמונה" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "תמונות" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "מלאי" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "מניות" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "הזמן מוצר" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "הזמנת מוצרים" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "ילדים" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "תצורה" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "ליבה" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "סיימתי" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "משלוח" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "נמסר" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "בוטל" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "נכשל" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "בהמתנה" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "התקבל" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "החזר כספי" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "תשלום" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "מוצלח" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "קלט/פלט מטמון" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -190,160 +194,161 @@ msgstr "" "החל רק מפתח לקריאת נתונים מותרים מהמטמון. החל מפתח, נתונים וזמן המתנה עם " "אימות כדי לכתוב נתונים למטמון." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "קבל רשימה של השפות הנתמכות" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "קבל את הפרמטרים החשופים של היישום" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "שלח הודעה לצוות התמיכה" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "נקודת קצה לחיפוש גלובלי לשאילתות בטבלאות הפרויקט" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "רכשו הזמנה כעסק" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" "רכשו הזמנה כעסק, באמצעות `products` המסופק עם `product_uuid` ו-`attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "הצג את כל קבוצות התכונות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "איתור קבוצת תכונות אחת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "צור קבוצת תכונות" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "מחיקת קבוצת תכונות" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "שכתוב קבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "שכתוב שדות מסוימים בקבוצת תכונות קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "הצג את כל התכונות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "איתור תכונה בודדת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "צור תכונה" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "מחיקת תכונה" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "רשימת כל ערכי התכונות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "איתור ערך תכונה בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "צור ערך תכונה" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "מחיקת ערך תכונה" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "שכתוב ערך תכונה קיים תוך שמירת תכונות שאינן ניתנות לעריכה" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "שכתוב שדות מסוימים של ערך תכונה קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "איתור קטגוריה אחת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "צור קטגוריה" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "מחק קטגוריה" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "תמונת מצב SEO Meta" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של הקטגוריה" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "קטגוריה UUID או slug" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "צור קטגוריה" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "מחק קטגוריה" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "תמונת מצב SEO Meta" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של הקטגוריה" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "הצג את כל הקטגוריות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק ההזמנות שלהם." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -351,38 +356,38 @@ msgstr "" "חיפוש תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות ב-human_readable_id, " "order_products.product.name ו-order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "סנן הזמנות עם buy_time >= תאריך ושעה זה ב-ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "סנן הזמנות עם buy_time <= תאריך ושעה זה ב-ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "סינון לפי UUID של הזמנה מדויק" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "סינון לפי מספר הזמנה מדויק הניתן לקריאה על ידי בני אדם" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "סינון לפי כתובת הדוא\"ל של המשתמש (התאמה מדויקת ללא הבחנה בין אותיות רישיות " "לאותיות קטנות)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "סינון לפי UUID של המשתמש" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "סינון לפי סטטוס הזמנה (התאמת תת-מחרוזת ללא הבחנה בין אותיות גדולות וקטנות)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -392,35 +397,39 @@ msgstr "" "status, created, modified, buy_time, random. הוסף קידומת '-' עבור מיון יורד " "(לדוגמה, '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "איתור קטגוריה אחת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "הזמן UUID או מזהה קריא לאדם" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "צור תכונה" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "לא עובד עבור משתמשים שאינם עובדים." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "מחיקת תכונה" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "שכתוב קטגוריה קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "שכתוב שדות מסוימים בקטגוריה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -429,122 +438,122 @@ msgstr "" "מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות" " היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "לרכוש הזמנה ללא יצירת חשבון" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "מסיים את רכישת ההזמנה עבור משתמש לא רשום." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "הוסף מוצר להזמנה" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "מוסיף מוצר להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "הוסף רשימת מוצרים להזמנה, הכמויות לא ייספרו" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" "מוסיף רשימת מוצרים להזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "הסר מוצר מההזמנה" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "מסיר מוצר מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "הסר מוצר מההזמנה, הכמויות לא ייספרו" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" "מסיר רשימת מוצרים מהזמנה באמצעות `product_uuid` ו-`attributes` שסופקו." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "הצג את כל התכונות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "למשתמשים שאינם אנשי צוות, מוצגות רק רשימות המשאלות שלהם." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "איתור תכונה בודדת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "צור תכונה" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "לא עובד עבור משתמשים שאינם עובדים." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "מחיקת תכונה" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "שכתוב תכונה קיימת תוך שמירת תכונות שאינן ניתנות לעריכה" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "שכתוב שדות מסוימים של תכונה קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "הוסף מוצר להזמנה" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "מוסיף מוצר לרשימת המשאלות באמצעות `product_uuid` שסופק." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "הסר מוצר מרשימת המשאלות" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "מסיר מוצר מרשימת המשאלות באמצעות `product_uuid` שסופק." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "הוסף מוצרים רבים לרשימת המשאלות" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "מוסיף מוצרים רבים לרשימת המשאלות באמצעות `product_uuids` שסופק." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "הסר מוצר מההזמנה" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "מסיר מוצרים רבים מרשימת המשאלות באמצעות `product_uuids` שסופק." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -558,15 +567,15 @@ msgstr "" "סינון לפי זוגות שם/ערך של תכונה אחת או יותר. • **תחביר**: `attr_name=method-value[;attr2=method2-value2]…` • **שיטות** (ברירת המחדל היא `icontains` אם לא צוין): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **הקלדת ערכים**: תחילה מתבצע ניסיון JSON (כך שניתן להעביר רשימות/מילונים), `true`/`false` עבור ערכי בוליאניים, מספרים שלמים, מספרים צפים; אחרת מטופל כמחרוזת. • **Base64**: קידומת עם `b64-` כדי לקודד את הערך הגולמי ב-base64 בטוח ל-URL. \n" "דוגמאות: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "הצג את כל המוצרים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(מדויק) UUID של המוצר" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -574,863 +583,885 @@ msgstr "" "רשימה של שדות למיון, מופרדים בפסיקים. קידומת `-` למיון יורד. **מותר:** uuid," " rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "איתור מוצר בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID או Slug של המוצר" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "צור מוצר" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "שכתוב מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "עדכן שדות מסוימים של מוצר קיים, תוך שמירה על שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "מחק מוצר" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "מפרט את כל המשובים המותרים עבור מוצר" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "מחזיר תמונת מצב של מטא-נתוני SEO של המוצר" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "רשימת כל הכתובות" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "איתור כתובת אחת" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "צור כתובת חדשה" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "מחק כתובת" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "עדכון כתובת שלמה" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "עדכון חלקי של כתובת" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "השלמת כתובת אוטומטית" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "מחרוזת שאילתת נתונים גולמיים, אנא הוסף נתונים מנקודת הקצה של geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "מגביל את כמות התוצאות, 1 < limit < 10, ברירת מחדל: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "הצג את כל המשובים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "איתור משוב בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "ליצור משוב" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "מחק משוב" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "לשכתב משוב קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "לשכתב כמה שדות של משוב קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "רשימת כל קשרי ההזמנות-מוצרים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "איתור קשר יחיד בין הזמנה למוצר (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "יצירת קשר חדש בין הזמנה למוצר" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "החלפת קשר בין הזמנה למוצר קיים" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "עדכון חלקי של קשר בין הזמנה למוצר קיים" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "מחיקת קשר בין הזמנה למוצר" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "הצג את כל המותגים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "איתור מותג בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID או סלאג של המותג" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "יצירת מותג" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "מחק מותג" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "שכתוב מותג קיים תוך שמירה על אלמנטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "שכתוב שדות מסוימים של מותג קיים תוך שמירה על שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "תמונת מצב SEO Meta עבור המותג" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "הצג את כל הספקים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "איתור ספק בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "צור ספק" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "מחק את הספק" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "שכתוב ספק קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "שכתוב שדות מסוימים של ספק קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "הצג את כל תמונות המוצר (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "איתור תמונה של מוצר בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "צור תמונה של המוצר" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "מחיקת תמונת מוצר" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "שכתוב תמונה קיימת של מוצר תוך שמירת אלמנטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "שכתוב שדות מסוימים בתמונת מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "הצג את כל קודי המבצע (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "איתור קוד קידום מכירות בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "צור קוד קידום מכירות" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "מחק את קוד המבצע" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "שכתוב קוד קידום מכירות קיים תוך שמירה על תוכן שאינו ניתן לעריכה" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "שכתוב שדות מסוימים בקוד קידום מכירות קיים תוך שמירה על שדות שאינם ניתנים " "לעריכה" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "הצג את כל המבצעים (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "איתור מבצע בודד (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "צור מבצע" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "מחק מבצע" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "שכתוב מבצע קיים תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "שכתוב שדות מסוימים של מבצע קיים תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "הצג את כל המניות (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "איתור מניה בודדת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "צור רישום מלאי" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "מחיקת רשומת מלאי" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "שכתוב רשומת מלאי קיימת תוך שמירת פריטים שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "שכתוב שדות מסוימים ברשומת מלאי קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "הצג את כל תגי המוצר (תצוגה פשוטה)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "איתור תגית מוצר בודדת (תצוגה מפורטת)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "צור תגית מוצר" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "מחק תווית מוצר" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "שכתוב תגית מוצר קיימת תוך שמירת תוכן שאינו ניתן לעריכה" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "שכתוב שדות מסוימים בתגית מוצר קיימת תוך שמירת שדות שאינם ניתנים לעריכה" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "לא צויין מונח חיפוש." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "חיפוש" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "שם" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "קטגוריות" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "קטגוריות שבלולים" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "תגיות" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "מחיר מינימום" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "מחיר מקסימלי" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "פעיל" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "מותג" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "תכונות" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "כמות" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "שבלול" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "האם דיגיטלי" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "כלול תת-קטגוריות" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "מספר קטלוגי" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "נקנה לאחר (כולל)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "נקנה לפני כן (כולל)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "דוא\"ל המשתמש" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID של המשתמש" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "סטטוס" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "מזהה קריא על ידי בני אדם" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "הורה" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "רמה" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID של המוצר" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "מפתח לחיפוש או להגדרה במטמון" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "נתונים לאחסון במטמון" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "פסק זמן בשניות להגדרת הנתונים במטמון" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "נתונים במטמון" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "הוסף מוצר להזמנה" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ההזמנה {order_uuid} לא נמצאה!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "הסר את כל המוצרים מההזמנה" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "קנה הזמנה" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "בצע פעולה ברשימת המוצרים בהזמנה" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "הסר/הוסף" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "הפעולה חייבת להיות \"הוספה\" או \"הסרה\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "אנא ספק את הערך `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "רשימת המשאלות {wishlist_uuid} לא נמצאה!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "הוסף מוצר להזמנה" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "קנה הזמנה" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "הפעולה חייבת להיות `add` או `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "המוצר {order_product_uuid} לא נמצא!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "הגבול חייב להיות בין 1 ל-10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "תכונות" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "תכונות מקובצות" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "קבוצות תכונות" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "קטגוריות" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "מותגים" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "קטגוריות" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "אחוז הסימון" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "אילו תכונות וערכים ניתן להשתמש בהם לסינון קטגוריה זו." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "מחירים מינימליים ומקסימליים עבור מוצרים בקטגוריה זו, אם זמינים." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "תגיות עבור קטגוריה זו" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ספקים" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "קו רוחב (קואורדינטת Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "אורך (קואורדינטת X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "איך" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ערך דירוג בין 1 ל-10, כולל, או 0 אם לא הוגדר." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "הודעות" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "משוב" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "כתובת לחיוב" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" "כתובת משלוח עבור הזמנה זו, השאר ריק אם זהה לכתובת החיוב או אם לא רלוונטי" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "המחיר הכולל של הזמנה זו" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "כמות המוצרים הכוללת בהזמנה" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "הזמנות" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "כתובת URL של התמונה" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "תמונות המוצר" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "קטגוריה" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "משובים" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "מותג" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "קבוצות תכונות" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "מחיר" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "כמות" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "מספר המשובים" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "מחיר מוזל" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "מוצרים" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "קודי קידום מכירות" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "מוצרים במבצע" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "מבצעים" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ספק" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "מוצר" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "רשימות משאלות" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "מוצרים מתויגים" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "תגיות מוצר" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "קטגוריות מתויגות" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "תגיות קטגוריות" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "שם הפרויקט" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "דוא\"ל החברה" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "שם החברה" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "כתובת החברה" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "מספר הטלפון של החברה" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', לעיתים יש להשתמש בו במקום בערך המשתמש המארח" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "משתמש מארח דוא\"ל" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "סכום מקסימלי לתשלום" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "סכום מינימום לתשלום" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "נתוני ניתוח" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "נתוני פרסום" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "תצורה" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "קוד שפה" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "שם השפה" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "דגל השפה, אם קיים :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "קבל רשימה של השפות הנתמכות" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "תוצאות חיפוש מוצרים" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "תוצאות חיפוש מוצרים" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1441,23 +1472,23 @@ msgstr "" "קבוצות תכונות. לקבוצת תכונות יכולה להיות קבוצת אב, היוצרת מבנה היררכי. זה " "יכול להיות שימושי לסיווג וניהול תכונות בצורה יעילה יותר במערכת מורכבת." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "הורה של קבוצה זו" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "קבוצת תכונות הורה" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "קבוצת תכונות" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1473,47 +1504,47 @@ msgstr "" "הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו " "מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "מידע אימות" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "אחוז תוספת הספק" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "שם הספק הזה" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "שם הספק" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "קובץ תגובה" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "תגובת העיבוד האחרונה של הספק" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "נתיב קובץ האינטגרציה של הספק" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "נתיב אינטגרציה" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1526,27 +1557,27 @@ msgstr "" "ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" " של מטא-נתונים למטרות ניהוליות." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "מזהה תווית פנימי עבור תווית המוצר" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "שם היום" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "שם ידידותי למשתמש עבור תווית המוצר" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "שם תצוגה של התג" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "תגית מוצר" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1556,15 +1587,15 @@ msgstr "" "להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" " תצוגה ידידותי למשתמש." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "תגית קטגוריה" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "תגיות קטגוריה" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1583,51 +1614,51 @@ msgstr "" "דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " "וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "העלה תמונה המייצגת קטגוריה זו" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "תמונה בקטגוריה" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "קטגוריה ראשית" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "שם הקטגוריה" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "ציין שם לקטגוריה זו" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "הוסף תיאור מפורט לקטגוריה זו" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "תיאור הקטגוריה" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "עדיפות" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1639,47 +1670,47 @@ msgstr "" " שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "שם המותג" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "שם המותג" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "תיאור המותג" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "קטגוריות" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1693,68 +1724,72 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "ספק נלווה" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "מחיר המכירה" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "מוצר נלווה" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "כמות במלאי" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "מק\"ט הספק" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "קובץ דיגיטלי" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "מאפייני המערכת" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "רישומים במלאי" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1772,55 +1807,55 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "שם המוצר" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "תיאור המוצר" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "מספר חלק" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1835,64 +1870,64 @@ msgstr "" "מספר שלם, מספר צף, בוליאני, מערך ואובייקט. הדבר מאפשר בניית נתונים דינמית " "וגמישה." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "קבוצה של תכונה זו" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "מחרוזת" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "יושרה" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "צף" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "בוליאני" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "מערך" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "אובייקט" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "סוג ערך התכונה" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "סוג ערך" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "שם התכונה הזו" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "שם התכונה" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "ניתן לסינון" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "תכונה" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1901,19 +1936,19 @@ msgstr "" "מייצג ערך ספציפי עבור תכונה המקושרת למוצר. הוא מקשר את ה\"תכונה\" ל\"ערך\" " "ייחודי, ומאפשר ארגון טוב יותר וייצוג דינמי של מאפייני המוצר." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "תכונה של ערך זה" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "המוצר הספציפי הקשור לערך של תכונה זו" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "הערך הספציפי עבור תכונה זו" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1925,39 +1960,39 @@ msgstr "" "כולל פונקציונליות להעלאת קבצי תמונה, שיוכם למוצרים ספציפיים וקביעת סדר " "התצוגה שלהם. היא כוללת גם תכונת נגישות עם טקסט חלופי לתמונות." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "ספק טקסט חלופי לתמונה לצורך נגישות" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "טקסט חלופי לתמונה" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "תמונת מוצר" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "עדיפות תצוגה" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "תמונות מוצרים" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1971,39 +2006,39 @@ msgstr "" "להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " "משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "אחוז ההנחה" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "שם המבצע" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "תיאור המבצע" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "מוצרים כלולים" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "קידום" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2014,23 +2049,23 @@ msgstr "" "פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " "וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "רשימת משאלות" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2044,19 +2079,19 @@ msgstr "" "בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " "מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "סרט תיעודי" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "סרטים תיעודיים" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "לא פתור" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2075,59 +2110,59 @@ msgstr "" "נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " "אישית." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "שורת כתובת" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "רחוב" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "מחוז" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "עיר" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "אזור" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "מיקוד" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "מדינה" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "כתובת" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "כתובות" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2142,87 +2177,87 @@ msgstr "" "יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," " תוך הקפדה על עמידה באילוצים." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "אחוז ההנחה" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "תוקף הסוף" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "תחילת תוקף" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "משתמש שהוקצה" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "קוד קידום מכירות" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "קודי קידום מכירות" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2237,134 +2272,135 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "כתובת למשלוח" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "סטטוס ההזמנה" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "משתמש" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "לקנות זמן" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "הזמנה" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2372,13 +2408,13 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2397,108 +2433,108 @@ msgstr "" "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " "Order ו-Product ומאחסן הפניה אליהם." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "הערות פנימיות" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "הודעות למשתמשים" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "הזמנת הורים" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "כמות המוצר" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "שם" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "אישורי אימות" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2513,15 +2549,15 @@ msgstr "" " היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "הורדה" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "הורדות" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2534,78 +2570,74 @@ msgstr "" "הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" " למדל ולנהל ביעילות נתוני משוב." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "הערות משוב" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "דירוג מוצר" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "עליך לספק תגובה, דירוג ומספר זיהוי מוצר (uuid) כדי להוסיף משוב." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "שגיאה במהלך יצירת קוד קידום מכירות: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "בית" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "צור קשר" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "אודות" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "אישור הזמנה" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "לוגו" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "שלום %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2615,23 +2647,23 @@ msgstr "" "תודה על הזמנתך #%(order.pk)s! אנו שמחים להודיע לך שהזמנתך נכנסה לעיבוד. להלן" " פרטי הזמנתך:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "סה\"כ" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "מחיר כולל" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2639,150 +2671,150 @@ msgid "" msgstr "" "אם יש לך שאלות, אל תהסס לפנות לתמיכה שלנו ב-%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "בברכה,
צוות %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "כל הזכויות שמורות" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "ההזמנה נמסרה" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "שלום %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "הזמנתך №%(order_uuid)s טופלה בהצלחה! להלן פרטי הזמנתך:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "מידע נוסף" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "ערך" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "אם יש לך שאלות, אל תהסס לפנות לתמיכה שלנו ב-%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "מפתח" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "הוסף שורה" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "קוד קידום מכירות מוענק" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "תודה על שהייתכם איתנו! הענקנו לכם קוד קידום מכירות עבור" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "תודה על הזמנתך! אנו שמחים לאשר את רכישתך. להלן פרטי הזמנתך:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "מחיר משלוח" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "ההזמנה שלך תסופק לכתובת הבאה:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "בברכה,
צוות %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "כל הזכויות שמורות" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "נדרשים הן הנתונים והן זמן ההמתנה" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | צור קשר יוזם" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | אישור הזמנה" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | הזמנה נמסרה" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | קוד קידום מכירות מוענק" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "אין לך הרשאה לבצע פעולה זו." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2790,7 +2822,7 @@ msgstr "" "מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול" " את כותרת סוג התוכן המתאימה ל-XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2799,41 +2831,41 @@ msgstr "" "מטפל בתגובה לתצוגה מפורטת של מפת אתר. פונקציה זו מעבדת את הבקשה, משיגה את " "התגובה המתאימה לפרטי מפת האתר, וקובעת את כותרת Content-Type עבור XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" "מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "מטפל בהגשת טפסי \"צור קשר\"." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "מטפל בשאילתות חיפוש גלובליות." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2842,27 +2874,27 @@ msgstr "" "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " "HTTP 404 המציינת שהמשאב אינו זמין." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid נדרש" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "למוצר ההזמנה אין מוצר" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2871,7 +2903,7 @@ msgstr "" "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " "שגיאת HTTP 404 המציינת שהמשאב אינו זמין." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2881,11 +2913,11 @@ msgstr "" " אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " "של Django לטיפול בהפניה HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "מחזיר את הגרסה הנוכחית של eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2898,7 +2930,7 @@ msgstr "" "Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה " "הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2911,7 +2943,7 @@ msgstr "" "משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני " "AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2925,7 +2957,7 @@ msgstr "" "של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון " "לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2938,7 +2970,7 @@ msgstr "" "במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות " "שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2951,7 +2983,7 @@ msgstr "" "וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים " "מורשים יוכלו לגשת לנתונים ספציפיים." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2962,7 +2994,7 @@ msgstr "" "לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django " "כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2978,7 +3010,7 @@ msgstr "" " עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " "למשוב הקשור למוצר." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2991,7 +3023,7 @@ msgstr "" " המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " "הקשורים לספק באמצעות מסגרת Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3006,7 +3038,7 @@ msgstr "" " היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " "לשאילתת נתונים." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3023,7 +3055,7 @@ msgstr "" "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "הזמנה." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3036,25 +3068,25 @@ msgstr "" "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "לטיפול במשוב על מופעים של OrderProduct." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "מייצג קבוצת תצוגות לניהול מבצעים." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3071,7 +3103,7 @@ msgstr "" "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "מפורשות." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3084,12 +3116,12 @@ msgstr "" "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.mo b/engine/core/locale/hi_IN/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7640ce0078328b8d3c57147021d7d1b23f128abd GIT binary patch literal 359 zcmaiv&rX9t5XNit#L=^dJ$Tc>rLhfN|3peDAt}%xa9?4?HFcLPTcZ!+>-j7W9_-OC z`DK!sZzkV-pPqb8P)Eoaa*iA$m&hm|0UR!{j-EeljeZr4g`|aAm_cgANK_}w=#fn6 zbmm?=h3K`hkPe+}VY%-HC^aL_HitsI%W(r%+zR&V2Ra9DPN>gjiwo*e>TLL6p)_0# zJ8reX>v3KXWLaf-O>VSqq\n" "Language-Team: LANGUAGE \n" @@ -16,518 +16,526 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 msgid "failed" msgstr "" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "rewrite some fields of an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "rewrite some fields of an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, order_products." "product.name, and order_products.product.partnumber" msgstr "" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created, " "modified, buy_time, random. Prefix with '-' for descending (e.g. '-" "buy_time')." msgstr "" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -544,871 +552,893 @@ msgid "" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1416,23 +1446,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1443,47 +1473,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1492,42 +1522,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1540,51 +1570,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1592,47 +1622,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1642,67 +1672,72 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:526 core/models.py:779 core/models.py:825 core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1714,55 +1749,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1772,83 +1807,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It " "links the 'attribute' to a unique 'value', allowing better organization and " "dynamic representation of product characteristics." msgstr "" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1857,39 +1892,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1899,39 +1934,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1939,23 +1974,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1965,19 +2000,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1989,59 +2024,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2051,86 +2086,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2140,144 +2175,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2290,108 +2326,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2401,15 +2437,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2418,77 +2454,73 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2497,220 +2529,220 @@ msgid "" " order:" msgstr "" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below " "are\n" " the details of your order:" msgstr "" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2718,27 +2750,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2746,18 +2778,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2766,7 +2798,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2774,7 +2806,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2784,7 +2816,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2793,7 +2825,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2802,7 +2834,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2810,7 +2842,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2821,7 +2853,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2830,7 +2862,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2840,7 +2872,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2851,7 +2883,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2860,25 +2892,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2889,7 +2921,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2898,12 +2930,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.mo b/engine/core/locale/hr_HR/LC_MESSAGES/django.mo similarity index 100% rename from payments/locale/hr_HR/LC_MESSAGES/django.mo rename to engine/core/locale/hr_HR/LC_MESSAGES/django.mo diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po similarity index 62% rename from core/locale/fa_IR/LC_MESSAGES/django.po rename to engine/core/locale/hr_HR/LC_MESSAGES/django.po index 7b5c45d6..a4091592 100644 --- a/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,518 +16,526 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 msgid "failed" msgstr "" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "rewrite some fields of an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "rewrite some fields of an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, order_products." "product.name, and order_products.product.partnumber" msgstr "" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created, " "modified, buy_time, random. Prefix with '-' for descending (e.g. '-" "buy_time')." msgstr "" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -544,871 +552,893 @@ msgid "" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1416,23 +1446,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1443,47 +1473,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1492,42 +1522,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1540,51 +1570,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1592,47 +1622,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1642,67 +1672,72 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:526 core/models.py:779 core/models.py:825 core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1714,55 +1749,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1772,83 +1807,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It " "links the 'attribute' to a unique 'value', allowing better organization and " "dynamic representation of product characteristics." msgstr "" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1857,39 +1892,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1899,39 +1934,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1939,23 +1974,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1965,19 +2000,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1989,59 +2024,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2051,86 +2086,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2140,144 +2175,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2290,108 +2326,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2401,15 +2437,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2418,77 +2454,73 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2497,220 +2529,220 @@ msgid "" " order:" msgstr "" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below " "are\n" " the details of your order:" msgstr "" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2718,27 +2750,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2746,18 +2778,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2766,7 +2798,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2774,7 +2806,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2784,7 +2816,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2793,7 +2825,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2802,7 +2834,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2810,7 +2842,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2821,7 +2853,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2830,7 +2862,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2840,7 +2872,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2851,7 +2883,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2860,25 +2892,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2889,7 +2921,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2898,12 +2930,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e192376093d19f4f00a8c085f088cb54c622c969 GIT binary patch literal 87230 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 l5_Uo=pG% literal 0 HcmV?d00001 diff --git a/core/locale/id_ID/LC_MESSAGES/django.po b/engine/core/locale/id_ID/LC_MESSAGES/django.po similarity index 74% rename from core/locale/id_ID/LC_MESSAGES/django.po rename to engine/core/locale/id_ID/LC_MESSAGES/django.po index e3218fc7..610e0209 100644 --- a/core/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/core/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,20 +13,20 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ID unik" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "ID unik digunakan untuk mengidentifikasi objek basis data secara pasti" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Aktif" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,158 +34,162 @@ msgstr "" "Jika diset ke false, objek ini tidak dapat dilihat oleh pengguna tanpa izin " "yang diperlukan" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Dibuat" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Saat objek pertama kali muncul di database" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Dimodifikasi" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Kapan objek terakhir kali diedit" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Terjemahan" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Umum" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Hubungan" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "info tambahan" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Stempel waktu" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktifkan %(verbose_name_plural)s yang dipilih" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Item yang dipilih telah diaktifkan!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Menonaktifkan %(verbose_name_plural)s yang dipilih" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Item yang dipilih telah dinonaktifkan!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Nilai Atribut" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Nilai Atribut" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Gambar" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Gambar" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stok" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Saham" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Pesan Produk" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Pesan Produk" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Anak-anak" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfigurasi" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Inti" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Selesai." -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Menyampaikan" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Disampaikan." -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Dibatalkan" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Gagal" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Pending" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Diterima" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Uang Dikembalikan" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Pembayaran" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Berhasil" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "I/O Cache" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -193,32 +197,32 @@ msgstr "" "Terapkan hanya kunci untuk membaca data yang diizinkan dari cache.\n" "Menerapkan kunci, data, dan batas waktu dengan autentikasi untuk menulis data ke cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Dapatkan daftar bahasa yang didukung" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Dapatkan parameter aplikasi yang dapat diekspos" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Kirim pesan ke tim dukungan" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Meminta URL CORSed. Hanya https yang diizinkan." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Titik akhir pencarian global untuk melakukan kueri di seluruh tabel proyek" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Beli pesanan sebagai Bisnis" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -226,144 +230,145 @@ msgstr "" "Beli pesanan sebagai bisnis, menggunakan `produk` yang disediakan dengan " "`product_uuid` dan `atribut`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Buat daftar semua grup atribut (tampilan sederhana)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Mengambil grup atribut tunggal (tampilan detail)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Membuat grup atribut" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Menghapus grup atribut" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Menulis ulang grup atribut yang sudah ada dan menyimpan grup yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari grup atribut yang sudah ada sehingga " "tidak dapat diedit" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Daftar semua atribut (tampilan sederhana)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Mengambil atribut tunggal (tampilan detail)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Membuat atribut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Menghapus atribut" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Daftar semua nilai atribut (tampilan sederhana)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Mengambil nilai atribut tunggal (tampilan detail)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Membuat nilai atribut" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Menghapus nilai atribut" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Menulis ulang nilai atribut yang sudah ada dan menyimpan nilai yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari nilai atribut yang sudah ada sehingga " "tidak dapat diedit" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Daftar semua kategori (tampilan sederhana)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Mengambil satu kategori (tampilan detail)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Kategori UUID atau siput" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Membuat kategori" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Menghapus kategori" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "" "Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Cuplikan Meta SEO" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Mengembalikan cuplikan data meta SEO kategori" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Kategori UUID atau siput" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Daftar semua kategori (tampilan sederhana)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Untuk pengguna non-staf, hanya pesanan mereka sendiri yang dikembalikan." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -371,39 +376,39 @@ msgstr "" "Pencarian substring yang tidak peka huruf besar/kecil di human_readable_id, " "order_produk.product.name, dan order_produk.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filter pesanan dengan waktu_beli >= waktu_data ISO 8601 ini" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filter pesanan dengan waktu_beli <= waktu_data ISO 8601 ini" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filter berdasarkan urutan yang tepat UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filter berdasarkan ID pesanan yang dapat dibaca manusia" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filter berdasarkan email pengguna (pencocokan persis tanpa huruf besar-" "kecil)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Memfilter berdasarkan UUID pengguna" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filter berdasarkan status pesanan (pencocokan substring yang tidak peka " "huruf besar-kecil)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -413,39 +418,43 @@ msgstr "" "user, status, created, modified, buy_time, random. Awalan dengan '-' untuk " "menurun (contoh: '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Mengambil satu kategori (tampilan detail)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Pesan UUID atau id yang dapat dibaca manusia" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Membuat atribut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Tidak dapat digunakan oleh pengguna non-staf." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Menghapus atribut" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" "Menulis ulang kategori yang sudah ada dan menyimpan kategori yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari kategori yang sudah ada sehingga tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Harga pembelian pada saat pemesanan" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -455,19 +464,19 @@ msgstr "" "diselesaikan menggunakan saldo pengguna; Jika `force_payment` digunakan, " "transaksi dimulai." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "membeli pesanan tanpa pembuatan akun" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "menyelesaikan pembelian pesanan untuk pengguna yang tidak terdaftar." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Menambahkan produk ke pesanan" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -475,11 +484,11 @@ msgstr "" "Menambahkan produk ke pesanan menggunakan `product_uuid` dan `atribut` yang " "disediakan." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Tambahkan daftar produk yang akan dipesan, jumlah tidak akan dihitung" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -487,11 +496,11 @@ msgstr "" "Menambahkan daftar produk ke pesanan menggunakan `product_uuid` dan " "`atribut` yang disediakan." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Menghapus produk dari pesanan" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -499,11 +508,11 @@ msgstr "" "Menghapus produk dari pesanan menggunakan `product_uuid` dan `atribut` yang " "disediakan." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Menghapus produk dari pesanan, jumlah tidak akan dihitung" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -511,86 +520,86 @@ msgstr "" "Menghapus daftar produk dari pesanan menggunakan `product_uuid` dan " "`atribut` yang disediakan." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Daftar semua atribut (tampilan sederhana)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Untuk pengguna non-staf, hanya daftar keinginan mereka sendiri yang " "dikembalikan." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Mengambil atribut tunggal (tampilan detail)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Membuat atribut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Tidak dapat digunakan oleh pengguna non-staf." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Menghapus atribut" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Menulis ulang atribut yang sudah ada dengan menyimpan atribut yang tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Menulis ulang beberapa bidang dari atribut yang sudah ada sehingga tidak " "dapat diedit" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Menambahkan produk ke pesanan" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Menambahkan produk ke daftar keinginan menggunakan `product_uuid` yang " "disediakan" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Menghapus produk dari daftar keinginan" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Menghapus produk dari daftar keinginan menggunakan `product_uuid` yang " "disediakan" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Tambahkan banyak produk ke daftar keinginan" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Menambahkan banyak produk ke daftar keinginan menggunakan `product_uuids` " "yang disediakan" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Menghapus produk dari pesanan" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Menghapus banyak produk dari daftar keinginan menggunakan `product_uuids` " "yang disediakan" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -610,15 +619,15 @@ msgstr "" "`warna=merah-pasti`, `ukuran=gt-10`, `fitur=dalam-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description = berisi-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Daftar semua produk (tampilan sederhana)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "UUID Produk (persis)" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -626,699 +635,713 @@ msgstr "" "Daftar bidang yang dipisahkan koma untuk mengurutkan. Awalan dengan `-` untuk mengurutkan. \n" "**Diizinkan:** uuid, peringkat, nama, siput, dibuat, dimodifikasi, harga, acak" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Mengambil satu produk (tampilan detail)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID Produk atau Siput" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Membuat produk" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Menulis ulang produk yang sudah ada, mempertahankan bidang yang tidak dapat " "diedit" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Memperbarui beberapa bidang dari produk yang sudah ada, mempertahankan " "bidang yang tidak dapat diedit" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Menghapus produk" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "mencantumkan semua umpan balik yang diizinkan untuk suatu produk" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Mengembalikan cuplikan data meta SEO produk" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Daftar semua alamat" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Mengambil satu alamat" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Membuat alamat baru" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Menghapus alamat" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Memperbarui seluruh alamat" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Memperbarui sebagian alamat" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Masukan alamat pelengkapan otomatis" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "String kueri data mentah, harap tambahkan dengan data dari titik akhir geo-" "IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "membatasi jumlah hasil, 1 " msgstr "{name} tidak ada dengan kueri <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Anda hanya dapat membeli produk fisik dengan alamat pengiriman yang " "ditentukan!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Alamat tidak ada" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Anda tidak dapat membeli saat ini, silakan coba lagi dalam beberapa menit." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2510,7 +2546,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2518,7 +2554,7 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2540,110 +2576,110 @@ msgstr "" "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Harga yang dibayarkan oleh pelanggan untuk produk ini pada saat pembelian" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Komentar internal" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Urutan induk" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Kuantitas produk" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status lini produk" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Anda tidak dapat memberikan umpan balik atas pesanan yang tidak diterima" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nama" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL integrasi" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2660,15 +2696,15 @@ msgstr "" "untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " "status selesai." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Unduh" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Unduhan" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2683,81 +2719,77 @@ msgstr "" "ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " "memodelkan dan mengelola data umpan balik secara efektif." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Komentar umpan balik" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Produk pesanan terkait" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Peringkat produk" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Anda harus memberikan komentar, penilaian, dan memesan produk uuid untuk " "menambahkan umpan balik." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Kesalahan selama pembuatan promocode: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Beranda" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Hubungi Kami" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Tentang Kami" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Konfirmasi Pesanan" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Halo %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2768,23 +2800,23 @@ msgstr "" "informasikan bahwa kami telah mengerjakan pesanan Anda. Di bawah ini adalah " "rincian pesanan Anda:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Total Harga" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2793,28 +2825,28 @@ msgstr "" "Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi dukungan kami " "di %(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Salam hormat, tim %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Semua hak cipta dilindungi undang-undang" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Pesanan Dikirim" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Halo %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2823,7 +2855,7 @@ msgstr "" "Kami telah berhasil memproses pesanan Anda №%(order_uuid)s! Di bawah ini " "adalah rincian pesanan Anda:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2831,13 +2863,13 @@ msgstr "" "tambahan\n" " informasi" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Nilai" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2846,26 +2878,26 @@ msgstr "" "Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi dukungan kami " "di %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Kunci" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Tambahkan Baris" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Kode promosi diberikan" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2873,8 +2905,8 @@ msgstr "" "Terima kasih telah tinggal bersama kami! Kami telah memberikan Anda kode promo\n" " untuk" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2882,24 +2914,24 @@ msgstr "" "Terima kasih atas pesanan Anda! Dengan senang hati kami mengkonfirmasi " "pembelian Anda. Di bawah ini adalah rincian pesanan Anda:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Harga pengiriman" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Pesanan Anda akan dikirimkan ke alamat berikut:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Salam hormat, Tim %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2907,49 +2939,49 @@ msgstr "" "Semua hak cipta\n" " dilindungi undang-undang" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Data dan batas waktu diperlukan" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | hubungi kami dimulai" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Konfirmasi Pesanan" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pesanan Dikirim" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | kode promo diberikan" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensi gambar tidak boleh melebihi w{max_width} x h{max_height} piksel!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2957,7 +2989,7 @@ msgstr "" "Menangani permintaan indeks peta situs dan mengembalikan respons XML. " "Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2967,16 +2999,16 @@ msgstr "" "permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " "header Jenis Konten untuk XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Mengembalikan parameter situs web sebagai objek JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2984,11 +3016,11 @@ msgstr "" "Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" " dan batas waktu tertentu." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Menangani pengiriman formulir `hubungi kami`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2996,15 +3028,15 @@ msgstr "" "Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " "POST yang masuk." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Menangani kueri penelusuran global." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3012,27 +3044,27 @@ msgstr "" "Menangani pengunduhan aset digital yang terkait dengan pesanan.\n" "Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid diperlukan" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "pesanan harus dibayar sebelum mengunduh aset digital" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Produk pesanan tidak memiliki produk" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3040,7 +3072,7 @@ msgstr "" "Menangani permintaan favicon dari sebuah situs web.\n" "Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3051,11 +3083,11 @@ msgstr "" "admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " "menangani pengalihan HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Mengembalikan versi eVibes saat ini." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3069,7 +3101,7 @@ msgstr "" "dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin " "yang dapat disesuaikan, dan format rendering." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3083,7 +3115,7 @@ msgstr "" "API aplikasi dan menyediakan cara standar untuk memproses permintaan dan " "respons untuk data AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3099,7 +3131,7 @@ msgstr "" "seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi " "yang terperinci versus yang disederhanakan tergantung pada permintaan." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3113,7 +3145,7 @@ msgstr "" "Django REST Framework dan menggunakan serializer yang sesuai untuk tindakan " "yang berbeda. Kemampuan pemfilteran disediakan melalui DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3127,7 +3159,7 @@ msgstr "" " data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya" " pengguna yang memiliki izin yang dapat mengakses data tertentu." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3139,7 +3171,7 @@ msgstr "" "serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django" " untuk menyederhanakan implementasi titik akhir API untuk objek Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3157,7 +3189,7 @@ msgstr "" " untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik " "terkait produk." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3172,7 +3204,7 @@ msgstr "" "adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " "dengan Vendor melalui kerangka kerja Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3189,7 +3221,7 @@ msgstr "" "yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " "menggunakan sistem penyaringan Django untuk meminta data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3208,7 +3240,7 @@ msgstr "" "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3222,11 +3254,11 @@ msgstr "" "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3234,15 +3266,15 @@ msgstr "" "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "tindakan API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Merupakan set tampilan untuk mengelola promosi." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3260,7 +3292,7 @@ msgstr "" "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "keinginan mereka sendiri kecuali jika izin eksplisit diberikan." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3274,12 +3306,12 @@ msgstr "" "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "penanganan izin berdasarkan konteks permintaan." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6ebebf8b11ae62ef4f73f4015ab0a94942652d02 GIT binary patch literal 90536 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 V-mwR-e|!IzE4y#PJu?&ae*q)e=S~0s literal 0 HcmV?d00001 diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po similarity index 75% rename from core/locale/it_IT/LC_MESSAGES/django.po rename to engine/core/locale/it_IT/LC_MESSAGES/django.po index dfa3c17f..39874d39 100644 --- a/core/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ID univoco" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "L'ID univoco viene utilizzato per identificare con certezza qualsiasi " "oggetto del database." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "È attivo" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Se impostato a false, questo oggetto non può essere visto dagli utenti senza" " i necessari permessi." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Creato" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Quando l'oggetto è apparso per la prima volta nel database" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modificato" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Quando l'oggetto è stato modificato per l'ultima volta" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Traduzioni" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Generale" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relazioni" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "informazioni aggiuntive" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadati" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Timestamp" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Attivare il %(verbose_name_plural)s selezionato" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Gli articoli selezionati sono stati attivati!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Disattivare il %(verbose_name_plural)s selezionato" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Gli articoli selezionati sono stati disattivati!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Valore dell'attributo" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Valori degli attributi" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Immagine" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Immagini" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Le scorte" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Ordinare i prodotti" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "I bambini" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Configurazione" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Nucleo" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Finito" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Consegnare" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Consegnato" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Annullato" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Fallito" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "In attesa" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accettato" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Denaro restituito" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Pagamento" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momentale" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Successo" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "I/O della cache" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Applicare solo una chiave per leggere i dati consentiti dalla cache.\n" "Applicare chiave, dati e timeout con autenticazione per scrivere dati nella cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Ottenere un elenco delle lingue supportate" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Ottenere i parametri esponibili dell'applicazione" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Inviate un messaggio al team di assistenza" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Richiedere un URL CORSed. È consentito solo https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Endpoint di ricerca globale per interrogare tutte le tabelle del progetto" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Acquistare un ordine come azienda" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,142 +231,143 @@ msgstr "" "Acquistare un ordine come azienda, utilizzando i `prodotti` forniti con " "`product_uuid` e `attributi`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Elenco di tutti i gruppi di attributi (vista semplice)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Recuperare un singolo gruppo di attributi (vista dettagliata)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Creare un gruppo di attributi" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Cancellare un gruppo di attributi" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Riscrivere un gruppo di attributi esistente salvando i non modificabili" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Riscrivere alcuni campi di un gruppo di attributi esistente salvando quelli " "non modificabili" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Elenco di tutti gli attributi (vista semplice)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Recuperare un singolo attributo (vista dettagliata)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Creare un attributo" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Cancellare un attributo" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Riscrivere un attributo esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Riscrivere alcuni campi di un attributo esistente salvando i campi non " "modificabili" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Elenco di tutti i valori degli attributi (vista semplice)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Recuperare il valore di un singolo attributo (vista dettagliata)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Creare un valore di attributo" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Cancellare il valore di un attributo" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Riscrivere il valore di un attributo esistente salvando gli elementi non " "modificabili" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Riscrivere alcuni campi di un valore di attributo esistente salvando i " "valori non modificabili" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Elenco di tutte le categorie (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Recuperare una singola categoria (vista dettagliata)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "UUID o slug della categoria" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Creare una categoria" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Eliminare una categoria" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta-immagine SEO" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Restituisce un'istantanea dei meta-dati SEO della categoria." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "UUID o slug della categoria" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Elenco di tutte le categorie (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Per gli utenti che non fanno parte del personale, vengono restituiti solo i " "loro ordini." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -371,39 +376,39 @@ msgstr "" "human_readable_id, order_products.product.name e " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtra gli ordini con buy_time >= questa data ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtra gli ordini con buy_time <= questa data ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrare per UUID dell'ordine esatto" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrare in base all'ID esatto dell'ordine leggibile dall'uomo" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtro per e-mail dell'utente (corrispondenza esatta senza distinzione tra " "maiuscole e minuscole)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrare per UUID dell'utente" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrare per stato dell'ordine (corrispondenza di sottostringhe senza " "distinzione tra maiuscole e minuscole)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -413,38 +418,42 @@ msgstr "" "user, status, created, modified, buy_time, random. Prefisso con '-' per la " "decrescita (ad esempio, '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Recuperare una singola categoria (vista dettagliata)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID dell'ordine o id leggibile dall'uomo" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Creare un attributo" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Non funziona per gli utenti che non fanno parte del personale." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Cancellare un attributo" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -454,19 +463,19 @@ msgstr "" "l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza" " `forza_pagamento`, viene avviata una transazione." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "acquistare un ordine senza creare un account" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalizza l'acquisto dell'ordine per un utente non registrato." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Aggiungere un prodotto all'ordine" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -474,13 +483,13 @@ msgstr "" "Aggiunge un prodotto a un ordine utilizzando il `product_uuid` e gli " "`attributi` forniti." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Aggiungete un elenco di prodotti da ordinare, le quantità non vengono " "conteggiate" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -488,11 +497,11 @@ msgstr "" "Aggiunge un elenco di prodotti a un ordine, utilizzando il `product_uuid` e " "gli `attributi` forniti." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Rimuovere un prodotto dall'ordine" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -500,12 +509,12 @@ msgstr "" "Rimuove un prodotto da un ordine utilizzando il `product_uuid` e gli " "`attributi` forniti." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" "Rimuovete un prodotto dall'ordine, le quantità non verranno conteggiate" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -513,84 +522,84 @@ msgstr "" "Rimuove un elenco di prodotti da un ordine utilizzando il `product_uuid` e " "gli `attributi` forniti." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Elenco di tutti gli attributi (vista semplice)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Per gli utenti che non fanno parte del personale, vengono restituite solo le" " loro liste dei desideri." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Recuperare un singolo attributo (vista dettagliata)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Creare un attributo" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Non funziona per gli utenti che non fanno parte del personale." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Cancellare un attributo" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Riscrivere un attributo esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Riscrivere alcuni campi di un attributo esistente salvando i campi non " "modificabili" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Aggiungere un prodotto all'ordine" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Aggiunge un prodotto a una lista dei desideri utilizzando il `product_uuid` " "fornito." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Rimuovere un prodotto dalla lista dei desideri" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Rimuove un prodotto da una wishlist utilizzando il `product_uuid` fornito." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Aggiungere molti prodotti alla lista dei desideri" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Aggiunge molti prodotti a una lista dei desideri utilizzando i " "`product_uuids` forniti." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Rimuove molti prodotti da una lista di desideri utilizzando i " "`product_uuids` forniti." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -610,15 +619,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Elenco di tutti i prodotti (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(esatto) UUID del prodotto" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -626,557 +635,567 @@ msgstr "" "Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per l'ordinamento discendente. \n" "**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Recuperare un singolo prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID o Slug del prodotto" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Creare un prodotto" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Riscrivere un prodotto esistente, preservando i campi non modificabili" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aggiornare alcuni campi di un prodotto esistente, preservando i campi non " "modificabili" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Eliminare un prodotto" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "elenca tutti i feedback consentiti per un prodotto" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Restituisce un'istantanea dei meta-dati SEO del prodotto." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Elenco di tutti gli indirizzi" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Recuperare un singolo indirizzo" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Creare un nuovo indirizzo" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Cancellare un indirizzo" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Aggiornare un intero indirizzo" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Aggiornare parzialmente un indirizzo" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Inserimento automatico dell'indirizzo" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Stringa di query dei dati grezzi, da aggiungere ai dati dell'endpoint geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita la quantità di risultati, 1 < limite < 10, default: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "elencare tutti i feedback (vista semplice)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "recuperare un singolo feedback (vista dettagliata)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "creare un feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "eliminare un feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "elencare tutte le relazioni ordine-prodotto (vista semplice)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperare una singola relazione ordine-prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "creare una nuova relazione ordine-prodotto" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "sostituire una relazione ordine-prodotto esistente" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "aggiornare parzialmente una relazione ordine-prodotto esistente" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "eliminare una relazione ordine-prodotto" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Elenco di tutti i marchi (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Recuperare un singolo marchio (vista dettagliata)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID o slug del marchio" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Creare un marchio" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Eliminare un marchio" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "Meta-immagine SEO per il marchio" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Elenco di tutti i fornitori (vista semplice)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperare un singolo fornitore (vista dettagliata)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Create a vendor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Eliminare un fornitore" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Elenco di tutte le immagini dei prodotti (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Recuperare l'immagine di un singolo prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Creare un'immagine del prodotto" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Eliminare l'immagine di un prodotto" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Elenco di tutti i codici promozionali (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperare un singolo codice promozionale (vista dettagliata)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Create a promo code" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Cancellare un codice promozionale" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Elenco di tutte le promozioni (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperare una singola promozione (vista dettagliata)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Creare una promozione" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Eliminare una promozione" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Elenco di tutti i titoli (vista semplice)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Recuperare un singolo titolo (vista dettagliata)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Creare un record di magazzino" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Cancellare un record di magazzino" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Elenco di tutti i tag dei prodotti (vista semplice)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperare un singolo tag di prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Creare un'etichetta di prodotto" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Eliminare un tag di prodotto" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Riscrivere una categoria esistente salvando gli elementi non modificabili" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Riscrivere alcuni campi di una categoria esistente salvando gli elementi non" " modificabili" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Ricerca" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nome" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categorie" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categorie Lumache" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tag" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Prezzo minimo" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "È attivo" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marchio" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attributi" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Quantità" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Lumaca" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "È digitale" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Includere le sottocategorie" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve esserci una categoria_uuid per utilizzare il flag include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Ricerca (ID, nome del prodotto o numero di parte)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Acquistato dopo (incluso)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Acquistato prima (compreso)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Email dell'utente" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID utente" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Stato" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "ID leggibile dall'uomo" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Genitore" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Intera categoria (con o senza almeno 1 prodotto)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Livello" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID del prodotto" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chiave da cercare o da inserire nella cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in secondi per l'inserimento dei dati nella cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Dati in cache" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Aggiungere un prodotto all'ordine" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordine {order_uuid} non trovato!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Rimuovere tutti i prodotti dall'ordine" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Acquistare un ordine" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Rimuovi/Aggiungi" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Eseguire un'azione su un elenco di prodotti nella wishlist" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Fornire il valore `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista dei desideri {wishlist_uuid} non trovata!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Aggiungere un prodotto all'ordine" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Acquistare un ordine" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1184,136 +1203,140 @@ msgstr "" "Inviare gli attributi come stringa formattata come " "attr1=valore1,attr2=valore2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "L'azione deve essere `add` o `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Il limite deve essere compreso tra 1 e 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attributi" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Attributi raggruppati" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Gruppi di attributi" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marche" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorie" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Percentuale di markup" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " "categoria." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prezzi minimi e massimi per i prodotti di questa categoria, se disponibili." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tag per questa categoria" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Prodotti in questa categoria" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Venditori" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordinata Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordinata X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Come" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valore di valutazione da 1 a 10, incluso, o 0 se non impostato." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notifiche" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL di download per il prodotto dell'ordine, se applicabile" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Indirizzo di fatturazione" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1321,201 +1344,209 @@ msgstr "" "Indirizzo di spedizione per questo ordine, lasciare in bianco se è uguale " "all'indirizzo di fatturazione o se non è applicabile" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prezzo totale dell'ordine" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantità totale di prodotti in ordine" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Tutti i prodotti sono presenti nell'ordine digitale" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Ordini" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL immagine" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marchio" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Gruppi di attributi" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Prezzo" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Quantità" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Numero di feedback" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Prezzo scontato" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Prodotti" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Codici promozionali" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promozioni" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Liste dei desideri" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Tag del prodotto" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Contrassegnato dalle categorie" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tag delle categorie" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nome del progetto" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Email aziendale" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Nome della società" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Indirizzo dell'azienda" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Numero di telefono dell'azienda" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', a volte deve essere usato al posto del valore dell'utente host" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Utente host dell'e-mail" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Importo massimo per il pagamento" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Importo minimo per il pagamento" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Dati analitici" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Dati pubblicitari" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configurazione" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Codice lingua" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Nome della lingua" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Bandiera della lingua, se esiste :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Ottenere un elenco delle lingue supportate" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Risultati della ricerca dei prodotti" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Risultati della ricerca dei prodotti" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1528,23 +1559,23 @@ msgstr "" "Questo può essere utile per categorizzare e gestire meglio gli attributi in " "un sistema complesso." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Genitore di questo gruppo" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Gruppo di attributi padre" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Gruppo di attributi" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1563,49 +1594,49 @@ msgstr "" "anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi " "che interagiscono con venditori terzi." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Memorizza le credenziali e gli endpoint necessari per la comunicazione API " "del fornitore." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informazioni sull'autenticazione" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definire il markup per i prodotti recuperati da questo fornitore" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Percentuale di ricarico del fornitore" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Nome del fornitore" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Nome del fornitore" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "file di risposta" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "risposta del venditore all'ultima elaborazione" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Percorso del file di integrazione del fornitore" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Percorso di integrazione" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1620,27 +1651,27 @@ msgstr "" "operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " "metadati per scopi amministrativi." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1651,15 +1682,15 @@ msgstr "" "classificare i prodotti. Include gli attributi per un identificatore interno" " del tag e un nome di visualizzazione facile da usare." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "tag categoria" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "tag di categoria" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1682,52 +1713,52 @@ msgstr "" "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Caricare un'immagine che rappresenti questa categoria" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Categoria immagine" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" "Definire una percentuale di ricarico per i prodotti di questa categoria" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Genitore di questa categoria per formare una struttura gerarchica" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Categoria di genitori" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Nome della categoria" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Indicare un nome per questa categoria" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Aggiungere una descrizione dettagliata per questa categoria" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Descrizione della categoria" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priorità" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1741,47 +1772,47 @@ msgstr "" "priorità. Permette di organizzare e rappresentare i dati relativi al marchio" " all'interno dell'applicazione." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categorie" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1797,68 +1828,72 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Prodotto associato" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "File digitale" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Attributi del sistema" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1880,55 +1915,55 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Numero di parte" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1944,66 +1979,66 @@ msgstr "" " tra cui stringa, intero, float, booleano, array e oggetto. Ciò consente una" " strutturazione dinamica e flessibile dei dati." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Gruppo di questo attributo" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Stringa" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Intero" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Galleggiante" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Booleano" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Oggetto" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Tipo di valore dell'attributo" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Tipo di valore" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Nome dell'attributo" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Nome dell'attributo" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "è filtrabile" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " "categoria." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributo" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2014,19 +2049,19 @@ msgstr "" "organizzazione e rappresentazione dinamica delle caratteristiche del " "prodotto." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attributo di questo valore" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Il valore specifico per questo attributo" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2040,40 +2075,40 @@ msgstr "" "specifici e di determinazione dell'ordine di visualizzazione. Include anche " "una funzione di accessibilità con testo alternativo per le immagini." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2089,39 +2124,39 @@ msgstr "" "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " "per determinare gli articoli interessati dalla campagna." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promozione" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2134,23 +2169,23 @@ msgstr "" "rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " "più prodotti contemporaneamente." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2166,19 +2201,19 @@ msgstr "" "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentario" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentari" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2200,59 +2235,59 @@ msgstr "" "classe consente inoltre di associare un indirizzo a un utente, facilitando " "la gestione personalizzata dei dati." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Via" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distretto" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Città" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Regione" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Codice postale" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Paese" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Indirizzo" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Indirizzi" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2269,74 +2304,74 @@ msgstr "" "utilizzo. Include funzionalità per convalidare e applicare il codice " "promozionale a un ordine, assicurando il rispetto dei vincoli." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" "Importo fisso dello sconto applicato se non si utilizza la percentuale" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non " "ancora utilizzato" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2344,16 +2379,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2371,139 +2406,140 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " "utente dell'amministratore viene utilizzata la visualizzazione a tabella." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Utente" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Ordine" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Un utente può avere un solo ordine pendente alla volta!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Non è possibile aggiungere prodotti a un ordine che non sia in sospeso." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "Non è possibile rimuovere i prodotti da un ordine che non è in corso." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "È possibile acquistare solo prodotti fisici con indirizzo di spedizione " "specificato!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "In questo momento non è possibile acquistare, riprovare tra qualche minuto." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2512,7 +2548,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2520,7 +2556,7 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2543,109 +2579,109 @@ msgstr "" "modello si integra con i modelli Ordine e Prodotto e memorizza un " "riferimento ad essi." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto." -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nome" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2662,15 +2698,15 @@ msgstr "" "il download della risorsa quando l'ordine associato è in uno stato " "completato." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Scaricare" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2685,81 +2721,77 @@ msgstr "" "assegnata dall'utente. La classe utilizza campi del database per modellare e" " gestire efficacemente i dati di feedback." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Riferisce il prodotto specifico in un ordine di cui si tratta il feedback." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Valutazione del prodotto" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "per aggiungere un feedback è necessario fornire un commento, una valutazione" " e l'uuid del prodotto dell'ordine." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Errore durante la creazione del codice promozionale: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Casa" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Contatto" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Chi siamo" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Conferma dell'ordine" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hello %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2770,23 +2802,23 @@ msgstr "" "abbiamo preso in carico il suo ordine. Di seguito sono riportati i dettagli " "del vostro ordine:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Totale" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Prezzo totale" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2795,28 +2827,28 @@ msgstr "" "Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero" " %(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Tutti i diritti riservati" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Ordine consegnato" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2825,7 +2857,7 @@ msgstr "" "Abbiamo elaborato con successo il suo ordine №%(order_uuid)s! Di seguito " "sono riportati i dettagli del suo ordine:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2833,13 +2865,13 @@ msgstr "" "ulteriori\n" " informazioni" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Valore" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2848,26 +2880,26 @@ msgstr "" "Per qualsiasi domanda, non esitate a contattare il nostro supporto al numero" " %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Chiave" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Aggiungi riga" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Codice promozionale concesso" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2875,8 +2907,8 @@ msgstr "" "Grazie per essere stati con noi! Vi abbiamo concesso un codice promozionale\n" " per" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2884,24 +2916,24 @@ msgstr "" "Grazie per il vostro ordine! Siamo lieti di confermare il suo acquisto. Di " "seguito sono riportati i dettagli dell'ordine:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Prezzo di spedizione" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Il vostro ordine sarà consegnato al seguente indirizzo:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Cordiali saluti,
il team %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2909,51 +2941,51 @@ msgstr "" "tutti i diritti\n" " riservato" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sono richiesti sia i dati che il timeout" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contattaci iniziato" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Conferma d'ordine" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Ordine consegnato" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Non si ha il permesso di eseguire questa azione." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Il parametro NOMINATIM_URL deve essere configurato!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}" " pixel" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2962,7 +2994,7 @@ msgstr "" "XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " "appropriato per XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2972,17 +3004,17 @@ msgstr "" "funzione elabora la richiesta, recupera la risposta dettagliata della " "sitemap e imposta l'intestazione Content-Type per XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Restituisce un elenco di lingue supportate e le informazioni corrispondenti." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Restituisce i parametri del sito web come oggetto JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2990,11 +3022,11 @@ msgstr "" "Gestisce le operazioni di cache, come la lettura e l'impostazione dei dati " "della cache con una chiave e un timeout specificati." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Gestisce l'invio del modulo `contatti`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3002,15 +3034,15 @@ msgstr "" "Gestisce le richieste di elaborazione e validazione degli URL dalle " "richieste POST in arrivo." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Gestisce le query di ricerca globali." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3018,27 +3050,27 @@ msgstr "" "Gestisce il download di una risorsa digitale associata a un ordine.\n" "Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid è obbligatorio" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Il prodotto dell'ordine non ha un prodotto" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon non trovata" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3046,7 +3078,7 @@ msgstr "" "Gestisce le richieste per la favicon di un sito web.\n" "Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3057,11 +3089,11 @@ msgstr "" "indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " "`redirect` di Django per gestire il reindirizzamento HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Restituisce la versione corrente di eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3075,7 +3107,7 @@ msgstr "" "Include il supporto per classi di serializzatori dinamici in base all'azione" " corrente, permessi personalizzabili e formati di rendering." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3089,7 +3121,7 @@ msgstr "" "parte del livello API dell'applicazione e fornisce un modo standardizzato " "per elaborare le richieste e le risposte per i dati di AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3105,7 +3137,7 @@ msgstr "" "sui dati restituiti, come il filtraggio per campi specifici o il recupero di" " informazioni dettagliate o semplificate, a seconda della richiesta." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3120,7 +3152,7 @@ msgstr "" "per le diverse azioni. Le funzionalità di filtraggio sono fornite da " "DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3135,7 +3167,7 @@ msgstr "" "le autorizzazioni per garantire che solo gli utenti autorizzati possano " "accedere a dati specifici." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3147,7 +3179,7 @@ msgstr "" " gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare" " l'implementazione di endpoint API per gli oggetti Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3165,7 +3197,7 @@ msgstr "" "Include metodi per recuperare i dettagli del prodotto, applicare i permessi " "e accedere ai feedback correlati di un prodotto." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3180,7 +3212,7 @@ msgstr "" "questa classe è fornire un accesso semplificato alle risorse relative a " "Vendor attraverso il framework REST di Django." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3197,7 +3229,7 @@ msgstr "" "accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " "di filtraggio di Django per interrogare i dati." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3216,7 +3248,7 @@ msgstr "" "serializzatori in base all'azione specifica da eseguire e applica le " "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3231,13 +3263,13 @@ msgstr "" "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "sulle istanze di OrderProduct." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestisce le operazioni relative alle immagini dei prodotti " "nell'applicazione." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3245,15 +3277,15 @@ msgstr "" "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "varie azioni API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3273,7 +3305,7 @@ msgstr "" "solo la propria lista dei desideri, a meno che non vengano concessi permessi" " espliciti." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3287,12 +3319,12 @@ msgstr "" "specializzati per diversi metodi HTTP, override del serializzatore e " "gestione dei permessi in base al contesto della richiesta." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8e2ae8a0e8e4c5e047518b161a3f3ba88669de99 GIT binary patch literal 95722 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
X0Q_>Duc$GmJ73*_-o<^*b9uB+0@R%St`| z4DSiaPVDPD%~fJ*gSH_+!+n_Rk?)h5fI6lV4oh{RjqUVnhNwwFCyL0F%V?K4$-VT?0i#*^i3`b zv5LdZDBrtn;@t#6>!7X0Ik}g))46XyFq?qC{AO8+ju=7Pn|AN){tL)&CC~g4uKdqm z>+ODde{cP6ZXhEDhVOa>`3&R{D<8}M0~fnY5{LI-tIq={+kIczJ<6`?v5|>WE!Pz8?c2|3*GJ!+aef0RSiZjwY;rxB z!UpRF2rWuho5&t>huJl;jGryi>VvK^a=!u(C6%#!L)G141YT<7?&Q(=P5N<{uk%%u z%R$G1H&!~=c+RTLt?lXdwYRy~&J)={GfSE>B1#OReqT6RMvS@D=1RbUq&aT>&vUQ4 z`l`}SN+mDveDLn}J*?J^=)9U34@e!)uCT-)qUL=mO9pf+d`vNEwp znpI!Dj}S4t75NBzYjI52n^xqT(_?4lkNTXEN=fBHIV}F&tpzX@C4+&~xXV11Tp{w$ zmP2`27lcu<-ko8}V!D5bt-`pLVDtl@>tC!=MW5{h@6JXCV(Sl@Z0C1>rca*nqk#{B zeYSPwrP-6Y(a7J}0^!TFSV_Nsbzckw^e?p<)hxl}xJX6q#JRJSFiPsSEKn0hd#;_UQ{v^Y5Sx716DciGzp zUx`FFh~I1ztTV)(r?8Oeg2|>$8aP#A4n+2>r|i<+d!_|8JPEbyLKae|lrZt`rS}ql zmmCGP4lG=#Cjp|0rvMycP5_2~gq;$x1H)!pCd}>Q(5<(oPI>N%>>SB^GKRjYdF+;} zNEd6Aq*>7s%DM~#wPBtUd1Lt!?y-QcwavrIw}gx82OyN|;?d&VZrh_BsFt^K zl=DcXl8}4d+iM~VUQn^hO7YG|zeGeqt10q#ZOe&@`;yAvM`T9czUrOc1fg7w)m9gh zEQYw9a3b~OF#9@EokSHESIotZ-jL7!<-wb}WCRZO7SYs2b7lS)EWh3A05k=#uux~7 z1IM&oT1}A*l?AYUH}J*c(cA59z_O(|=)j$%SaK+!){wt<@$Bd`V@L$j4*3r!?5!VM r{Lk}aQy2Jd9lpH#3BIn4qVuowalym%Zr9ImT-5R+n042$bG`osIYt*I literal 0 HcmV?d00001 diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po similarity index 76% rename from core/locale/ja_JP/LC_MESSAGES/django.po rename to engine/core/locale/ja_JP/LC_MESSAGES/django.po index 0549eab9..81db3f4b 100644 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,176 +13,180 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ユニークID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "ユニークIDは、データベースオブジェクトを確実に識別するために使用されます。" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "アクティブ" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "falseに設定された場合、このオブジェクトは必要なパーミッションのないユーザーには見えない。" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "作成" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "そのオブジェクトが初めてデータベースに登場した時" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "変形" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "オブジェクトの最終編集日時" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "翻訳" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "一般" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "関係" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "追加情報" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "メタデータ" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "タイムスタンプ" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "選択した%(verbose_name_plural)sをアクティブにする" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "選択した項目がアクティブになりました!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "選択された%(verbose_name_plural)sを非アクティブにする" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "選択されたアイテムは無効化されました!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "属性値" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "属性値" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "画像" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "画像" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "在庫" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "株式" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "商品のご注文" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "子供たち" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "コンフィグ" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "コア" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "終了" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "配達" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "配信" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "キャンセル" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "失敗" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "申請中" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "受諾" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "返金" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "支払い" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "モメンタル" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "成功" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "キャッシュI/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -190,192 +194,193 @@ msgstr "" "許可されたデータをキャッシュから読み出すには、キーのみを適用する。\n" "キャッシュにデータを書き込むには、認証付きのキー、データ、タイムアウトを適用する。" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "サポートされている言語のリストを取得する" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "アプリケーションの公開可能なパラメータを取得する" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "サポートチームにメッセージを送る" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORSされたURLを要求する。httpsのみ許可。" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "プロジェクト全体のテーブルを検索するグローバル検索エンドポイント" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "ビジネスとして注文を購入する" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "提供された `product` と `product_uuid` と `attributes` を使用して、ビジネスとして注文を購入する。" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "すべての属性グループをリストアップ(シンプルビュー)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "単一の属性グループを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "属性グループの作成" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "属性グループの削除" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "既存の属性グループを書き換えて、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "既存の属性グループのいくつかのフィールドを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "すべての属性をリストアップ(シンプルな表示)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "単一の属性を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "属性を作成する" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "属性を削除する" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "既存の属性を書き換える。" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "すべての属性値をリストアップ(シンプルビュー)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "単一の属性値を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "属性値の作成" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "属性値の削除" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "既存の属性値を書き換える。" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "既存の属性値のいくつかのフィールドを書き換え、編集不可能な値を保存する。" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "全カテゴリーを一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "単一のカテゴリーを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "カテゴリーを作成する" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "カテゴリーの削除" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "SEOメタ・スナップショット" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "カテゴリのSEOメタデータのスナップショットを返します。" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "カテゴリーUUIDまたはスラッグ" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "カテゴリーを作成する" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "カテゴリーの削除" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEOメタ・スナップショット" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "カテゴリのSEOメタデータのスナップショットを返します。" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "全カテゴリーを一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "スタッフ以外のユーザーについては、自分の注文のみが返却される。" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" msgstr "" "human_readable_id、order_products.product.name、order_products.product.partnumberの大文字小文字を区別しない部分文字列検索" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "buy_time >= このISO 8601の日時を持つ注文をフィルタリングする。" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "buy_time <= このISO 8601の日付時間の注文をフィルタリングする。" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "正確な順序UUIDによるフィルタリング" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "人間が読み取れる正確な注文IDによるフィルタリング" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "ユーザーのEメールによるフィルタリング(大文字・小文字を区別しない完全一致)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "ユーザーのUUIDによるフィルタリング" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "注文ステータスによるフィルタリング(大文字と小文字を区別しない部分文字列マッチ)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -383,35 +388,39 @@ msgid "" msgstr "" "uuid、human_readable_id、user_email、user、status、created、modified、buy_time、randomのいずれかによる順序。降順の場合は'-'をプレフィックスとしてつける(例:'-buy_time')。" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "単一のカテゴリーを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "注文UUIDまたは人間が読めるID" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "属性を作成する" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "スタッフ以外のユーザーには使えない。" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "属性を削除する" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "既存のカテゴリーを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "編集不可を保存している既存のカテゴリのいくつかのフィールドを書き換える" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "注文時の購入価格" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -420,120 +429,120 @@ msgstr "" "注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用して購入が完了します。 `force_payment` " "が使用された場合、トランザクションが開始されます。" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "アカウントを作成せずに注文を購入する" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "は、未登録ユーザーの注文購入を確定します。" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "注文に商品を追加する" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "指定した `product_uuid` と `attributes` を使用して、商品を注文に追加する。" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "数量はカウントされません。" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "指定された `product_uuid` と `attributes` を使用して、注文に商品のリストを追加する。" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "注文から商品を削除する" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "指定された `product_uuid` と `attributes` を使用して、注文から商品を削除する。" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "注文から商品を削除すると、数量はカウントされません。" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "指定された `product_uuid` と `attributes` を用いて、注文から商品のリストを削除する。" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "すべての属性をリストアップ(シンプルな表示)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "スタッフ以外のユーザーには、自分のウィッシュリストのみが返されます。" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "単一の属性を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "属性を作成する" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "スタッフ以外のユーザーには使えない。" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "属性を削除する" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "既存の属性を書き換える。" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "既存の属性のいくつかのフィールドを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "注文に商品を追加する" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "指定された `product_uuid` を使ってウィッシュリストに商品を追加する。" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "ウィッシュリストから商品を削除する" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "指定された `product_uuid` を使ってウィッシュリストから商品を削除します。" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "ウィッシュリストに多くの商品を追加する" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "指定された `product_uuids` を使ってウィッシュリストに多くの商品を追加する。" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "注文から商品を削除する" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "指定された `product_uuids` を使ってウィッシュリストから多くの商品を削除する。" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -553,15 +562,15 @@ msgstr "" "color=exact-red`、`size=gt-10`、`features=in-[\"wifi\", \"bluetooth\"]`、\n" "b64-description=icontains-aGVhdC1jb2xk`。" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "全商品を一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(正確には)製品UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -569,861 +578,883 @@ msgstr "" "カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスとしてつける。 \n" "**許可:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "単一の製品を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "製品UUIDまたはスラグ" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "製品を作る" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品を書き換える。" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "製品を削除する" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "製品に対して許可されたすべてのフィードバックを一覧表示します。" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "商品のSEOメタデータのスナップショットを返します。" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "全住所のリスト" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "単一アドレスの取得" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "新しいアドレスを作成する" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "アドレスの削除" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "アドレス全体の更新" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "アドレスの一部更新" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "オートコンプリート住所入力" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" " -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " "it-it -l ja-jp -l kk-kz -l n-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" -"hans -a core -a geo -a payments -a vibes_auth -a blog" +"hans -a core -a geo -a payments -a authv -a blog" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "結果を制限する, 1 < limit < 10, デフォルト: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "すべてのフィードバックを表示する(シンプルな表示)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "単一のフィードバックを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "フィードバックを作成する" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "フィードバックを削除する" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "既存のフィードバックを書き換える。" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "既存のフィードバックのいくつかのフィールドを書き換えて、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "すべての注文と商品の関係をリストアップする(シンプルビュー)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "単一の注文と商品の関係を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "新しい注文と商品の関係を作る" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "既存の注文と商品の関係を置き換える" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "既存の注文と商品の関係を部分的に更新する" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "注文と商品の関係を削除する" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "すべてのブランドをリストアップ(シンプル表示)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "単一ブランドの検索(詳細表示)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "ブランドUUIDまたはスラッグ" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "ブランドを作る" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "ブランドの削除" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "編集不可の既存ブランドをリライトする" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "編集不可能なフィールドを保存している既存ブランドのフィールドを書き換える。" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "ブランドのSEOメタ・スナップショット" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "全ベンダーのリスト(シンプルビュー)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "単一ベンダーの検索(詳細表示)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "ベンダーの作成" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "ベンダーの削除" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "既存のベンダーを書き換え、編集不可能な部分を保存する。" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "既存のベンダーのいくつかのフィールドを書き換えて、編集不可能なフィールドを保存する。" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "すべての商品画像を一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "1枚の商品画像を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "製品イメージの作成" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "商品画像を削除する" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "既存の商品画像を書き換え、編集不可能な部分を保存する。" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "既存の商品画像のいくつかのフィールドを書き換えて、編集不可能な部分を保存する。" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "すべてのプロモコードを一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "単一のプロモコードを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "プロモコードを作成する" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "プロモコードを削除する" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "既存のプロモコードを書き換え、編集不可のプロモコードを保存する" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "既存のプロモコードの一部のフィールドを書き換えて、編集不可能な部分を保存する。" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "すべてのプロモーションを一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "単一のプロモーションを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "プロモーションの作成" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "プロモーションの削除" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "既存のプロモーションを書き換える。" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "既存のプロモーションのいくつかのフィールドを書き換え、編集不可能な部分を保存する。" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "全銘柄リスト(シンプルビュー)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "単一銘柄の取得(詳細表示)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "ストックレコードの作成" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "ストックレコードの削除" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "既存のストックレコードを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "編集不可能なフィールドを保存している既存のストックレコードの一部のフィールドを書き換える。" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "すべての商品タグを一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "単一の商品タグを取得する(詳細表示)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "商品タグの作成" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "商品タグの削除" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "既存の商品タグを書き換え、編集不可能なものを保存する。" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "既存の商品タグの一部のフィールドを書き換えて、編集不可能な部分を保存する。" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "検索語はありません。" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "検索" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "ユーユーアイディー" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "名称" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "カテゴリー" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "カテゴリー ナメクジ" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "タグ" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "最低価格" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "最高価格" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "アクティブ" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "ブランド" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "属性" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "数量" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "スラッグ" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "デジタル" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "サブカテゴリーを含む" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "検索(ID、製品名または部品番号)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "購入時期" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "以前に購入したもの(含む)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "ユーザーEメール" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "ユーザーUUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "ステータス" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "人間が読めるID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "親" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "レベル" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "製品UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "キャッシュに保存するデータ" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "キャッシュにデータをセットするタイムアウト時間(秒" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "キャッシュ・データ" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "注文に商品を追加する" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "注文 {order_uuid} が見つかりません!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "注文からすべての商品を削除する" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "注文する" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "注文商品のリストに対してアクションを実行する" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "削除/追加" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "ウィッシュリストの商品リストに対してアクションを実行する" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "wishlist_uuid`の値を指定してください。" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "ウィッシュリスト {wishlist_uuid} が見つかりません!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "注文に商品を追加する" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "注文する" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "orderproductに対するフィードバックを追加または削除する。" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "アクションは `add` または `remove` のいずれかでなければならない!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} が見つかりません!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "上限は1から10の間でなければならない" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "属性" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "グループ化された属性" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "属性のグループ" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "ブランド" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "カテゴリー" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "マークアップ率" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "このカテゴリのフィルタリングに使用できる属性と値。" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "このカテゴリーの商品の最低価格と最高価格がある場合。" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "このカテゴリのタグ" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "このカテゴリの製品" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ベンダー" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "緯度(Y座標)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "経度(X座標)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "どのように" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1から10までの評価値(設定されていない場合は0)。" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "お知らせ" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "フィードバック" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "請求先住所" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "請求先住所と同じ場合、または該当しない場合は空白にしてください。" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "この注文の合計金額" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "注文商品の総数量" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "ご注文の商品はすべてデジタルですか?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "この注文の取引" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "受注状況" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "画像URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "ブランド" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "属性グループ" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "価格" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "数量" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "フィードバック数" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "割引価格" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "製品紹介" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "プロモコード" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "プロモーション" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "製品" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "ウィッシュリスト" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "商品タグ" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "カテゴリー' タグ" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "プロジェクト名" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "会社Eメール" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "会社名" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "会社住所" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "会社電話番号" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from' は、ホストユーザの値の代わりに使用されることがあります。" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "メールホストユーザー" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "支払限度額" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "最低支払額" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "分析データ" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "広告データ" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "構成" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "言語コード" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "言語名" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "言語フラグがある場合 :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "サポートされている言語のリストを取得する" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "製品検索結果" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "製品検索結果" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1432,23 +1463,23 @@ msgid "" msgstr "" "属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "このグループの親" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "親属性グループ" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "属性グループ名" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "属性グループ" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1461,47 +1492,47 @@ msgstr "" "外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " "クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "認証情報" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "このベンダーから取得した商品のマークアップを定義する。" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "ベンダーのマークアップ率" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "このベンダーの名前" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "ベンダー名" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "レスポンスファイル" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "ベンダーの最終処理回答" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "ベンダーの統合ファイルパス" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "統合パス" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1512,27 +1543,27 @@ msgstr "" "製品を分類または識別するために使用される製品タグを表します。ProductTag " "クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "タグ名" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "商品タグ" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1540,15 +1571,15 @@ msgid "" msgstr "" "商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "カテゴリタグ" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "カテゴリータグ" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1562,51 +1593,51 @@ msgid "" msgstr "" "関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "このカテゴリーを表す画像をアップロードする" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "カテゴリーイメージ" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "このカテゴリの商品のマークアップ率を定義する" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "階層構造を形成するこのカテゴリの親" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "親カテゴリー" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "カテゴリー名" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "このカテゴリの名前を入力してください。" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "このカテゴリの詳細説明を追加する" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "カテゴリー説明" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "優先順位" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1616,47 +1647,47 @@ msgid "" msgstr "" "システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "ブランド名" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1667,68 +1698,72 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "販売価格" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "関連製品" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "システム属性" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1743,55 +1778,55 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "商品名" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "商品説明" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "品番" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1803,64 +1838,64 @@ msgstr "" "システム内の属性を表します。このクラスは、属性を定義および管理するために使用されます。属性は、他のエンティティに関連付けることができる、カスタマイズ可能なデータの部分です。属性には、関連するカテゴリ、グループ、値型、および名前があります。このモデルは、string、integer、float、boolean、array、object" " などの複数の型の値をサポートしています。これにより、動的で柔軟なデータ構造化が可能になります。" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "この属性のグループ" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "ストリング" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "整数" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "フロート" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "ブーリアン" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "配列" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "対象" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "属性値のタイプ" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "値の種類" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "この属性の名前" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "属性名" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "フィルタリング可能" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1868,19 +1903,19 @@ msgid "" msgstr "" "製品にリンクされている属性の特定の値を表します。これは、「属性」を一意の「値」にリンクし、製品特性のより良い編成と動的な表現を可能にします。" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "この値の属性" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "この属性の具体的な値" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1890,39 +1925,39 @@ msgid "" msgstr "" "システム内の商品に関連付けられた商品画像を表します。このクラスは商品の画像を管理するために設計されており、画像ファイルのアップロード、特定の商品との関連付け、表示順の決定などの機能を提供します。また、画像の代替テキストによるアクセシビリティ機能も備えています。" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "商品画像" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "表示優先度" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "商品画像" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1933,39 +1968,39 @@ msgid "" msgstr "" "割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "割引率" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "含まれる製品" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "プロモーション" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1974,23 +2009,23 @@ msgid "" msgstr "" "希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2001,19 +2036,19 @@ msgid "" msgstr "" "商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "未解決" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2030,59 +2065,59 @@ msgstr "" "レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " "パーソナライズされたデータの取り扱いを容易にします。" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "住所" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "ストリート" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "地区" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "都市" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "地域" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "郵便番号" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "国名" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "住所" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "住所" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2095,86 +2130,86 @@ msgstr "" "(金額またはパーセンテージ)、有効期間、関連するユーザ " "(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "割引率" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2185,144 +2220,145 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "注文状況" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "ユーザー" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "時間を買う" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "オーダー" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2336,108 +2372,108 @@ msgid "" msgstr "" "注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "親注文" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "製品数量" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "名称" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "統合のURL" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "認証情報" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "注文のCRMリンク" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2449,15 +2485,15 @@ msgstr "" "注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" " URL を生成するメソッドも含まれています。" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "ダウンロード" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2467,78 +2503,74 @@ msgid "" msgstr "" "製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "製品評価" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "プロモコード作成中にエラーが発生しました:{e!s}です。" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "ホーム" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "お問い合わせ" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "会社概要" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "ご注文の確認" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "ロゴ" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "こんにちは%(order.user.first_name)s、" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2546,58 +2578,58 @@ msgid "" " order:" msgstr "ご注文ありがとうございます#%(order.pk)s!ご注文を承りましたことをお知らせいたします。以下、ご注文の詳細です:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "合計" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "合計価格" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "ご不明な点がございましたら、%(config.EMAIL_HOST_USER)sまでお気軽にお問い合わせください。" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sチーム" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "無断複写・転載を禁じます。" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "注文の配達" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "こんにちは%(user_first_name)s、" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "ご注文の№%(order_uuid)sが正常に処理されました!以下はご注文の詳細です:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2605,39 +2637,39 @@ msgstr "" "追加\n" " 追加情報" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "価値" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "ご不明な点がございましたら、%(contact_email)sまでお気軽にお問い合わせください。" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "キー" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "行を追加" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "プロモーションコード" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2645,31 +2677,31 @@ msgstr "" "ご宿泊ありがとうございます!プロモーションコード\n" " を付与させていただきました。" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "ご注文ありがとうございます!ご購入を確認させていただきました。以下、ご注文の詳細です:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "送料" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "ご注文の商品は以下の住所に配送されます:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "よろしくお願いします、
%(config.PROJECT_NAME)sチーム" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2677,55 +2709,55 @@ msgstr "" "すべての権利\n" " 予約済み" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "データとタイムアウトの両方が必要" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "無効なタイムアウト値です。" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}|コンタクト開始| お問い合わせはこちらから" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}|注文確認| ご注文の確認" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME}|ご注文は配送されますか?" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME}|プロモコード付与" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "この操作を行う権限がありません。" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URLパラメータを設定する必要があります!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2734,40 +2766,40 @@ msgstr "" "サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" "Type ヘッダを設定します。" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "サポートされている言語の一覧と対応する情報を返します。" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "お問い合わせフォームの送信を処理する。" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "グローバル検索クエリを処理する。" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "登録なしでビジネスとして購入するロジックを扱う。" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2775,27 +2807,27 @@ msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" "この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuidは必須です。" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "注文商品に商品がない" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2803,7 +2835,7 @@ msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" "この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2812,11 +2844,11 @@ msgstr "" "リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " "インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "eVibes の現在のバージョンを返します。" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2828,7 +2860,7 @@ msgstr "" " エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 " "カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2840,7 +2872,7 @@ msgstr "" "オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup " "に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2853,7 +2885,7 @@ msgstr "" "エンドポイントのセットを提供します。このクラスは、Attribute " "オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2866,7 +2898,7 @@ msgstr "" "のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend " "を通して提供されます。" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2876,7 +2908,7 @@ msgid "" msgstr "" "Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2887,7 +2919,7 @@ msgstr "" "オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " "オブジェクトの API エンドポイントの実装を簡素化します。" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2902,7 +2934,7 @@ msgstr "" " `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST " "フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2915,7 +2947,7 @@ msgstr "" "フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " "関連リソースへの合理的なアクセスを提供することです。" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2929,7 +2961,7 @@ msgstr "" "オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " "のフィルタリングシステムを利用してデータを取得します。" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2942,7 +2974,7 @@ msgstr "" "注文と関連する操作を管理するための " "ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2954,25 +2986,25 @@ msgstr "" "操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" " インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "アプリケーション内の商品画像に関する操作を管理します。" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "プロモーションを管理するためのビューセットを表します。" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "システム内のストックデータに関する操作を行う。" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2984,7 +3016,7 @@ msgid "" msgstr "" "ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2996,12 +3028,12 @@ msgstr "" "クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " "メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/core/locale/kk_KZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7640ce0078328b8d3c57147021d7d1b23f128abd GIT binary patch literal 359 zcmaiv&rX9t5XNit#L=^dJ$Tc>rLhfN|3peDAt}%xa9?4?HFcLPTcZ!+>-j7W9_-OC z`DK!sZzkV-pPqb8P)Eoaa*iA$m&hm|0UR!{j-EeljeZr4g`|aAm_cgANK_}w=#fn6 zbmm?=h3K`hkPe+}VY%-HC^aL_HitsI%W(r%+zR&V2Ra9DPN>gjiwo*e>TLL6p)_0# zJ8reX>v3KXWLaf-O>VSqq\n" "Language-Team: LANGUAGE \n" @@ -16,518 +16,526 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed permission" msgstr "" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 engine/core/choices.py:24 msgid "failed" msgstr "" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." msgstr "" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "rewrite some fields of an existing attribute group saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "rewrite some fields of an existing attribute value saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, order_products." "product.name, and order_products.product.partnumber" msgstr "" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created, " "modified, buy_time, random. Prefix with '-' for descending (e.g. '-" "buy_time')." msgstr "" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -544,871 +552,893 @@ msgid "" "`b64-description=icontains-aGVhdC1jb2xk`" msgstr "" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "minimum and maximum prices for products in this category, if available." msgstr "" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1416,23 +1446,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1443,47 +1473,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1492,42 +1522,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1540,51 +1570,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1592,47 +1622,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1642,67 +1672,72 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:526 core/models.py:779 core/models.py:825 core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1714,55 +1749,55 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1772,83 +1807,83 @@ msgid "" "for dynamic and flexible data structuring." msgstr "" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It " "links the 'attribute' to a unique 'value', allowing better organization and " "dynamic representation of product characteristics." msgstr "" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for " @@ -1857,39 +1892,39 @@ msgid "" "with alternative text for the images." msgstr "" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1899,39 +1934,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1939,23 +1974,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1965,19 +2000,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1989,59 +2024,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2051,86 +2086,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2140,144 +2175,145 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2290,108 +2326,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2401,15 +2437,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2418,77 +2454,73 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2497,220 +2529,220 @@ msgid "" " order:" msgstr "" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below " "are\n" " the details of your order:" msgstr "" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2718,27 +2750,27 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2746,18 +2778,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2766,7 +2798,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2774,7 +2806,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2784,7 +2816,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2793,7 +2825,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2802,7 +2834,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2810,7 +2842,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2821,7 +2853,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2830,7 +2862,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2840,7 +2872,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2851,7 +2883,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2860,25 +2892,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2889,7 +2921,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2898,12 +2930,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..947eac8268a78fd723fdca46d7699d9bc2ba2554 GIT binary patch literal 90333 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≫Q&a;x`&pqubqBetgg-0@+0oNs0Jk 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 Tcu_LrO1DHKuyAFpuXO(dyE}Fp literal 0 HcmV?d00001 diff --git a/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po similarity index 74% rename from core/locale/ko_KR/LC_MESSAGES/django.po rename to engine/core/locale/ko_KR/LC_MESSAGES/django.po index b962949a..af786266 100644 --- a/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,176 +13,180 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "고유 ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "고유 ID는 모든 데이터베이스 개체를 확실하게 식별하는 데 사용됩니다." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "활성 상태" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "false로 설정하면 필요한 권한이 없는 사용자는 이 개체를 볼 수 없습니다." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "생성됨" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "개체가 데이터베이스에 처음 나타난 시점" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "수정됨" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "개체가 마지막으로 편집된 시기" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "번역" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "일반" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "관계" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "추가 정보" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "메타데이터" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "타임스탬프" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 활성화" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "선택한 아이템이 활성화되었습니다!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 비활성화하기" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "선택한 아이템이 비활성화되었습니다!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "속성 값" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "속성 값" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "이미지" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "이미지" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "재고" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "주식" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "제품 주문" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "제품 주문" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "어린이" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "구성" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "핵심" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "완료" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "제공" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "배달됨" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "취소됨" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "실패" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "보류 중" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "수락됨" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "반환된 금액" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "결제" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "순간" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "성공" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "캐시 I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -190,157 +194,158 @@ msgstr "" "캐시에서 허용된 데이터를 읽으려면 키만 적용합니다.\n" "캐시에 데이터를 쓰기 위해 키, 데이터 및 타임아웃을 인증과 함께 적용합니다." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "지원되는 언어 목록 보기" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "애플리케이션의 노출 가능한 매개변수 가져오기" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "지원팀에 메시지 보내기" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORSed URL을 요청합니다. https만 허용됩니다." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "프로젝트의 테이블 전체에서 쿼리할 수 있는 글로벌 검색 엔드포인트" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "비즈니스로 주문 구매" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "제공된 '제품'과 '제품_uuid' 및 '속성'을 사용하여 비즈니스로서 주문을 구매합니다." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "모든 속성 그룹 나열(단순 보기)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "단일 속성 그룹 검색(상세 보기)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "속성 그룹 만들기" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "속성 그룹 삭제" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 속성 그룹 다시 작성하기" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "기존 속성 그룹의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "모든 속성 나열(단순 보기)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "단일 속성 검색(상세 보기)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "속성 만들기" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "속성 삭제" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다." -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "모든 속성 값 나열(단순 보기)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "단일 속성 값 검색(상세 보기)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "속성 값 생성" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "속성 값 삭제" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "편집할 수 없는 기존 속성 값을 저장하여 다시 작성하기" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "기존 속성 값의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "모든 카테고리 나열(간편 보기)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "단일 카테고리 검색(상세 보기)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "카테고리 만들기" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "카테고리 삭제" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "SEO 메타 스냅샷" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "카테고리의 SEO 메타 데이터 스냅샷을 반환합니다." - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "카테고리 UUID 또는 슬러그" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "카테고리 만들기" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "카테고리 삭제" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO 메타 스냅샷" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "카테고리의 SEO 메타 데이터 스냅샷을 반환합니다." + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "모든 카테고리 나열(간편 보기)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "직원이 아닌 사용자의 경우 자신의 주문만 반환됩니다." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -348,35 +353,35 @@ msgstr "" "대소문자를 구분하지 않는 하위 문자열 검색(human_readable_id, order_products.product.name 및 " "order_products.product.partnerumber)" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "buy_time >= 이 ISO 8601 날짜 시간으로 주문 필터링" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "buy_time <= 이 ISO 8601 날짜 시간으로 주문 필터링" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "정확한 주문 UUID로 필터링" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "사람이 읽을 수 있는 정확한 주문 ID로 필터링" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "사용자 이메일로 필터링(대소문자를 구분하지 않는 일치 검색)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "사용자의 UUID로 필터링" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "주문 상태별 필터링(대소문자를 구분하지 않는 하위 문자열 일치)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -385,35 +390,39 @@ msgstr "" "uuid, human_readable_id, user_email, 사용자, 상태, 생성됨, 수정됨, 구매 시간, 무작위 중 하나로 " "정렬합니다. 접두사 앞에 '-'를 붙여 내림차순으로 정렬합니다(예: '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "단일 카테고리 검색(상세 보기)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "주문 UUID 또는 사람이 읽을 수 있는 ID" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "속성 만들기" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "직원이 아닌 사용자에게는 작동하지 않습니다." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "속성 삭제" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리 다시 작성하기" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 카테고리의 일부 필드 다시 작성하기" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "주문 시점의 구매 가격" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -421,120 +430,120 @@ msgid "" msgstr "" "주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "계정 생성 없이 주문 구매" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "미등록 사용자의 주문 구매를 완료합니다." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "주문에 제품 추가" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품을 추가합니다." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "주문할 제품 목록을 추가하면 수량은 계산되지 않습니다." -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에 제품 목록을 추가합니다." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "주문에서 제품 제거" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품을 제거합니다." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "주문에서 제품을 제거하면 수량이 계산되지 않습니다." -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "제공된 `product_uuid` 및 `attributes`를 사용하여 주문에서 제품 목록을 제거합니다." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "모든 속성 나열(단순 보기)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "직원이 아닌 사용자의 경우 자신의 위시리스트만 반환됩니다." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "단일 속성 검색(상세 보기)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "속성 만들기" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "직원이 아닌 사용자에게는 작동하지 않습니다." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "속성 삭제" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "편집할 수 없는 속성을 저장하는 기존 속성 다시 작성하기" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "편집할 수 없는 기존 속성의 일부 필드를 다시 작성합니다." -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "주문에 제품 추가" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "제공된 `product_uuid`를 사용하여 위시리스트에 제품을 추가합니다." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "위시리스트에서 제품 제거" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "제공된 `product_uuid`를 사용하여 위시리스트에서 제품을 제거합니다." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "위시리스트에 많은 제품 추가" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "제공된 `product_uuids`를 사용하여 위시리스트에 많은 제품을 추가합니다." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "주문에서 제품 제거" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "제공된 `product_uuids`를 사용하여 위시리스트에서 많은 제품을 제거합니다." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -554,15 +563,15 @@ msgstr "" "색상=정확-빨간색`, `크기=gt-10`, `기능=in-[\"wifi\",\"블루투스\"]`,\n" "b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "모든 제품 나열(간편 보기)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(정확한) 제품 UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -570,857 +579,879 @@ msgstr "" "정렬할 필드의 쉼표로 구분된 목록입니다. 접두사 앞에 `-`를 붙여 내림차순으로 정렬합니다. \n" "**허용됨:** uuid, 등급, 이름, 슬러그, 생성, 수정, 가격, 랜덤" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "단일 제품 검색(상세 보기)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "제품 UUID 또는 슬러그" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "제품 만들기" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "편집할 수 없는 필드를 유지하면서 기존 제품을 다시 작성합니다." -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "기존 제품의 일부 필드를 업데이트하여 편집할 수 없는 필드는 유지합니다." -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "제품 삭제" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "제품에 대해 허용된 모든 피드백을 나열합니다." -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "제품의 SEO 메타 데이터 스냅샷을 반환합니다." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "모든 주소 나열" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "단일 주소 검색" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "새 주소 만들기" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "주소 삭제" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "전체 주소 업데이트" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "주소 부분 업데이트" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "주소 자동 완성 입력" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "원시 데이터 쿼리 문자열, 지오-IP 엔드포인트의 데이터를 추가하세요." -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "결과 금액을 제한합니다(1 < 제한 < 10, 기본값: 5)." -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "모든 피드백 나열(간편 보기)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "단일 피드백 검색(상세 보기)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "피드백 만들기" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "피드백 삭제" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "편집할 수 없는 기존 피드백을 다시 작성합니다." -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "기존 피드백의 일부 필드를 다시 작성하여 편집할 수 없는 항목을 저장합니다." -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "모든 주문-제품 관계 나열(단순 보기)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "단일 주문-제품 관계 검색(상세 보기)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "새 주문-제품 관계 생성" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "기존 주문-제품 관계 교체" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "기존 주문-제품 관계를 부분적으로 업데이트합니다." -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "주문-제품 관계 삭제" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "모든 브랜드 나열(간편 보기)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "단일 브랜드 검색(상세 보기)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "브랜드 UUID 또는 슬러그" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "브랜드 만들기" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "브랜드 삭제" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "편집할 수 없는 기존 브랜드를 저장하여 다시 작성하기" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 브랜드의 일부 필드 다시 작성하기" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "브랜드용 SEO 메타 스냅샷" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "모든 공급업체 목록(간편 보기)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "단일 공급업체 검색(상세 보기)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "공급업체 만들기" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "공급업체 삭제" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "편집할 수 없는 기존 벤더를 저장하여 다시 작성하기" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "편집할 수 없는 기존 공급업체의 일부 필드 다시 작성" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "모든 제품 이미지 나열(간편 보기)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "단일 제품 이미지 검색(상세 보기)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "제품 이미지 만들기" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "제품 이미지 삭제" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "편집할 수 없는 기존 제품 이미지 다시 작성하기" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "편집할 수 없는 기존 제품 이미지의 일부 필드를 다시 작성합니다." -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "모든 프로모션 코드 목록(간편 보기)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "단일 프로모션 코드 검색(상세 보기)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "프로모션 코드 생성" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "프로모션 코드 삭제" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "편집할 수 없는 기존 프로모션 코드 다시 작성하기" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "편집할 수 없는 기존 프로모션 코드의 일부 필드를 다시 작성합니다." -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "모든 프로모션 목록(간편 보기)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "단일 프로모션 검색(상세 보기)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "프로모션 만들기" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "프로모션 삭제" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션 다시 작성하기" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 프로모션의 일부 필드 다시 작성하기" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "모든 종목 목록(간편 보기)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "단일 재고 검색(상세 보기)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "재고 기록 만들기" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "재고 기록 삭제" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "편집할 수 없는 항목을 저장하여 기존 재고 레코드 다시 작성하기" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "편집할 수 없는 항목을 저장하는 기존 재고 레코드의 일부 필드 다시 쓰기" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "모든 제품 태그 나열(간편 보기)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "단일 제품 태그 검색(상세 보기)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "제품 태그 생성" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "제품 태그 삭제" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "편집할 수 없는 기존 제품 태그 다시 작성하기" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "편집할 수 없는 기존 제품 태그의 일부 필드를 다시 작성합니다." -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "검색" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "이름" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "카테고리" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "카테고리 슬러그" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "태그" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "최소 가격" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "최대 가격" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "활성 상태" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "브랜드" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "속성" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "수량" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "슬러그" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "디지털" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "하위 카테고리 포함" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "검색(ID, 제품명 또는 부품 번호)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "구매 후(포함)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "이전 구매(포함)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "사용자 이메일" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "사용자 UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "상태" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "사람이 읽을 수 있는 ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "부모" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "레벨" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "제품 UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "캐시에서 찾거나 캐시에 설정할 키" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "캐시에 저장할 데이터" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "캐시된 데이터" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "주문에 제품 추가" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "주문 {order_uuid}을 찾을 수 없습니다!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "주문에서 모든 제품 제거" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "주문 구매" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "제품 목록에 대한 작업을 순서대로 수행합니다." -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "제거/추가" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "작업은 \"추가\" 또는 \"제거\"여야 합니다!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "위시리스트의 제품 목록에서 작업 수행하기" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "위시리스트_유아이디` 값을 입력하세요." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "위시리스트 {wishlist_uuid}를 찾을 수 없습니다!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "주문에 제품 추가" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "주문 구매" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보내주세요." -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "주문 제품에 대한 피드백 추가 또는 삭제" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "한도는 1에서 10 사이여야 합니다." -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "속성" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "그룹화된 속성" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "속성 그룹" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "카테고리" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "브랜드" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "카테고리" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "마크업 퍼센트" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "이 카테고리를 필터링하는 데 사용할 수 있는 속성 및 값입니다." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "이 카테고리의 제품에 대한 최소 및 최대 가격(가능한 경우)." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "이 카테고리의 태그" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "이 카테고리의 제품" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "공급업체" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "위도(Y 좌표)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "경도(X 좌표)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "방법" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1에서 10까지의 등급 값(포함) 또는 설정하지 않은 경우 0입니다." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "알림" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "피드백" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "청구서 수신 주소" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "이 주문의 배송 주소는 청구지 주소와 동일하거나 해당되지 않는 경우 비워 둡니다." -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "이 주문의 총 가격" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "주문한 제품의 총 수량" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "주문" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "이미지 URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "제품 이미지" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "카테고리" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "피드백" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "브랜드" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "속성 그룹" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "가격" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "수량" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "피드백 수" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "할인 가격" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "제품" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "프로모션 코드" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "판매 중인 제품" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "프로모션" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "공급업체" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "제품" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "위시리스트 제품" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "위시리스트" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "태그가 지정된 제품" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "제품 태그" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "태그가 지정된 카테고리" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "카테고리 태그" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "프로젝트 이름" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "회사 이메일" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "회사 이름" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "회사 주소" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "회사 전화번호" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'이메일 보낸 사람'을 호스트 사용자 값 대신 사용해야 하는 경우가 있습니다." -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "이메일 호스트 사용자" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "최대 결제 금액" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "최소 결제 금액" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "애널리틱스 데이터" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "광고 데이터" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "구성" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "언어 코드" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "언어 이름" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "언어 플래그가 있는 경우 :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "지원되는 언어 목록 보기" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "제품 검색 결과" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "제품 검색 결과" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1430,23 +1461,23 @@ msgstr "" "계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " "있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "이 그룹의 부모" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "상위 속성 그룹" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "속성 그룹" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1461,47 +1492,47 @@ msgstr "" "제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " "시스템에서 사용하기에 적합합니다." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "인증 정보" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다." -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "공급업체 마크업 비율" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "이 공급업체의 이름" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "공급업체 이름" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "응답 파일" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "공급업체의 마지막 처리 응답" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "공급업체의 통합 파일 경로" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "통합 경로" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1513,27 +1544,27 @@ msgstr "" "이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " "사용자 지정을 제공합니다." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "제품 태그의 내부 태그 식별자" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "태그 이름" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "제품 태그의 사용자 친화적인 이름" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "태그 표시 이름" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "제품 태그" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1542,15 +1573,15 @@ msgstr "" "제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" " 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "카테고리 태그" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "카테고리 태그" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1567,51 +1598,51 @@ msgstr "" "있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " "관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "이 카테고리를 대표하는 이미지 업로드" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "카테고리 이미지" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "상위 카테고리" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "카테고리 이름" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "이 카테고리의 이름을 입력합니다." -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "이 카테고리에 대한 자세한 설명 추가" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "카테고리 설명" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "우선순위" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1622,47 +1653,47 @@ msgstr "" "시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " "및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "이 브랜드 이름" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "브랜드 이름" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "브랜드 설명" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "이 브랜드와 연관된 선택적 카테고리" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "카테고리" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1675,68 +1706,72 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "관련 공급업체" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "판매 가격" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "관련 제품" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "재고 수량" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "공급업체의 SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "디지털 파일" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "시스템 속성" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "재고 항목" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1752,55 +1787,55 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "제품 디지털화 여부" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "제품 이름" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "제품 설명" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "부품 번호" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1813,64 +1848,64 @@ msgstr "" "사용됩니다. 속성에는 연관된 카테고리, 그룹, 값 유형 및 이름이 있습니다. 이 모델은 문자열, 정수, 실수, 부울, 배열, 객체 등 " "여러 유형의 값을 지원합니다. 이를 통해 동적이고 유연한 데이터 구조화가 가능합니다." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "이 속성의 그룹" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "문자열" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "정수" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Float" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "부울" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "배열" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "개체" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "속성 값의 유형" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "값 유형" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "이 속성의 이름" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "속성 이름" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "필터링 가능" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "속성" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1879,19 +1914,19 @@ msgstr "" "상품에 연결된 속성의 특정 값을 나타냅니다. '속성'을 고유한 '값'에 연결하여 제품 특성을 더 잘 구성하고 동적으로 표현할 수 " "있습니다." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "이 값의 속성" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "이 속성 값과 연관된 특정 제품" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "이 속성의 구체적인 값은 다음과 같습니다." -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1902,39 +1937,39 @@ msgstr "" "시스템에서 제품과 연관된 제품 이미지를 나타냅니다. 이 클래스는 이미지 파일 업로드, 특정 제품과의 연결, 표시 순서 결정 등의 기능을 " "포함하여 제품의 이미지를 관리하도록 설계되었습니다. 또한 이미지에 대한 대체 텍스트가 포함된 접근성 기능도 포함되어 있습니다." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "접근성을 위해 이미지에 대체 텍스트 제공" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "이미지 대체 텍스트" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "제품 이미지" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "우선순위 표시" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "제품 이미지" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1947,39 +1982,39 @@ msgstr "" "정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " "포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "할인 비율" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "프로모션 이름" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "프로모션 설명" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "포함된 제품" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "프로모션" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1989,23 +2024,23 @@ msgstr "" "원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" " 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "위시리스트" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2018,19 +2053,19 @@ msgstr "" "정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" " 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "다큐멘터리" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "다큐멘터리" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "해결되지 않음" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2046,59 +2081,59 @@ msgstr "" "저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" " 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "고객 주소 라인" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "주소 라인" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "거리" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "지구" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "도시" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "지역" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "우편 번호" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "국가" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "주소" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "주소" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2111,86 +2146,86 @@ msgstr "" "할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " "여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "백분율 할인" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "할당된 사용자" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "프로모션 코드" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "프로모션 코드" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2203,144 +2238,145 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "배송 주소" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "주문 상태" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "주문한 사용자" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "사용자" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "시간 확보" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "주문" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "잘못된 힘 값" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2357,108 +2393,108 @@ msgstr "" "작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " "제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "내부 의견" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "사용자 알림" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "상위 주문" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "제품 수량" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "제품 라인 상태" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "이름" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "통합 URL" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "인증 자격 증명" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2471,15 +2507,15 @@ msgstr "" "수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " "여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "다운로드" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "다운로드" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2491,78 +2527,74 @@ msgstr "" "설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" " 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "피드백 댓글" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "관련 주문 제품" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "제품 평가" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "피드백을 추가하려면 댓글, 평점, 주문 제품 고유번호를 제공해야 합니다." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "프로모코드 생성 중 오류가 발생했습니다: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "홈" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "문의하기" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "회사 소개" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "주문 확인" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "로고" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "안녕하세요 %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2571,58 +2603,58 @@ msgid "" msgstr "" "주문해 주셔서 감사합니다 #%(order.pk)s! 주문하신 상품이 입고되었음을 알려드립니다. 주문 세부 정보는 아래와 같습니다:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "합계" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "총 가격" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "궁금한 점이 있으면 언제든지 %(config.EMAIL_HOST_USER)s로 지원팀에 문의하세요." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "감사합니다,
%(config.PROJECT_NAME)s 팀" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "모든 권리 보유" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "주문 배송" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "안녕하세요 %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "주문이 성공적으로 처리되었습니다 №%(order_uuid)s! 주문 세부 정보는 아래와 같습니다:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2630,39 +2662,39 @@ msgstr "" "추가\n" " 정보" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "가치" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "궁금한 점이 있으면 언제든지 %(contact_email)s로 지원팀에 문의하세요." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "키" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "행 추가" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "프로모코드 부여" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2670,31 +2702,31 @@ msgstr "" "저희와 함께 해주셔서 감사합니다! 프로모션 코드가 부여되었습니다.\n" " 에 대한" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "주문해 주셔서 감사합니다! 구매를 확인하게 되어 기쁩니다. 주문 세부 정보는 아래와 같습니다:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "배송 가격" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "주문하신 상품은 다음 주소로 배송됩니다:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "감사합니다,
%(config.PROJECT_NAME)s 팀" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2702,55 +2734,55 @@ msgstr "" "모든 권리\n" " 예약됨" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "데이터와 시간 초과가 모두 필요합니다." -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | 문의 시작됨" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | 주문 확인" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 주문 배송됨" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 프로모코드 부여됨" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "이 작업을 수행할 수 있는 권한이 없습니다." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2759,40 +2791,40 @@ msgstr "" "사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " "Content-Type 헤더를 설정합니다." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "'문의하기' 양식 제출을 처리합니다." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "글로벌 검색 쿼리를 처리합니다." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2800,27 +2832,27 @@ msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" "이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "주문_제품_UUID는 필수입니다." -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "주문 제품에 제품이 없습니다." -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2828,7 +2860,7 @@ msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" "이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2837,11 +2869,11 @@ msgstr "" "요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " "리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "현재 버전의 eVibes를 반환합니다." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2853,7 +2885,7 @@ msgstr "" "Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자" " 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2865,7 +2897,7 @@ msgstr "" "처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된" " 방법을 제공합니다." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2878,7 +2910,7 @@ msgstr "" "클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 " "등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2890,7 +2922,7 @@ msgstr "" "기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 " "기능은 DjangoFilterBackend를 통해 제공됩니다." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2902,7 +2934,7 @@ msgstr "" "역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 " "액세스할 수 있도록 권한을 적용합니다." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2912,7 +2944,7 @@ msgstr "" "브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 " "클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2927,7 +2959,7 @@ msgstr "" "API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " "메서드가 포함되어 있습니다." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2939,7 +2971,7 @@ msgstr "" " 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " "통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2953,7 +2985,7 @@ msgstr "" "구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " "사용합니다." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2968,7 +3000,7 @@ msgstr "" "엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " "권한을 적용합니다." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2980,25 +3012,25 @@ msgstr "" "수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" " 피드백 처리를 위한 세부 작업도 제공합니다." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3012,7 +3044,7 @@ msgstr "" "내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" " 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3024,12 +3056,12 @@ msgstr "" "사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " "동작이 포함되어 있습니다." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e69b8e3d41676858256a58893a7ca937512cc087 GIT binary patch literal 90095 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 BLoNUS literal 0 HcmV?d00001 diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/engine/core/locale/nl_NL/LC_MESSAGES/django.po similarity index 75% rename from core/locale/nl_NL/LC_MESSAGES/django.po rename to engine/core/locale/nl_NL/LC_MESSAGES/django.po index d607cb10..76fa4d39 100644 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/core/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Uniek ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "Unieke ID wordt gebruikt om elk databaseobject te identificeren" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Is actief" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,158 +33,162 @@ msgstr "" "Als false is ingesteld, kan dit object niet worden gezien door gebruikers " "zonder de benodigde toestemming" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Gemaakt" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Wanneer het object voor het eerst in de database verscheen" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Gewijzigd" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Wanneer het object voor het laatst bewerkt is" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Vertalingen" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Algemeen" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relaties" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "extra informatie" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metagegevens" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Tijdstempels" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activeer geselecteerde %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Geselecteerde items zijn geactiveerd!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deactiveer geselecteerd %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Geselecteerde items zijn gedeactiveerd!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attribuut Waarde" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attribuutwaarden" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Afbeelding" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Voorraad" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aandelen" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Producten bestellen" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Kinderen" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Config" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Kern" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Afgewerkt" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "leveren" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Geleverd" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Geannuleerd" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislukt" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "In afwachting van" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Geaccepteerd" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Geld terug" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Betaling" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Succesvol" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -192,32 +196,32 @@ msgstr "" "Alleen een sleutel gebruiken om toegestane gegevens uit de cache te lezen.\n" "Sleutel, gegevens en time-out met verificatie toepassen om gegevens naar de cache te schrijven." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Een lijst met ondersteunde talen opvragen" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Verkrijg de blootstelbare parameters van de applicatie" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Stuur een bericht naar het ondersteuningsteam" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Vraag een CORSed URL op. Alleen https toegestaan." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Eindpunt voor globaal zoeken om in alle tabellen van het project te zoeken" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Een bestelling kopen als bedrijf" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -225,144 +229,145 @@ msgstr "" "Koop een bestelling in als een bedrijf, met behulp van de meegeleverde " "`producten` met `product_uuid` en `attributen`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Alle attribuutgroepen weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Een enkele groep kenmerken ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Een attribuutgroep maken" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Een attribuutgroep verwijderen" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Een bestaande attribuutgroep herschrijven en niet-wijzigbare attributen " "opslaan" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Enkele velden van een bestaande attribuutgroep herschrijven door niet-" "wijzigbare velden op te slaan" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Alle attributen weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Een attribuut maken" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Een attribuut verwijderen" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Alle attribuutwaarden weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Een waarde voor een enkel kenmerk ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Een attribuutwaarde maken" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Een attribuutwaarde verwijderen" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Een bestaande attribuutwaarde herschrijven waarbij niet-wijzigbare " "attributen worden opgeslagen" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande attribuutwaarde door niet-" "wijzigbare velden op te slaan" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Alle categorieën weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Categorie UUID of slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Een categorie maken" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Een categorie verwijderen" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta momentopname" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "" "Geeft als resultaat een momentopname van de SEO-metagegevens van de " "categorie" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Categorie UUID of slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Alle categorieën weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Voor niet-personeelsleden worden alleen hun eigen bestellingen " "geretourneerd." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -370,36 +375,36 @@ msgstr "" "Hoofdlettergevoelig substring zoeken in human_readable_id, " "order_products.product.name en order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filter orders met buy_time >= deze ISO 8601 datetime" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filter orders met buy_time <= deze ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filter op exacte volgorde UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filter op exacte, door mensen leesbare bestel-ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filter op e-mail van gebruiker (hoofdlettergevoelige exacte overeenkomst)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filter op UUID van gebruiker" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filter op bestelstatus (hoofdlettergevoelige substringmatch)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -409,37 +414,41 @@ msgstr "" "gemaakt, gewijzigd, buy_time, willekeurig. Voorvoegsel met '-' voor aflopend" " (bijv. '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Een enkele categorie ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Order UUID of menselijk leesbare id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Een attribuut maken" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Werkt niet voor gebruikers die geen personeel zijn." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Een attribuut verwijderen" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Een bestaande categorie herschrijven en niet-wijzigbare items opslaan" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Aankoopprijs bij bestelling" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -449,21 +458,21 @@ msgstr "" "wordt de aankoop afgerond met het saldo van de gebruiker; als " "`force_payment` wordt gebruikt, wordt een transactie gestart." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "een bestelling kopen zonder een account aan te maken" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "" "Rondt de aankoop van de bestelling af voor een niet-geregistreerde " "gebruiker." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Een product aan de bestelling toevoegen" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -471,13 +480,13 @@ msgstr "" "Voegt een product toe aan een bestelling met de opgegeven `product_uuid` en " "`attributen`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Voeg een lijst met producten toe om te bestellen, hoeveelheden tellen niet " "mee" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -485,11 +494,11 @@ msgstr "" "Voegt een lijst met producten toe aan een bestelling met behulp van de " "opgegeven `product_uuid` en `attributen`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Een product uit de bestelling verwijderen" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -497,11 +506,11 @@ msgstr "" "Verwijdert een product uit een bestelling met behulp van de opgegeven " "`product_uuid` en `attributen`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Verwijder een product uit de bestelling, hoeveelheden tellen niet mee" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -509,85 +518,85 @@ msgstr "" "Verwijdert een lijst met producten uit een bestelling met behulp van de " "opgegeven `product_uuid` en `attributen`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Alle attributen weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Voor niet-personeelsleden worden alleen hun eigen verlanglijstjes " "geretourneerd." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Een enkel kenmerk ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Een attribuut maken" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Werkt niet voor gebruikers die geen personeel zijn." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Een attribuut verwijderen" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Een bestaand attribuut herschrijven en niet-wijzigbare attributen opslaan" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaand attribuut door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Een product aan de bestelling toevoegen" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Voegt een product toe aan een verlanglijstje met behulp van de opgegeven " "`product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Een product uit het verlanglijstje verwijderen" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Verwijdert een product van een verlanglijstje met behulp van de opgegeven " "`product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Veel producten toevoegen aan het verlanglijstje" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Voegt veel producten toe aan een verlanglijstje met behulp van de opgegeven " "`product_uuids`." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Verwijdert een groot aantal producten uit een verlanglijstje met behulp van " "de opgegeven `product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -607,15 +616,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Alle producten weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exacte) UUID van product" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -623,696 +632,710 @@ msgstr "" "Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met `-` voor aflopend. \n" "**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, willekeurig" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Een enkel product ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Product UUID of Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Een product maken" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Een bestaand product herschrijven met behoud van niet-wijzigbare velden" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Enkele velden van een bestaand product bijwerken, met behoud van niet-" "wijzigbare velden" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Een product verwijderen" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "somt alle toegestane feedbacks voor een product op" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "" "Geeft als resultaat een momentopname van de SEO-metagegevens van het product" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Vermeld alle adressen" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Een enkel adres ophalen" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Een nieuw adres maken" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Een adres verwijderen" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Een heel adres bijwerken" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Een adres gedeeltelijk bijwerken" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Automatische adresinvoer" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ruwe gegevensquerystring, gelieve aan te vullen met gegevens van geo-IP " "eindpunt" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "beperkt de hoeveelheid resultaten, 1 < limiet < 10, standaard: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "alle feedbacks weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "een enkele feedback ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "een feedback creëren" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "een feedback verwijderen" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "een bestaande feedback herschrijven waarbij niet-wijzigbare gegevens worden " "opgeslagen" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "alle order-productrelaties weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "een enkele bestelling-productrelatie ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "een nieuwe bestelling-product relatie maken" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "een bestaande order-productrelatie vervangen" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "een bestaande order-productrelatie gedeeltelijk bijwerken" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "een order-productrelatie verwijderen" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "feedback toevoegen of verwijderen op een order-productrelatie" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Alle merken weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Een enkel merk ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Merk UUID of slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Een merk creëren" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Een merk verwijderen" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Een bestaand merk herschrijven door niet-editables op te slaan" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot voor merk" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Alle leveranciers weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Een enkele leverancier ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Een leverancier maken" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Een verkoper verwijderen" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Een bestaande verkoper herschrijven en niet-wijzigbare gegevens opslaan" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Alle productafbeeldingen weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Een enkele productafbeelding ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Een productafbeelding maken" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Een productafbeelding verwijderen" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Een bestaande productafbeelding herschrijven waarbij niet-wijzigbare " "gegevens worden opgeslagen" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Alle promotiecodes weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Een enkele promotiecode ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Een promotiecode maken" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Een promotiecode verwijderen" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Een bestaande promocode herschrijven die niet-wijzigbaar is" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Alle promoties weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Een enkele promotie ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Maak een promotie" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Een promotie verwijderen" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Een bestaande promotie herschrijven waarbij niet-wijzigbare gegevens worden " "opgeslagen" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Alle aandelen weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Een enkele voorraad ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Een voorraadrecord maken" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Een voorraadrecord verwijderen" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Een bestaand voorraadrecord herschrijven waarbij niet-wijzigbare gegevens " "worden opgeslagen" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Alle producttags weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Een enkele producttag ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Een producttag maken" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Een producttag verwijderen" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Een bestaande producttag herschrijven en niet-wijzigbare tags opslaan" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Herschrijf sommige velden van een bestaande categorie door niet-wijzigbare " "velden op te slaan" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Zoek op" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Naam" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categorieën" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categorieën Naaktslakken" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min Prijs" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maximale prijs" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Is actief" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Merk" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attributen" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Hoeveelheid" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Slak" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is digitaal" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Subcategorieën opnemen" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Er moet een categorie_uuid zijn om include_subcategories vlag te gebruiken" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Zoeken (ID, productnaam of onderdeelnummer)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Gekocht na (inclusief)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Eerder gekocht (inclusief)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "E-mail gebruiker" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "Gebruiker UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Menselijk leesbare ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Ouder" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Hele categorie (heeft minstens 1 product of niet)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Niveau" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Sleutel om te zoeken of te plaatsen in de cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Gegevens om op te slaan in de cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Time-out in seconden om de gegevens in de cache te plaatsen" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Gecachte gegevens" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Een product aan de bestelling toevoegen" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Bestelling {order_uuid} niet gevonden!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Alle producten uit de bestelling verwijderen" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Een bestelling kopen" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Een actie uitvoeren op een lijst met producten in de bestelling" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Verwijderen/toevoegen" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Een actie uitvoeren op een lijst met producten in het verlanglijstje" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Geef de waarde `wishlist_uuid` op." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "wens {wishlist_uuid} niet gevonden!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Een product aan de bestelling toevoegen" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Een bestelling kopen" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Stuur de attributen als de string opgemaakt als attr1=waarde1,attr2=waarde2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Feedback toevoegen of verwijderen voor het orderproduct" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "De actie moet `toevoegen` of `verwijderen` zijn!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} niet gevonden!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limiet moet tussen 1 en 10 liggen" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attributen" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gegroepeerde kenmerken" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Groepen van kenmerken" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Merken" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorieën" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Opwaarderingspercentage" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Welke attributen en waarden kunnen worden gebruikt om deze categorie te " "filteren." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimale en maximale prijzen voor producten in deze categorie, indien " "beschikbaar." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags voor deze categorie" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Producten in deze categorie" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Verkopers" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breedtegraad (Y-coördinaat)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Lengtegraad (X-coördinaat)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hoe" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Waarderingswaarde van 1 tot en met 10, of 0 indien niet ingesteld." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Meldingen" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Factuuradres" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1320,202 +1343,210 @@ msgstr "" "Verzendadres voor deze bestelling, leeg laten als dit hetzelfde is als het " "factuuradres of als dit niet van toepassing is" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totale prijs van deze bestelling" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totale hoeveelheid producten in bestelling" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Zijn alle producten in de bestelling digitaal" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Bestellingen" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Afbeelding URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Merk" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attribuutgroepen" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Prijs" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Hoeveelheid" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Aantal terugkoppelingen" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Korting" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Producten" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promoties" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Product" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Verlanglijst" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Product tags" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Getagde categorieën" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Categorieën' tags" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Naam project" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Bedrijf E-mail" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Bedrijfsnaam" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adres" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Telefoonnummer bedrijf" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "e-mail van', soms moet deze worden gebruikt in plaats van de " "hostgebruikerswaarde" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Gebruiker e-mail hosten" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maximumbedrag voor betaling" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimumbedrag voor betaling" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analytics-gegevens" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Advertentiegegevens" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuratie" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Taalcode" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Naam van de taal" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Taalvlag, indien aanwezig :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Een lijst met ondersteunde talen opvragen" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Producten zoekresultaten" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Zoekresultaten" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1528,23 +1559,23 @@ msgstr "" "hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en" " effectiever beheren van attributen in een complex systeem." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Ouder van deze groep" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Ouderattribuutgroep" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attribuutgroep" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1563,50 +1594,50 @@ msgstr "" "metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen " "die communiceren met externe verkopers." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " "van de verkoper" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Authenticatie-info" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Verkoper winstpercentage" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Naam van deze verkoper" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Naam verkoper" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "responsbestand" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "laatste verwerkingsreactie van verkoper" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Pad integratiebestand verkoper" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integratie pad" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1621,27 +1652,27 @@ msgstr "" "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tag naam" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Productlabel" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1652,15 +1683,15 @@ msgstr "" "associëren en te classificeren. Ze bevat attributen voor een interne " "tagidentifier en een gebruiksvriendelijke weergavenaam." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "categorie tag" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "categorie tags" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1683,51 +1714,51 @@ msgstr "" " kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Categorie afbeelding" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definieer een toeslagpercentage voor producten in deze categorie" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Oudercategorie" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Naam categorie" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Geef deze categorie een naam" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Categorie beschrijving" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioriteit" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1741,47 +1772,47 @@ msgstr "" "prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " "georganiseerd en weergegeven in de applicatie." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Merknaam" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Merknaam" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1798,68 +1829,72 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Bijbehorend product" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "De prijs die voor dit product aan de verkoper is betaald" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Systeemeigenschappen" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1880,55 +1915,55 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Naam product" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1945,66 +1980,66 @@ msgstr "" "boolean, array en object. Dit maakt dynamische en flexibele " "gegevensstructurering mogelijk." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Groep van dit kenmerk" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "String" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Integer" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Vlotter" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Booleaans" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Object" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type waarde van het kenmerk" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Waardetype" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Naam van dit kenmerk" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Naam attribuut" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "kan worden gefilterd" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Welke attributen en waarden kunnen worden gebruikt om deze categorie te " "filteren." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribuut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2015,19 +2050,19 @@ msgstr "" "betere organisatie en dynamische weergave van productkenmerken mogelijk " "maakt." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribuut van deze waarde" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "De specifieke waarde voor dit kenmerk" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2042,39 +2077,39 @@ msgstr "" "weergavevolgorde te bepalen. Het bevat ook een toegankelijkheidsfunctie met " "alternatieve tekst voor de afbeeldingen." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2091,39 +2126,39 @@ msgstr "" "integreert met de productcatalogus om de betreffende artikelen in de " "campagne te bepalen." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promotie" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2136,23 +2171,23 @@ msgstr "" "toevoegen en verwijderen van producten, maar ook bewerkingen voor het " "toevoegen en verwijderen van meerdere producten tegelijk." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2169,19 +2204,19 @@ msgstr "" "Het breidt functionaliteit uit van specifieke mixins en biedt extra " "aangepaste functies." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentaire" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2202,59 +2237,59 @@ msgstr "" "klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, " "wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresregel" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Straat" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "District" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Stad" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Regio" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postcode" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Land" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adres" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adressen" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2272,76 +2307,76 @@ msgstr "" "te valideren en toe te passen op een bestelling, waarbij ervoor wordt " "gezorgd dat aan de beperkingen wordt voldaan." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " "gebruikt" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet " "gebruikt" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2349,16 +2384,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2376,141 +2411,142 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " "wordt de tabelweergave gebruikt" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Gebruiker" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Bestel" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "U kunt geen producten toevoegen aan een bestelling die niet in behandeling " "is." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "U kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2518,7 +2554,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2526,7 +2562,7 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2549,110 +2585,110 @@ msgstr "" "digitale producten. Het model integreert met de modellen Order en Product en" " slaat een verwijzing ernaar op." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Naam" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL van de integratie" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM's" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "CRM link van bestelling" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2669,15 +2705,15 @@ msgstr "" "om een URL te genereren voor het downloaden van de activa wanneer de " "bijbehorende order een voltooide status heeft." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Downloaden" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Downloads" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2693,82 +2729,78 @@ msgstr "" "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " "beheren." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verwijst naar het specifieke product in een bestelling waar deze feedback " "over gaat" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Productbeoordeling" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Om feedback toe te voegen, moet je een opmerking, beoordeling en " "productidentificatie opgeven." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Fout tijdens aanmaken promocode: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Neem contact met ons op" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Over ons" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Orderbevestiging" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hallo %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2779,23 +2811,23 @@ msgstr "" "informeren dat we uw bestelling in behandeling hebben genomen. Hieronder " "vindt u de gegevens van uw bestelling:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Totaal" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Totale prijs" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2804,28 +2836,28 @@ msgstr "" "Als je vragen hebt, neem dan gerust contact op met onze ondersteuning op " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Vriendelijke groeten,
het %(config.PROJECT_NAME)s team" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Alle rechten voorbehouden" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Bestelling geleverd" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2834,7 +2866,7 @@ msgstr "" "We hebben uw bestelling succesvol verwerkt №%(order_uuid)s! Hieronder vindt " "u de details van uw bestelling:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2842,13 +2874,13 @@ msgstr "" "aanvullende\n" " informatie" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Waarde" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2857,26 +2889,26 @@ msgstr "" "Als je vragen hebt, kun je contact opnemen met onze klantenservice op " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Sleutel" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Rij toevoegen" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode toegekend" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2884,8 +2916,8 @@ msgstr "" "Bedankt dat je bij ons bent gebleven! We hebben u een promocode\n" " voor" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2893,24 +2925,24 @@ msgstr "" "Bedankt voor uw bestelling! We zijn blij om uw aankoop te bevestigen. " "Hieronder vindt u de gegevens van uw bestelling:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Verzendprijs" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Je bestelling wordt afgeleverd op het volgende adres:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Vriendelijke groeten,
Het %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2918,51 +2950,51 @@ msgstr "" "alle rechten\n" " voorbehouden" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Zowel gegevens als time-out zijn vereist" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | neem contact met ons op" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbevestiging" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestelling afgeleverd" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode toegekend" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "U hebt geen toestemming om deze actie uit te voeren." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " "h{max_height} pixels" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2971,7 +3003,7 @@ msgstr "" "terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " "XML bevat." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2981,16 +3013,16 @@ msgstr "" "verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " "de Content-Type header in voor XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Geeft een lijst met ondersteunde talen en de bijbehorende informatie." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Retourneert de parameters van de website als een JSON-object." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2998,11 +3030,11 @@ msgstr "" "Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" " een opgegeven sleutel en time-out." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Handelt `contact met ons` formulier inzendingen af." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3010,15 +3042,15 @@ msgstr "" "Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" " POST-verzoeken." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Handelt globale zoekopdrachten af." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3026,29 +3058,29 @@ msgstr "" "Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n" "Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid is vereist" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" "de bestelling moet worden betaald voordat het digitale actief kan worden " "gedownload" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Het bestelde product heeft geen product" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon niet gevonden" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3056,7 +3088,7 @@ msgstr "" "Handelt verzoeken af voor de favicon van een website.\n" "Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3067,11 +3099,11 @@ msgstr "" "Django admin-interface. Het gebruikt Django's `redirect` functie voor het " "afhandelen van de HTTP-omleiding." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Geeft als resultaat de huidige versie van eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3085,7 +3117,7 @@ msgstr "" "ondersteuning voor dynamische serializer klassen op basis van de huidige " "actie, aanpasbare machtigingen, en rendering formaten." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3099,7 +3131,7 @@ msgstr "" "laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken " "en reacties voor AttributeGroup-gegevens te verwerken." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3116,7 +3148,7 @@ msgstr "" " gedetailleerde versus vereenvoudigde informatie afhankelijk van het " "verzoek." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3130,7 +3162,7 @@ msgstr "" "viewset mechanismen en gebruikt passende serializers voor verschillende " "acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3145,7 +3177,7 @@ msgstr "" "rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben" " tot specifieke gegevens." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3157,7 +3189,7 @@ msgstr "" "Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " "van API endpoints voor Merk objecten te vereenvoudigen." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3176,7 +3208,7 @@ msgstr "" "machtigingen en het verkrijgen van toegang tot gerelateerde feedback over " "een product." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3191,7 +3223,7 @@ msgstr "" " van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" "gerelateerde bronnen via het Django REST framework." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3208,7 +3240,7 @@ msgstr "" "implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " "Django's filtersysteem voor het opvragen van gegevens." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3228,7 +3260,7 @@ msgstr "" "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "dienovereenkomstig permissies af tijdens de interactie met ordergegevens." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3243,12 +3275,12 @@ msgstr "" " een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " "instanties" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3256,16 +3288,16 @@ msgstr "" "Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" " API-acties." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Vertegenwoordigt een view set voor het beheren van promoties." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3284,7 +3316,7 @@ msgstr "" "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verleend." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3298,12 +3330,12 @@ msgstr "" "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.mo b/engine/core/locale/no_NO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..474606dc8bf4d0463979f59bfafb43656892ff38 GIT binary patch literal 87740 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,20 +13,20 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unik ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Unik ID brukes til å identifisere alle databaseobjekter på en sikker måte" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Er aktiv" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -34,158 +34,162 @@ msgstr "" "Hvis dette objektet er satt til false, kan det ikke ses av brukere uten " "nødvendig tillatelse" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Opprettet" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Når objektet først dukket opp i databasen" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modifisert" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Når objektet sist ble redigert" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Oversettelser" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Generelt" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relasjoner" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "ytterligere informasjon" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Tidsstempler" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktiver valgt %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Utvalgte elementer har blitt aktivert!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Deaktiver valgt %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Utvalgte elementer har blitt deaktivert!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attributtverdi" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attributtverdier" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Bilde" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Lager" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Aksjer" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Bestill produkt" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Bestill produkter" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Barn" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfigurer" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Kjerne" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Ferdig" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Leverer" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Leveres" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Avlyst" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Mislyktes" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Avventer" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Godkjent" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Penger returnert" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Betaling" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Vellykket" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -193,31 +197,31 @@ msgstr "" "Bruk bare en nøkkel for å lese tillatte data fra hurtigbufferen.\n" "Bruk nøkkel, data og tidsavbrudd med autentisering for å skrive data til hurtigbufferen." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Få en liste over språk som støttes" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Hent applikasjonens eksponerbare parametere" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Send en melding til supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Be om en CORSed URL. Bare https er tillatt." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Globalt søkeendepunkt for å søke på tvers av prosjektets tabeller" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Kjøp en ordre som en bedrift" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -225,140 +229,141 @@ msgstr "" "Kjøp en ordre som en bedrift, ved hjelp av de angitte `produktene` med " "`product_uuid` og `attributter`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Liste over alle attributtgrupper (enkel visning)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Hent en enkelt attributtgruppe (detaljert visning)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Opprett en attributtgruppe" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Slett en attributtgruppe" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Skriv om en eksisterende attributtgruppe for å lagre ikke-redigerbare " "attributter" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende attributtgruppe for å lagre ikke-" "redigerbare felt" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Liste over alle attributter (enkel visning)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Hent et enkelt attributt (detaljert visning)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Opprett et attributt" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Slett et attributt" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-" "redigerbare felt" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Liste over alle attributtverdier (enkel visning)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Hent en enkelt attributtverdi (detaljert visning)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Opprett en attributtverdi" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Slett en attributtverdi" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Omskrive en eksisterende attributtverdi for å lagre ikke-redigerbare " "attributter" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende attributtverdi og lagre ikke-" "redigerbare felt" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Liste over alle kategorier (enkel visning)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Hent en enkelt kategori (detaljert visning)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Kategori UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Opprett en kategori" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Slett en kategori" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta-øyeblikksbilde" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Returnerer et øyeblikksbilde av kategoriens SEO-metadata" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Kategori UUID eller slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Liste over alle kategorier (enkel visning)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "For ikke-ansatte brukere returneres bare deres egne bestillinger." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -366,35 +371,35 @@ msgstr "" "Søk etter store og små bokstaver på tvers av human_readable_id, " "order_products.product.name og order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrer ordrer med buy_time >= denne ISO 8601-datoen" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrer bestillinger med buy_time <= denne ISO 8601-datoen" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrer etter nøyaktig ordre UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrer etter nøyaktig bestillings-ID som kan leses av mennesker" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "Filtrer etter brukerens e-post (store og små bokstaver er ufølsomme)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrer etter brukerens UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filtrer etter ordrestatus (skiller mellom store og små bokstaver)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -404,37 +409,41 @@ msgstr "" "created, modified, buy_time, random. Prefiks med '-' for synkende rekkefølge" " (f.eks. '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Hent en enkelt kategori (detaljert visning)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Bestill UUID eller menneskelig lesbar id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Opprett et attributt" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Fungerer ikke for brukere som ikke er ansatte." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Slett et attributt" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Skriv om en eksisterende kategori som lagrer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -444,19 +453,19 @@ msgstr "" "hjelp av brukerens saldo; hvis `force_payment` brukes, iverksettes en " "transaksjon." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "kjøpe en ordre uten å opprette konto" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "fullfører bestillingen for en ikke-registrert bruker." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Legg til et produkt i bestillingen" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -464,12 +473,12 @@ msgstr "" "Legger til et produkt i en bestilling ved hjelp av de angitte `product_uuid`" " og `attributtene`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Legg til en liste over produkter som skal bestilles, antall vil ikke telle" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -477,11 +486,11 @@ msgstr "" "Legger til en liste med produkter i en bestilling ved hjelp av de angitte " "`product_uuid` og `attributtene`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Fjern et produkt fra bestillingen" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -489,11 +498,11 @@ msgstr "" "Fjerner et produkt fra en bestilling ved hjelp av de angitte `product_uuid` " "og `attributtene`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Fjern et produkt fra bestillingen, antall vil ikke telle med" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -501,84 +510,84 @@ msgstr "" "Fjerner en liste med produkter fra en bestilling ved hjelp av de angitte " "`product_uuid` og `attributtene`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Liste over alle attributter (enkel visning)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "For brukere som ikke er ansatte, returneres bare deres egne ønskelister." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Hent et enkelt attributt (detaljert visning)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Opprett et attributt" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Fungerer ikke for brukere som ikke er ansatte." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Slett et attributt" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Skriv om et eksisterende attributt for å lagre ikke-redigerbare attributter" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Skriv om noen av feltene i et eksisterende attributt for å lagre ikke-" "redigerbare felt" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Legg til et produkt i bestillingen" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Legger til et produkt på en ønskeliste ved hjelp av den angitte " "`product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Fjern et produkt fra ønskelisten" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Fjerner et produkt fra en ønskeliste ved hjelp av den angitte " "`product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Legg til mange produkter på ønskelisten" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Legger til mange produkter på en ønskeliste ved hjelp av de angitte " "`product_uuids`." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Fjerner mange produkter fra en ønskeliste ved hjelp av de angitte " "`product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -598,15 +607,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-beskrivelse=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Liste over alle produkter (enkel visning)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(nøyaktig) Produkt UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -614,690 +623,704 @@ msgstr "" "Kommaseparert liste over felt som skal sorteres etter. Prefiks med `-` for synkende sortering. \n" "**Tillatt:** uuid, vurdering, navn, slug, opprettet, endret, pris, tilfeldig" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Hent et enkelt produkt (detaljert visning)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Opprett et produkt" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Skriv om et eksisterende produkt, og behold ikke-redigerbare felt" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Oppdater noen av feltene i et eksisterende produkt, men behold feltene som " "ikke kan redigeres" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Slett et produkt" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "viser alle tillatte tilbakemeldinger for et produkt" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerer et øyeblikksbilde av produktets SEO-metadata" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Liste over alle adresser" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Hent en enkelt adresse" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Opprett en ny adresse" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Slett en adresse" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Oppdater en hel adresse" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Delvis oppdatering av en adresse" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autofullfør adresseinndata" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Spørringsstreng for rådata, vennligst legg til data fra geo-IP-sluttpunkt" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begrenser resultatmengden, 1 < grense < 10, standard: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "liste opp alle tilbakemeldinger (enkel visning)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "hente en enkelt tilbakemelding (detaljert visning)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "skape en tilbakemelding" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "slette en tilbakemelding" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "omskrive en eksisterende tilbakemelding som lagrer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "omskrive noen felter i en eksisterende tilbakemelding og lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "liste opp alle ordre-produkt-relasjoner (enkel visning)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "hente en enkelt ordre-produkt-relasjon (detaljert visning)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "opprette en ny ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "erstatte en eksisterende ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "delvis oppdatere en eksisterende ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "slette en ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Liste over alle merker (enkel visning)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Hent ett enkelt merke (detaljert visning)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Merkevare UUID eller slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Skap en merkevare" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Slett et merke" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Skriv om en eksisterende merkevare som sparer ikke-redigerbare produkter" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta-øyeblikksbilde for merkevare" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Liste over alle leverandører (enkel visning)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Hent en enkelt leverandør (detaljert visning)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Opprett en leverandør" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Slett en leverandør" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Skriv om en eksisterende leverandør som lagrer ikke-redigerbare filer" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Liste over alle produktbilder (enkel visning)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Hent et enkelt produktbilde (detaljert visning)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Lag et produktbilde" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Slett et produktbilde" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Skriv om et eksisterende produktbilde og lagre ikke-redigerbare elementer" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Liste over alle kampanjekoder (enkel visning)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Hent en enkelt kampanjekode (detaljert visning)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Opprett en kampanjekode" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Slett en kampanjekode" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Skriv om en eksisterende kampanjekode for å lagre ikke-redigerbare koder" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Liste over alle kampanjer (enkel visning)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Hent en enkelt kampanje (detaljert visning)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Opprett en kampanje" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Slett en kampanje" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Skriv om en eksisterende kampanje for å lagre ikke-redigerbare elementer" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Liste over alle aksjer (enkel visning)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Hent en enkelt aksje (detaljert visning)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Opprett en lagerpost" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Slett en lagerpost" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Skriv om en eksisterende lagerpost og lagre ikke-redigerbare varer" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Liste over alle produkttagger (enkel visning)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Hent en enkelt produkttagg (detaljert visning)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Opprett en produkttagg" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Slett en produkttagg" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Skriv om en eksisterende produkttagg for å lagre ikke-redigerbare produkter" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Skriv om noen av feltene i en eksisterende kategori for å lagre ikke-" "redigerbare" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Ingen søkeord oppgitt." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Søk" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Navn" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Snegler" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tagger" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maks pris" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Merkevare" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Egenskaper" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Antall" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Snegl" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Er Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det må finnes en category_uuid for å bruke include_subcategories-flagget" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Søk (ID, produktnavn eller delenummer)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Kjøpt etter (inklusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Kjøpt før (inkludert)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Brukerens e-post" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "Bruker UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Menneskelig lesbar ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Foreldre" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har minst 1 produkt eller ikke)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Nivå" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøkkel å lete etter i eller legge inn i hurtigbufferen" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data som skal lagres i hurtigbufferen" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tidsavbrudd i sekunder for å legge inn data i hurtigbufferen" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Bufret data" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Legg til et produkt i bestillingen" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke funnet!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Fjern alle produktene fra bestillingen" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Kjøp en ordre" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Utfør en handling på en liste over produkter i bestillingen" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Fjern/legg til" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Handlingen må enten være \"legg til\" eller \"fjern\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Utføre en handling på en liste over produkter i ønskelisten" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vennligst oppgi verdien `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke funnet!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Legg til et produkt i bestillingen" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Kjøp en ordre" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Send attributtene som en streng formatert som attr1=verdi1,attr2=verdi2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Handlingen må være enten `add` eller `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestill produkt {order_product_uuid} ikke funnet!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Grensen må være mellom 1 og 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Egenskaper" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperte attributter" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper av attributter" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Merkevarer" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Påslag i prosent" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Hvilke attributter og verdier som kan brukes til å filtrere denne " "kategorien." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimums- og maksimumspriser for produkter i denne kategorien, hvis " "tilgjengelig." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tagger for denne kategorien" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denne kategorien" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverandører" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Breddegrad (Y-koordinat)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Lengdegrad (X-koordinat)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hvordan" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Vurderingsverdi fra 1 til og med 10, eller 0 hvis den ikke er angitt." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Varsler" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Faktureringsadresse" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1305,200 +1328,208 @@ msgstr "" "Leveringsadresse for denne bestillingen, la den stå tom hvis den er den " "samme som faktureringsadressen eller hvis den ikke er relevant" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totalpris for denne bestillingen" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totalt antall produkter i bestillingen" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Er alle produktene i bestillingen digitale" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Bestillinger" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Bilde-URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Bilder av produktet" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Merkevare" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributtgrupper" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Pris" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Antall" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antall tilbakemeldinger" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Rabattert pris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkter" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter på salg" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Ønskelister" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Merkede produkter" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Produktmerker" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Merkede kategorier" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategorier' tagger" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Prosjektets navn" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Selskapets e-post" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Selskapets navn" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Selskapets adresse" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Telefonnummer til selskapet" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"e-post fra\", noen ganger må den brukes i stedet for vertsbrukerverdien" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "E-post vert bruker" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maksimalt beløp for betaling" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimumsbeløp for betaling" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analysedata" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Annonsedata" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfigurasjon" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Språkkode" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Navn på språk" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Språkflagg, hvis det finnes :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Få en liste over språk som støttes" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Søkeresultater for produkter" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Søkeresultater for produkter" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1511,23 +1542,23 @@ msgstr "" "struktur. Dette kan være nyttig for å kategorisere og administrere " "attributter på en mer effektiv måte i et komplekst system." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Foreldre til denne gruppen" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Overordnet attributtgruppe" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attributtgruppe" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1546,49 +1577,49 @@ msgstr "" "som gjør den egnet for bruk i systemer som samhandler med " "tredjepartsleverandører." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrer legitimasjon og endepunkter som kreves for leverandørens API-" "kommunikasjon" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Autentiseringsinformasjon" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definer påslag for produkter som hentes fra denne leverandøren" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Leverandørens påslagsprosent" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Navn på denne leverandøren" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "svarfil" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "leverandørens siste behandlingssvar" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Leverandørens integrasjonsfilbane" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integreringsvei" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1603,27 +1634,27 @@ msgstr "" "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Intern tagg-identifikator for produkttaggen" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tagg navn" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Brukervennlig navn for produkttaggen" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Produktmerke" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1634,15 +1665,15 @@ msgstr "" "produkter. Den inneholder attributter for en intern tagg-identifikator og et" " brukervennlig visningsnavn." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "kategorimerke" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "kategorikoder" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1664,51 +1695,51 @@ msgstr "" "spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " "attributter som bilder, tagger eller prioritet." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Last opp et bilde som representerer denne kategorien" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Kategori bilde" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definer en påslagsprosent for produkter i denne kategorien" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Oppgi et navn for denne kategorien" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Legg til en detaljert beskrivelse for denne kategorien" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Beskrivelse av kategori" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioritet" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1722,47 +1753,47 @@ msgstr "" "prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " "merkerelaterte data i applikasjonen." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Navnet på dette merket" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Merkenavn" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Merkevare lite image" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Merkevare med stort image" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier som dette merket er assosiert med" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1778,68 +1809,72 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Salgspris" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Tilhørende produkt" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Antall på lager" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digital fil" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Systemattributter" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Lageroppføringer" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1860,55 +1895,55 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Er produktet digitalt" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Produktnavn" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Delenummer" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1924,66 +1959,66 @@ msgstr "" "float, boolsk, matrise og objekt. Dette gir mulighet for dynamisk og " "fleksibel datastrukturering." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Gruppe av dette attributtet" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Streng" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Heltall" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flyter" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolsk" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Type av attributtets verdi" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Verditype" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Navn på dette attributtet" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Attributtets navn" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Hvilke attributter og verdier som kan brukes til å filtrere denne " "kategorien." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attributt" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1993,19 +2028,19 @@ msgstr "" "produkt. Den knytter \"attributtet\" til en unik \"verdi\", noe som gir " "bedre organisering og dynamisk representasjon av produktegenskaper." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attributt for denne verdien" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Det spesifikke produktet som er knyttet til dette attributtets verdi" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Den spesifikke verdien for dette attributtet" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2019,39 +2054,39 @@ msgstr "" "produkter og bestemme visningsrekkefølgen. Den inneholder også en " "tilgjengelighetsfunksjon med alternativ tekst for bildene." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Gi alternativ tekst til bildet for tilgjengelighet" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Alt-tekst til bilder" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Produktbilde" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioritet på skjermen" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Produktbilder" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2067,39 +2102,39 @@ msgstr "" "produktene. Den integreres med produktkatalogen for å finne de berørte " "varene i kampanjen." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Rabattprosent" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Navn på kampanjen" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Inkluderte produkter" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Markedsføring" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2111,23 +2146,23 @@ msgstr "" "produkter, og støtter operasjoner som å legge til og fjerne produkter, samt " "operasjoner for å legge til og fjerne flere produkter samtidig." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2143,19 +2178,19 @@ msgstr "" "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " "funksjoner." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Dokumentarfilmer" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Uavklart" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2176,59 +2211,59 @@ msgstr "" " å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresselinje" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Gate" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distrikt" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "By" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Land" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresse" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresser" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2245,73 +2280,73 @@ msgstr "" "kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" " oppfylt." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unik kode som brukes av en bruker for å løse inn en rabatt" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Start gyldighetstid" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt " "ennå" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Tilordnet bruker" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Kampanjekode" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Kampanjekoder" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2319,16 +2354,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2345,140 +2380,141 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Order status" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur for varsler som skal vises til brukere, i admin-grensesnittet " "brukes tabellvisningen" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Bruker" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Kjøp tid" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Bestilling" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "En bruker kan bare ha én ventende ordre om gangen!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Du kan ikke legge til produkter i en bestilling som ikke er en pågående " "bestilling" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" "Du kan ikke legge til flere produkter enn det som er tilgjengelig på lager" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan ikke fjerne produkter fra en bestilling som ikke er en pågående " "bestilling" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bare kjøpe fysiske produkter med oppgitt leveringsadresse!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Du kan ikke kjøpe for øyeblikket, vennligst prøv igjen om noen minutter." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2486,14 +2522,14 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2516,109 +2552,109 @@ msgstr "" "Modellen integreres med Order- og Product-modellene og lagrer en referanse " "til disse." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Prisen kunden betalte for dette produktet på kjøpstidspunktet" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Brukervarsler" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Overordnet ordre" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Produktmengde" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status for produktlinjen" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "du kan ikke gi tilbakemelding på en bestilling som ikke er mottatt" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Navn" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2635,15 +2671,15 @@ msgstr "" "for å generere en URL for nedlasting av ressursen når den tilknyttede " "bestillingen har status som fullført." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Last ned" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Nedlastinger" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2658,82 +2694,78 @@ msgstr "" "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " "og administrere tilbakemeldingsdata på en effektiv måte." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen" " handler om" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Produktvurdering" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "du må oppgi en kommentar, vurdering og bestille produkt-uid for å legge til " "tilbakemelding." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Feil under opprettelse av promokode: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Hjem" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt oss" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Om oss" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Ordrebekreftelse" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hallo %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2744,23 +2776,23 @@ msgstr "" " vi har tatt bestillingen din i arbeid. Nedenfor er detaljene i bestillingen" " din:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Totalt" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Totalpris" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2769,28 +2801,28 @@ msgstr "" "Hvis du har spørsmål, er du velkommen til å kontakte vår support på " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Med vennlig hilsen,
teamet %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Alle rettigheter forbeholdt" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Bestilling levert" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2799,7 +2831,7 @@ msgstr "" "Vi har behandlet bestillingen din №%(order_uuid)s! Nedenfor er detaljene i " "bestillingen din:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2807,13 +2839,13 @@ msgstr "" "ytterligere\n" " informasjon" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Verdi" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2822,26 +2854,26 @@ msgstr "" "Hvis du har spørsmål, er du velkommen til å kontakte vår support på " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Nøkkel" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Legg til rad" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promokode innvilget" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2849,8 +2881,8 @@ msgstr "" "Takk for at du bor hos oss! Vi har gitt deg en promokode\n" " for" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2858,24 +2890,24 @@ msgstr "" "Takk for bestillingen din! Vi er glade for å kunne bekrefte kjøpet ditt. " "Nedenfor er detaljene for bestillingen din:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Fraktpris" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Bestillingen din vil bli levert til følgende adresse:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Med vennlig hilsen, %(config.PROJECT_NAME)s-teamet" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2883,49 +2915,49 @@ msgstr "" "Alle rettigheter\n" " forbeholdt" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data og tidsavbrudd er påkrevd" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakt oss initiert" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Ordrebekreftelse" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Bestilling levert" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promokode gitt" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Du har ikke tillatelse til å utføre denne handlingen." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL må være konfigurert!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Bildedimensjonene bør ikke overstige b{max_width} x h{max_height} piksler!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2933,7 +2965,7 @@ msgstr "" "Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den" " sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2943,17 +2975,17 @@ msgstr "" "behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " "og angir overskriften Content-Type for XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over språk som støttes, med tilhørende informasjon." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer nettstedets parametere som et JSON-objekt." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2961,11 +2993,11 @@ msgstr "" "Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " "spesifisert nøkkel og tidsavbrudd." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2973,15 +3005,15 @@ msgstr "" "Håndterer forespørsler om behandling og validering av URL-er fra innkommende" " POST-forespørsler." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Håndterer globale søk." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2989,27 +3021,27 @@ msgstr "" "Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n" "Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrevd" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "bestillingen må betales før nedlasting av den digitale ressursen" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3017,7 +3049,7 @@ msgstr "" "Håndterer forespørsler om faviconet til et nettsted.\n" "Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3028,11 +3060,11 @@ msgstr "" "administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " "håndtere HTTP-omdirigeringen." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returnerer gjeldende versjon av eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3046,7 +3078,7 @@ msgstr "" "støtte for dynamiske serialiseringsklasser basert på den aktuelle " "handlingen, tilpassbare tillatelser og gjengivelsesformater." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3060,7 +3092,7 @@ msgstr "" "API-lag og gir en standardisert måte å behandle forespørsler og svar for " "AttributeGroup-data på." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3076,7 +3108,7 @@ msgstr "" "eksempel filtrering etter bestemte felt eller henting av detaljert versus " "forenklet informasjon avhengig av forespørselen." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3090,7 +3122,7 @@ msgstr "" "Framework's viewset-mekanismer og bruker passende serialisatorer for ulike " "handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3104,7 +3136,7 @@ msgstr "" "kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare " "autoriserte brukere har tilgang til bestemte data." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3116,7 +3148,7 @@ msgstr "" "Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " "implementeringen av API-sluttpunkter for Brand-objekter." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3134,7 +3166,7 @@ msgstr "" "for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte" " tilbakemeldinger om et produkt." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3149,7 +3181,7 @@ msgstr "" " gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " "REST-rammeverket." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3166,7 +3198,7 @@ msgstr "" "tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " "Djangos filtreringssystem for å spørre etter data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3185,7 +3217,7 @@ msgstr "" "serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" " tillatelser i samsvar med dette under samhandling med ordredata." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3200,11 +3232,11 @@ msgstr "" " tillegg inneholder det en detaljert handling for håndtering av " "tilbakemeldinger på OrderProduct-instanser" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3212,15 +3244,15 @@ msgstr "" "Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " "API-handlinger." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Representerer et visningssett for håndtering av kampanjer." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3238,7 +3270,7 @@ msgstr "" "integrert for å sikre at brukere bare kan administrere sine egne ønskelister" " med mindre eksplisitte tillatelser er gitt." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3252,12 +3284,12 @@ msgstr "" "inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " "serializer og håndtering av tillatelser basert på forespørselskonteksten." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5c1ce71802c0761fe6a49dbcde7b6fa62beb51f1 GIT binary patch literal 89318 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ð18SXRLekjpjlcHM-nAKE_lVYqR*? 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unikalny identyfikator" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Unikalny identyfikator służy do jednoznacznej identyfikacji dowolnego " "obiektu bazy danych" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Jest aktywny" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Jeśli ustawione na false, obiekt ten nie może być widoczny dla użytkowników " "bez wymaganych uprawnień." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Utworzony" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Kiedy obiekt po raz pierwszy pojawił się w bazie danych" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Zmodyfikowany" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Kiedy obiekt był ostatnio edytowany" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Tłumaczenia" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Ogólne" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relacje" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "dodatkowe informacje" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadane" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Znaczniki czasu" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktywuj wybrane %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Wybrane elementy zostały aktywowane!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezaktywacja wybranego %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Wybrane elementy zostały dezaktywowane!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Wartość atrybutu" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Wartości atrybutów" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Obraz" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Obrazy" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stan magazynowy" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Akcje" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Zamawianie produktów" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Dzieci" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfiguracja" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Rdzeń" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Zakończony" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Dostarczanie" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Dostarczone" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Anulowane" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Nie powiodło się" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "W toku" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Przyjęte" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Zwrócone pieniądze" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Płatność" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Udany" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Pamięć podręczna we/wy" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,31 +198,31 @@ msgstr "" "Zastosuj tylko klucz, aby odczytać dozwolone dane z pamięci podręcznej.\n" "Zastosuj klucz, dane i limit czasu z uwierzytelnianiem, aby zapisać dane w pamięci podręcznej." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Pobierz listę obsługiwanych języków" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Uzyskaj dostępne parametry aplikacji" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Wyślij wiadomość do zespołu wsparcia" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Globalny punkt końcowy wyszukiwania do zapytań w tabelach projektu" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Zakup zamówienia jako firma" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -226,142 +230,143 @@ msgstr "" "Kup zamówienie jako firma, używając dostarczonych `products` z " "`product_uuid` i `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Lista wszystkich grup atrybutów (widok prosty)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Pobieranie pojedynczej grupy atrybutów (widok szczegółowy)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Tworzenie grupy atrybutów" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Usuwanie grupy atrybutów" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Przepisanie istniejącej grupy atrybutów z zachowaniem atrybutów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Przepisanie niektórych pól istniejącej grupy atrybutów z zachowaniem " "atrybutów nieedytowalnych" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Lista wszystkich atrybutów (widok prosty)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Utwórz atrybut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Usuwanie atrybutu" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Lista wszystkich wartości atrybutów (widok prosty)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Pobieranie wartości pojedynczego atrybutu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Tworzenie wartości atrybutu" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Usuwanie wartości atrybutu" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Przepisanie istniejącej wartości atrybutu z zachowaniem atrybutów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej wartości atrybutu, zapisując wartości " "nieedytowalne" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Lista wszystkich kategorii (widok prosty)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Identyfikator UUID kategorii lub slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Utwórz kategorię" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Usuwanie kategorii" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Zwraca migawkę metadanych SEO kategorii." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Identyfikator UUID kategorii lub slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Lista wszystkich kategorii (widok prosty)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " "własne zamówienia." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -369,41 +374,41 @@ msgstr "" "Wyszukiwanie podciągów z uwzględnieniem wielkości liter w human_readable_id," " order_products.product.name i order_products.product.partnumber." -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtruj zamówienia z buy_time >= ta data ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtruj zamówienia z buy_time <= ten ISO 8601 datetime" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtruj według dokładnego identyfikatora UUID zamówienia" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" "Filtrowanie według dokładnego, czytelnego dla człowieka identyfikatora " "zamówienia" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrowanie według adresu e-mail użytkownika (dokładne dopasowanie z " "uwzględnieniem wielkości liter)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrowanie według identyfikatora UUID użytkownika" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrowanie według statusu zamówienia (dopasowanie podciągu z uwzględnieniem" " wielkości liter)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -413,37 +418,42 @@ msgstr "" "status, created, modified, buy_time, random. Prefiks z \"-\" dla malejącego " "(np. \"-buy_time\")." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Pobieranie pojedynczej kategorii (widok szczegółowy)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "" +"Identyfikator UUID zamówienia lub identyfikator czytelny dla człowieka" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Utwórz atrybut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Nie działa dla użytkowników spoza personelu." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Usuwanie atrybutu" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Przepisz istniejącą kategorię, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Cena zakupu w momencie zamówienia" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -453,19 +463,19 @@ msgstr "" "finalizowany przy użyciu salda użytkownika; Jeśli użyto `force_payment`, " "transakcja jest inicjowana." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "zakup zamówienia bez tworzenia konta" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalizuje zakup zamówienia dla niezarejestrowanego użytkownika." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Dodawanie produktu do zamówienia" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -473,11 +483,11 @@ msgstr "" "Dodaje produkt do zamówienia przy użyciu podanych `product_uuid` i " "`attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Dodaj listę produktów do zamówienia, ilości nie będą liczone." -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -485,11 +495,11 @@ msgstr "" "Dodaje listę produktów do zamówienia przy użyciu podanych `product_uuid` i " "`attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Usunięcie produktu z zamówienia" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -497,11 +507,11 @@ msgstr "" "Usuwa produkt z zamówienia przy użyciu podanego `product_uuid` i " "`attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Usuń produkt z zamówienia, ilości nie będą liczone" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -509,81 +519,81 @@ msgstr "" "Usuwa listę produktów z zamówienia przy użyciu podanych `product_uuid` i " "`attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Lista wszystkich atrybutów (widok prosty)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "W przypadku użytkowników niebędących pracownikami zwracane są tylko ich " "własne listy życzeń." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Pobieranie pojedynczego atrybutu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Utwórz atrybut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Nie działa dla użytkowników spoza personelu." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Usuwanie atrybutu" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Przepisanie istniejącego atrybutu z zachowaniem atrybutów nieedytowalnych" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Przepisanie niektórych pól istniejącego atrybutu z zachowaniem atrybutów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Dodawanie produktu do zamówienia" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "Dodaje produkt do listy życzeń używając podanego `product_uuid`" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Usunięcie produktu z listy życzeń" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Usuwa produkt z listy życzeń przy użyciu podanego identyfikatora " "`product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Dodaj wiele produktów do listy życzeń" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Dodaje wiele produktów do listy życzeń przy użyciu podanych `product_uuids`" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Usuwa wiele produktów z listy życzeń przy użyciu podanych `product_uuids`" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -603,15 +613,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Lista wszystkich produktów (widok prosty)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(dokładny) UUID produktu" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -619,551 +629,561 @@ msgstr "" "Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla sortowania malejącego. \n" "**Dozwolone:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID produktu lub Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Tworzenie produktu" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aktualizacja niektórych pól istniejącego produktu z zachowaniem pól " "nieedytowalnych" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Usuń produkt" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "wyświetla wszystkie dozwolone informacje zwrotne dotyczące produktu" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Zwraca migawkę metadanych SEO produktu." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Lista wszystkich adresów" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Pobieranie pojedynczego adresu" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Utwórz nowy adres" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Usuwanie adresu" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Aktualizacja całego adresu" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Częściowa aktualizacja adresu" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Wprowadzanie adresu w trybie autouzupełniania" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ciąg zapytania danych nieprzetworzonych, należy dołączyć dane z punktu " "końcowego geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "ogranicza ilość wyników, 1 < limit < 10, domyślnie: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "lista wszystkich opinii (widok prosty)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "pobieranie pojedynczej informacji zwrotnej (widok szczegółowy)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "utworzyć informację zwrotną" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "usuwanie opinii" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "przepisanie istniejącej informacji zwrotnej z zachowaniem elementów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "lista wszystkich relacji zamówienie-produkt (widok prosty)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "pobranie pojedynczej relacji zamówienie-produkt (widok szczegółowy)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "utworzyć nową relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "zastąpić istniejącą relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "częściowa aktualizacja istniejącej relacji zamówienie-produkt" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "usunąć relację zamówienie-produkt" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Lista wszystkich marek (widok prosty)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Pobieranie pojedynczej marki (widok szczegółowy)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Brand UUID lub slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Stwórz markę" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Usuń markę" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Przepisz istniejącą markę, oszczędzając materiały nieedytowalne" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot dla marki" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Lista wszystkich sprzedawców (widok prosty)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Pobieranie pojedynczego dostawcy (widok szczegółowy)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Utwórz sprzedawcę" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Usuń sprzedawcę" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Przepisz istniejącego dostawcę, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Lista wszystkich zdjęć produktów (widok prosty)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Pobieranie pojedynczego obrazu produktu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Utwórz obraz produktu" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Usuwanie obrazu produktu" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "Przepisz istniejący obraz produktu, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Lista wszystkich kodów promocyjnych (widok prosty)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Pobieranie pojedynczego kodu promocyjnego (widok szczegółowy)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Utwórz kod promocyjny" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Usuń kod promocyjny" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Przepisz istniejący kod promocyjny, oszczędzając nieedytowalne elementy" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Lista wszystkich promocji (widok prosty)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Pobieranie pojedynczej promocji (widok szczegółowy)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Utwórz promocję" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Usuń promocję" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Przepisz istniejącą promocję, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Lista wszystkich akcji (widok prosty)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Pobieranie pojedynczego zasobu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Tworzenie rekordu zapasów" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Usuwanie rekordu zapasów" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Przepisanie istniejącego rekordu magazynowego z zachowaniem elementów " "nieedytowalnych" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Lista wszystkich tagów produktów (widok prosty)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Pobieranie pojedynczego tagu produktu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Utwórz tag produktu" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Usuwanie tagu produktu" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Przepisz istniejący tag produktu, zapisując nieedytowalne elementy" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Przepisz niektóre pola istniejącej kategorii, zapisując elementy " "nieedytowalne" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Wyszukiwanie" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nazwa" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorie Ślimaki" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tagi" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Cena minimalna" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maksymalna cena" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Jest aktywny" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marka" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Atrybuty" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Ilość" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Ślimak" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Czy cyfrowy" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Uwzględnienie podkategorii" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Kupione po (włącznie)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Kupione wcześniej (włącznie)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "E-mail użytkownika" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID użytkownika" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Identyfikator czytelny dla człowieka" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Rodzic" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Poziom" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID produktu" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dane do przechowywania w pamięci podręcznej" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Limit czasu w sekundach na wprowadzenie danych do pamięci podręcznej" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Dane w pamięci podręcznej" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Dodawanie produktu do zamówienia" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Nie znaleziono zamówienia {order_uuid}!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Usuń wszystkie produkty z zamówienia" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Kup zamówienie" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Wykonanie akcji na liście produktów w zamówieniu" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Usuń/Dodaj" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Wykonanie akcji na liście produktów na liście życzeń" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Podaj wartość `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Dodawanie produktu do zamówienia" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Kup zamówienie" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1171,135 +1191,139 @@ msgstr "" "Prześlij atrybuty jako ciąg znaków sformatowany w następujący sposób: " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Akcją musi być `add` lub `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit musi wynosić od 1 do 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Atrybuty" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atrybuty pogrupowane" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupy atrybutów" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marki" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorie" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentowy narzut" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minimalne i maksymalne ceny produktów w tej kategorii, jeśli są dostępne." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tagi dla tej kategorii" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkty w tej kategorii" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Sprzedawcy" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Szerokość geograficzna (współrzędna Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Długość geograficzna (współrzędna X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Jak" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Wartość oceny od 1 do 10 włącznie lub 0, jeśli nie jest ustawiona." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Powiadomienia" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Adres rozliczeniowy" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1307,200 +1331,208 @@ msgstr "" "Adres wysyłki dla tego zamówienia, pozostaw pusty, jeśli jest taki sam jak " "adres rozliczeniowy lub jeśli nie dotyczy" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Całkowita cena tego zamówienia" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Całkowita ilość produktów w zamówieniu" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Zamówienia" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Adres URL obrazu" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupy atrybutów" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Cena" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Ilość" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Liczba informacji zwrotnych" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Cena rabatowa" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkty" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promocodes" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promocje" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Listy życzeń" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Tagi produktu" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Kategorie oznaczone tagami" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tagi kategorii" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nazwa projektu" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Firmowy adres e-mail" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Nazwa firmy" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adres firmy" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Numer telefonu firmy" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"email from\", czasami musi być użyty zamiast wartości użytkownika hosta" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Użytkownik hosta poczty e-mail" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Maksymalna kwota płatności" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Minimalna kwota płatności" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Dane analityczne" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Dane reklamowe" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfiguracja" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Kod języka" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Nazwa języka" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Flaga języka, jeśli istnieje :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Pobierz listę obsługiwanych języków" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Wyniki wyszukiwania produktów" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Wyniki wyszukiwania produktów" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1513,23 +1545,23 @@ msgstr "" "bardziej efektywnego kategoryzowania i zarządzania atrybutami w złożonym " "systemie." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Rodzic tej grupy" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Grupa atrybutów nadrzędnych" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Grupa atrybutów" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1548,49 +1580,49 @@ msgstr "" "ograniczenia, dzięki czemu nadaje się do użytku w systemach, które " "współpracują z zewnętrznymi dostawcami." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " "API dostawcy." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informacje o uwierzytelnianiu" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Procentowa marża sprzedawcy" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Nazwa tego sprzedawcy" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "plik odpowiedzi" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Ścieżka do pliku integracji dostawcy" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Ścieżka integracji" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1605,27 +1637,27 @@ msgstr "" "Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " "metadanych do celów administracyjnych." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1636,15 +1668,15 @@ msgstr "" "Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " "użytkownika nazwy wyświetlanej." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "tag kategorii" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "tagi kategorii" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1666,51 +1698,51 @@ msgstr "" "administratorom określanie nazwy, opisu i hierarchii kategorii, a także " "przypisywanie atrybutów, takich jak obrazy, tagi lub priorytety." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Prześlij obraz reprezentujący tę kategorię" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Obraz kategorii" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Kategoria nadrzędna" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Nazwa kategorii" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Podaj nazwę dla tej kategorii" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Dodaj szczegółowy opis dla tej kategorii" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Opis kategorii" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Priorytet" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1723,47 +1755,47 @@ msgstr "" " unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Opis marki" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1779,68 +1811,72 @@ msgstr "" "częścią systemu zarządzania zapasami, umożliwiając śledzenie i ocenę " "produktów dostępnych od różnych dostawców." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Produkt powiązany" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Atrybuty systemu" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1861,55 +1897,55 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Opis produktu" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Numer części" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1925,65 +1961,65 @@ msgstr "" "string, integer, float, boolean, array i object. Pozwala to na dynamiczną i " "elastyczną strukturę danych." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Grupa tego atrybutu" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "String" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Integer" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Pływak" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Wartość logiczna" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Tablica" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Obiekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Typ wartości atrybutu" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Typ wartości" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Nazwa tego atrybutu" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Nazwa atrybutu" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "można filtrować" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atrybut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1993,19 +2029,19 @@ msgstr "" "\"atrybut\" z unikalną \"wartością\", umożliwiając lepszą organizację i " "dynamiczną reprezentację cech produktu." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Atrybut tej wartości" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Konkretna wartość dla tego atrybutu" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2019,40 +2055,40 @@ msgstr "" "określania kolejności ich wyświetlania. Zawiera również funkcję dostępności " "z tekstem alternatywnym dla obrazów." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2068,39 +2104,39 @@ msgstr "" "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promocja" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2112,23 +2148,23 @@ msgstr "" " produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a " "także wspierając operacje dodawania i usuwania wielu produktów jednocześnie." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2144,19 +2180,19 @@ msgstr "" "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2178,59 +2214,59 @@ msgstr "" "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "ul." -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Okręg" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Miasto" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Kraj" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adres" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresy" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2247,73 +2283,73 @@ msgstr "" "Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " "zamówienia, zapewniając jednocześnie spełnienie ograniczeń." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze " "użyty." -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2321,16 +2357,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2347,142 +2383,143 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " "administratora używany jest widok tabeli" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Użytkownik" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Kup czas" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Zamówienie" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" "Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Nie można dodać produktów do zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2491,7 +2528,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2499,7 +2536,7 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2521,112 +2558,112 @@ msgstr "" "pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" " i Product i przechowuje odniesienia do nich." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu." -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego " "produktu" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nazwa" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "Adres URL integracji" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2643,15 +2680,15 @@ msgstr "" "generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " "status ukończonego." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Pobierz" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2667,82 +2704,78 @@ msgstr "" "Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" " danymi opinii." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odnosi się do konkretnego produktu w zamówieniu, którego dotyczy ta " "informacja zwrotna." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Ocena produktu" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Aby dodać opinię, należy podać komentarz, ocenę i identyfikator produktu " "zamówienia." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Błąd podczas tworzenia kodu promocyjnego: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Strona główna" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "O nas" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Potwierdzenie zamówienia" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Witaj %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2753,23 +2786,23 @@ msgstr "" "przyjęliśmy Twoje zamówienie do realizacji. Poniżej znajdują się szczegóły " "zamówienia:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Łącznie" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Cena całkowita" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2778,28 +2811,28 @@ msgstr "" "Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " "technicznej pod adresem %(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Najlepsze pozdrowienia,
zespół %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Wszelkie prawa zastrzeżone" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Zamówienie dostarczone" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Witaj %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2808,7 +2841,7 @@ msgstr "" "Pomyślnie przetworzyliśmy Twoje zamówienie №%(order_uuid)s! Poniżej znajdują" " się szczegóły zamówienia:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2816,13 +2849,13 @@ msgstr "" "dodatkowe\n" " informacje" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Wartość" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2831,26 +2864,26 @@ msgstr "" "Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " "technicznej pod adresem %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Klucz" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Dodaj wiersz" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Przyznany kod promocyjny" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2858,8 +2891,8 @@ msgstr "" "Dziękujemy za pozostanie z nami! Otrzymałeś od nas kod promocyjny\n" " na" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2867,24 +2900,24 @@ msgstr "" "Dziękujemy za zamówienie! Z przyjemnością potwierdzamy zakup. Poniżej " "znajdują się szczegóły zamówienia:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Cena wysyłki" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Zamówienie zostanie dostarczone pod następujący adres:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Z wyrazami szacunku,
Zespół %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2892,51 +2925,51 @@ msgstr "" "wszelkie prawa\n" " zastrzeżone" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Wymagane są zarówno dane, jak i limit czasu" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " "216000 sekund." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | zainicjowany kontakt" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Potwierdzenie zamówienia" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Zamówienie dostarczone" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | przyznany kod promocyjny" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Nie masz uprawnień do wykonania tej akcji." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Wymiary obrazu nie powinny przekraczać w{max_width} x h{max_height} pikseli." -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2944,7 +2977,7 @@ msgstr "" "Obsługuje żądanie indeksu mapy witryny i zwraca odpowiedź XML. Zapewnia, że " "odpowiedź zawiera odpowiedni nagłówek typu zawartości dla XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2954,16 +2987,16 @@ msgstr "" "przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" " ustawia nagłówek Content-Type dla XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Zwraca listę obsługiwanych języków i odpowiadające im informacje." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Zwraca parametry strony internetowej jako obiekt JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2971,11 +3004,11 @@ msgstr "" "Obsługuje operacje pamięci podręcznej, takie jak odczytywanie i ustawianie " "danych pamięci podręcznej z określonym kluczem i limitem czasu." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2983,15 +3016,15 @@ msgstr "" "Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " "przychodzących żądań POST." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Obsługuje globalne zapytania wyszukiwania." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2999,27 +3032,27 @@ msgstr "" "Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n" "Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "Order_product_uuid jest wymagany" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Produkt zamówienia nie ma produktu" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3027,7 +3060,7 @@ msgstr "" "Obsługuje żądania favicon strony internetowej.\n" "Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3038,11 +3071,11 @@ msgstr "" "administratora Django. Używa funkcji `redirect` Django do obsługi " "przekierowania HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Zwraca aktualną wersję aplikacji eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3056,7 +3089,7 @@ msgstr "" "dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne " "uprawnienia i formaty renderowania." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3070,7 +3103,7 @@ msgstr "" "aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi" " dla danych AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3086,7 +3119,7 @@ msgstr "" "filtrowanie według określonych pól lub pobieranie szczegółowych lub " "uproszczonych informacji w zależności od żądania." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3100,7 +3133,7 @@ msgstr "" "Django REST Framework i używa odpowiednich serializatorów dla różnych akcji." " Możliwości filtrowania są dostarczane przez DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3114,7 +3147,7 @@ msgstr "" "danych kategorii. Zestaw widoków wymusza również uprawnienia, aby zapewnić, " "że tylko autoryzowani użytkownicy mają dostęp do określonych danych." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3126,7 +3159,7 @@ msgstr "" "Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " "końcowych API dla obiektów Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3144,7 +3177,7 @@ msgstr "" " szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " "powiązanych informacji zwrotnych o produkcie." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3158,7 +3191,7 @@ msgstr "" " do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego " "dostępu do zasobów związanych z Vendorem poprzez framework Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3175,7 +3208,7 @@ msgstr "" "bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " "odpytywania danych." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3194,7 +3227,7 @@ msgstr "" "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3209,26 +3242,26 @@ msgstr "" "szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Obsługuje operacje związane z danymi Stock w systemie." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3246,7 +3279,7 @@ msgstr "" "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "zostaną przyznane wyraźne uprawnienia." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3260,12 +3293,12 @@ msgstr "" "wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" " i obsługę uprawnień w oparciu o kontekst żądania." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..84710dd009cdacb648b859e7cc41534e7655bb00 GIT binary patch literal 89953 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 tY)55|F6KwWyO(gP\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ID exclusivo" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "O ID exclusivo é usado para identificar com segurança qualquer objeto do " "banco de dados" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Está ativo" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Se definido como false, esse objeto não poderá ser visto por usuários sem a " "permissão necessária" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Criado" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Quando o objeto apareceu pela primeira vez no banco de dados" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modificado" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Quando o objeto foi editado pela última vez" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Traduções" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Geral" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relações" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "informações adicionais" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadados" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Carimbos de data/hora" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Ativar o %(verbose_name_plural)s selecionado" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Os itens selecionados foram ativados!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Desativar o %(verbose_name_plural)s selecionado" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Os itens selecionados foram desativados!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Valor do atributo" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Valores de atributos" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Imagem" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imagens" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Estoque" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Ações" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Solicitar produtos" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Crianças" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Configuração" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Core" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Finalizado" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Entregando" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Entregue" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Cancelado" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Falha" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Pendente" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Aceito" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Dinheiro devolvido" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Pagamento" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Bem-sucedido" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "E/S do cache" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Aplicar somente uma chave para ler dados permitidos do cache.\n" "Aplicar chave, dados e tempo limite com autenticação para gravar dados no cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Obter uma lista de idiomas suportados" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Obter os parâmetros expostos do aplicativo" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Envie uma mensagem para a equipe de suporte" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicite um URL com CORS. Somente https é permitido." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Ponto de extremidade de pesquisa global para consultar as tabelas do projeto" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Comprar um pedido como uma empresa" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,134 +231,135 @@ msgstr "" "Compre um pedido como uma empresa, usando os `products` fornecidos com " "`product_uuid` e `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Listar todos os grupos de atributos (visualização simples)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Recuperar um único grupo de atributos (visualização detalhada)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Criar um grupo de atributos" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Excluir um grupo de atributos" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "Reescrever um grupo de atributos existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Reescreva alguns campos de um grupo de atributos existente salvando os não " "editáveis" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Listar todos os atributos (visualização simples)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Recuperar um único atributo (visualização detalhada)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Criar um atributo" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Excluir um atributo" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Reescreva um atributo existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Reescreva alguns campos de um atributo existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Listar todos os valores de atributos (visualização simples)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Recuperar um único valor de atributo (visualização detalhada)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Criar um valor de atributo" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Excluir um valor de atributo" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Reescreva um valor de atributo existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Reescreva alguns campos de um valor de atributo existente salvando os não " "editáveis" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Listar todas as categorias (visualização simples)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Recuperar uma única categoria (visualização detalhada)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "UUID ou slug da categoria" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Criar uma categoria" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Excluir uma categoria" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Reescrever uma categoria existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "Meta snapshot de SEO" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Retorna um instantâneo dos metadados de SEO da categoria" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "UUID ou slug da categoria" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Listar todas as categorias (visualização simples)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Para usuários não funcionários, apenas seus próprios pedidos são devolvidos." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -363,39 +368,39 @@ msgstr "" "human_readable_id, order_products.product.name e " "order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrar pedidos com buy_time >= este datetime ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrar pedidos com buy_time <= este datetime ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrar por UUID de ordem exata" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrar por ID exata do pedido legível por humanos" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrar por e-mail do usuário (correspondência exata sem distinção entre " "maiúsculas e minúsculas)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrar por UUID do usuário" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrar por status do pedido (correspondência de substring sem distinção " "entre maiúsculas e minúsculas)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -405,36 +410,40 @@ msgstr "" "user, status, created, modified, buy_time, random. Prefixe com '-' para " "ordem decrescente (por exemplo, '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Recuperar uma única categoria (visualização detalhada)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID do pedido ou ID legível por humanos" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Criar um atributo" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Não funciona para usuários que não são da equipe." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Excluir um atributo" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Reescrever uma categoria existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Preço de compra no momento do pedido" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -444,19 +453,19 @@ msgstr "" "concluída usando o saldo do usuário; se `force_payment` for usado, uma " "transação será iniciada." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "comprar um pedido sem criar uma conta" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finaliza a compra do pedido para um usuário não registrado." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Adicionar um produto ao pedido" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -464,13 +473,13 @@ msgstr "" "Adiciona um produto a um pedido usando o `product_uuid` e os `attributes` " "fornecidos." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Adicionar uma lista de produtos ao pedido, as quantidades não serão " "contabilizadas" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -478,11 +487,11 @@ msgstr "" "Adiciona uma lista de produtos a um pedido usando o `product_uuid` e os " "`attributes` fornecidos." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Remover um produto do pedido" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -490,11 +499,11 @@ msgstr "" "Remove um produto de um pedido usando o `product_uuid` e os `attributes` " "fornecidos." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Remover um produto do pedido, as quantidades não serão contabilizadas" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -502,81 +511,81 @@ msgstr "" "Remove uma lista de produtos de um pedido usando o `product_uuid` e os " "`attributes` fornecidos." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Listar todos os atributos (visualização simples)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Para usuários que não pertencem à equipe, apenas suas próprias listas de " "desejos são retornadas." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Recuperar um único atributo (visualização detalhada)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Criar um atributo" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Não funciona para usuários que não são da equipe." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Excluir um atributo" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Reescreva um atributo existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Reescreva alguns campos de um atributo existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Adicionar um produto ao pedido" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Adiciona um produto a uma lista de desejos usando o `product_uuid` fornecido" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Remover um produto da lista de desejos" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Remove um produto de uma lista de desejos usando o `product_uuid` fornecido" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Adicionar muitos produtos à lista de desejos" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Adiciona vários produtos a uma lista de desejos usando os `product_uuids` " "fornecidos" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Remover um produto do pedido" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Remove vários produtos de uma lista de desejos usando os `product_uuids` " "fornecidos" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -596,15 +605,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Listar todos os produtos (visualização simples)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "UUID (exato) do produto" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -612,677 +621,691 @@ msgstr "" "Lista de campos separada por vírgulas para classificação. Prefixe com `-` para classificação decrescente. \n" "**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, aleatório" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Recuperar um único produto (visualização detalhada)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID ou Slug do produto" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Criar um produto" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Reescrever um produto existente, preservando os campos não editáveis" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Atualizar alguns campos de um produto existente, preservando os campos não " "editáveis" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Excluir um produto" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "lista todos os feedbacks permitidos para um produto" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Retorna um instantâneo dos metadados de SEO do produto" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Listar todos os endereços" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Recuperar um único endereço" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Criar um novo endereço" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Excluir um endereço" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Atualizar um endereço inteiro" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Atualizar parcialmente um endereço" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Entrada de endereço com preenchimento automático" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Cadeia de consulta de dados brutos, anexe os dados do ponto de extremidade " "de IP geográfico" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limita a quantidade de resultados, 1 < limite < 10, padrão: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "listar todos os feedbacks (visualização simples)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "recuperar um único feedback (visualização detalhada)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "criar um feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "excluir um feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "reescrever um feedback existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "listar todas as relações pedido-produto (visualização simples)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperar uma única relação pedido-produto (visão detalhada)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "criar uma nova relação pedido-produto" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "substituir uma relação pedido-produto existente" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "atualizar parcialmente uma relação pedido-produto existente" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "excluir uma relação pedido-produto" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "adicionar ou remover feedback em uma relação pedido-produto" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Listar todas as marcas (visualização simples)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Recuperar uma única marca (visualização detalhada)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID ou slug da marca" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Criar uma marca" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Delete a brand" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Reescrever uma marca existente economizando produtos não editáveis" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "Meta snapshot de SEO para a marca" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Listar todos os fornecedores (visualização simples)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperar um único fornecedor (visão detalhada)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Criar um fornecedor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Excluir um fornecedor" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Reescrever um fornecedor existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Listar todas as imagens do produto (visualização simples)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Recuperar uma única imagem de produto (visualização detalhada)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Criar uma imagem do produto" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Excluir uma imagem de produto" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Reescrever uma imagem de produto existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Listar todos os códigos promocionais (visualização simples)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperar um único código promocional (visualização detalhada)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Criar um código promocional" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Delete a promo code" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Reescreva um código promocional existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Listar todas as promoções (visualização simples)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperar uma única promoção (visualização detalhada)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Criar uma promoção" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Excluir uma promoção" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Reescrever uma promoção existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Listar todas as ações (visualização simples)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Recuperar um único estoque (visualização detalhada)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Criar um registro de estoque" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Excluir um registro de estoque" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Reescrever um registro de estoque existente, salvando itens não editáveis" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Listar todas as tags de produtos (visualização simples)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperar uma única tag de produto (visualização detalhada)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Criar uma tag de produto" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Excluir uma tag de produto" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Reescrever uma tag de produto existente salvando itens não editáveis" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Reescreva alguns campos de uma categoria existente salvando os não editáveis" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Pesquisa" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nome" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categorias" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categorias Lesmas" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Tags" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Preço mínimo" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Preço máximo" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Está ativo" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Quantidade" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Lesma" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "É digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Incluir subcategorias" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve haver um category_uuid para usar o sinalizador include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Pesquisa (ID, nome do produto ou número de peça)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Comprado depois (inclusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "E-mail do usuário" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID do usuário" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "ID legível por humanos" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Parent" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Toda a categoria (com pelo menos 1 produto ou não)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Nível" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID do produto" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chave para procurar ou colocar no cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dados a serem armazenados no cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tempo limite em segundos para definir os dados para o cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Dados em cache" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Adicionar um produto ao pedido" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} não encontrado!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remover todos os produtos do pedido" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Comprar um pedido" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Executar uma ação em uma lista de produtos no pedido" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remover/Adicionar" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "A ação deve ser \"adicionar\" ou \"remover\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Executar uma ação em uma lista de produtos na lista de desejos" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Forneça o valor `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de desejos {wishlist_uuid} não encontrada!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Adicionar um produto ao pedido" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Comprar um pedido" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Envie os atributos como uma string formatada como attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Adicionar ou excluir um feedback para o produto do pedido" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "A ação deve ser `add` ou `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} não encontrado!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "O limite deve estar entre 1 e 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Atributos" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atributos agrupados" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupos de atributos" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Marcas" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorias" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Porcentagem de marcação" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "Preços mínimo e máximo dos produtos dessa categoria, se disponíveis." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Tags para esta categoria" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produtos desta categoria" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Vendors" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitude (coordenada Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitude (coordenada X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Como fazer" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Valor de classificação de 1 a 10, inclusive, ou 0 se não estiver definido." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notificações" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de download para este produto do pedido, se aplicável" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Endereço de cobrança" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1290,201 +1313,209 @@ msgstr "" "Endereço de entrega para este pedido, deixe em branco se for o mesmo que o " "endereço de cobrança ou se não for aplicável" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Preço total deste pedido" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Quantidade total de produtos no pedido" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Todos os produtos estão no pedido digital?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transações para esta ordem" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Pedidos" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL da imagem" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupos de atributos" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Preço" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Quantidade" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Número de feedbacks" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Preço com desconto" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produtos" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Códigos promocionais" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promoções" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Listas de desejos" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Etiquetas do produto" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorias de tags" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Tags das categorias" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Nome do projeto" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "E-mail da empresa" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Nome da empresa" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Endereço da empresa" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Número de telefone da empresa" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', às vezes ele deve ser usado em vez do valor do usuário do host" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Usuário do host de e-mail" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Valor máximo para pagamento" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Valor mínimo para pagamento" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Dados analíticos" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Dados do anúncio" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configuração" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Código do idioma" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Nome do idioma" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Sinalizador de idioma, se houver :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Obter uma lista de idiomas suportados" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Resultados da pesquisa de produtos" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Resultados da pesquisa de produtos" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1497,23 +1528,23 @@ msgstr "" "útil para categorizar e gerenciar atributos de forma mais eficaz em um " "sistema complexo." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Pai deste grupo" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Grupo de atributos pai" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1532,49 +1563,49 @@ msgstr "" " adicionais, tornando-o adequado para uso em sistemas que interagem com " "fornecedores terceirizados." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Armazena as credenciais e os pontos de extremidade necessários para a " "comunicação da API do fornecedor" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informações de autenticação" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Definir a marcação para produtos recuperados desse fornecedor" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Porcentagem da margem de lucro do fornecedor" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Nome do fornecedor" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Nome do fornecedor" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "arquivo de resposta" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "última resposta de processamento do fornecedor" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Caminho do arquivo de integração do fornecedor" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Caminho de integração" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1589,27 +1620,27 @@ msgstr "" "operações exportadas por meio de mixins e fornece personalização de " "metadados para fins administrativos." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1620,15 +1651,15 @@ msgstr "" "Ela inclui atributos para um identificador de tag interno e um nome de " "exibição de fácil utilização." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "tag de categoria" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "tags de categoria" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1651,51 +1682,51 @@ msgstr "" "descrição e a hierarquia das categorias, bem como atribuam atributos como " "imagens, tags ou prioridade." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Faça upload de uma imagem que represente essa categoria" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Imagem da categoria" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Pai dessa categoria para formar uma estrutura hierárquica" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Categoria dos pais" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Nome da categoria" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Forneça um nome para essa categoria" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Adicione uma descrição detalhada para essa categoria" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Descrição da categoria" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioridade" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1709,47 +1740,47 @@ msgstr "" "Ela permite a organização e a representação de dados relacionados à marca no" " aplicativo." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categorias" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1765,68 +1796,72 @@ msgstr "" "sistema de gerenciamento de estoque para permitir o rastreamento e a " "avaliação dos produtos disponíveis de vários fornecedores." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Produto associado" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Atributos do sistema" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1847,55 +1882,55 @@ msgstr "" "frequência para melhorar o desempenho. É usada para definir e manipular " "dados de produtos e suas informações associadas em um aplicativo." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Nome do produto" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Número da peça" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1911,65 +1946,65 @@ msgstr "" "valores, incluindo string, inteiro, float, booleano, matriz e objeto. Isso " "permite a estruturação dinâmica e flexível dos dados." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Grupo desse atributo" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Cordas" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Inteiro" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flutuação" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Booleano" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Matriz" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objeto" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Tipo do valor do atributo" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Tipo de valor" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Nome desse atributo" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Nome do atributo" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "é filtrável" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atributo" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1979,19 +2014,19 @@ msgstr "" "produto. Ele vincula o \"atributo\" a um \"valor\" exclusivo, permitindo uma" " melhor organização e representação dinâmica das características do produto." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Atributo desse valor" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "O valor específico para esse atributo" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2005,40 +2040,40 @@ msgstr "" "específicos e determinar sua ordem de exibição. Ela também inclui um recurso" " de acessibilidade com texto alternativo para as imagens." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Forneça um texto alternativo para a imagem para fins de acessibilidade" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2054,39 +2089,39 @@ msgstr "" "vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos " "para determinar os itens afetados na campanha." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promoção" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2099,23 +2134,23 @@ msgstr "" " bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2131,19 +2166,19 @@ msgstr "" "de armazenamento dos arquivos do documentário. Ela estende a funcionalidade " "de mixins específicos e fornece recursos personalizados adicionais." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentário" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentários" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2165,59 +2200,59 @@ msgstr "" "associar um endereço a um usuário, facilitando o tratamento personalizado " "dos dados." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Rua" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distrito" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Cidade" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Região" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Código postal" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "País" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Endereço" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Endereços" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2234,74 +2269,74 @@ msgstr "" "funcionalidade para validar e aplicar o código promocional a um pedido, " "garantindo que as restrições sejam atendidas." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Código exclusivo usado por um usuário para resgatar um desconto" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Desconto percentual aplicado se o valor fixo não for usado" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "" "Registro de data e hora a partir do qual esse código promocional é válido" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Registro de data e hora em que o código promocional foi usado, em branco se " "ainda não tiver sido usado" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2309,16 +2344,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2335,138 +2370,139 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Status do pedido" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Estrutura JSON de notificações a serem exibidas aos usuários; na interface " "do usuário do administrador, é usada a visualização de tabela" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Usuário" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Pedido" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "" "Não é possível adicionar mais produtos do que os disponíveis em estoque" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "Não é possível remover produtos de um pedido que não esteja pendente" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Você só pode comprar produtos físicos com o endereço de entrega " "especificado!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Não é possível comprar neste momento, tente novamente em alguns minutos." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Um usuário sem saldo não pode comprar com saldo!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2474,7 +2510,7 @@ msgstr "" "Não é possível comprar sem registro, forneça as seguintes informações: nome " "do cliente, e-mail do cliente, número de telefone do cliente" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2482,7 +2518,7 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2504,109 +2540,109 @@ msgstr "" "para produtos digitais. O modelo se integra aos modelos Order e Product e " "armazena uma referência a eles." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "O preço pago pelo cliente por esse produto no momento da compra" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "você não pode dar feedback a um pedido que não foi recebido" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nome" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL da integração" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2622,15 +2658,15 @@ msgstr "" "está visível publicamente. Ela inclui um método para gerar um URL para " "download do ativo quando o pedido associado estiver em um status concluído." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Baixar" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Downloads" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2645,83 +2681,79 @@ msgstr "" "classificação atribuída pelo usuário. A classe usa campos de banco de dados " "para modelar e gerenciar com eficiência os dados de feedback." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" "Comentários fornecidos pelo usuário sobre sua experiência com o produto" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Faz referência ao produto específico em um pedido sobre o qual se trata esse" " feedback" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Avaliação do produto" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Você deve fornecer um comentário, uma classificação e o uuid do produto do " "pedido para adicionar feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Erro durante a criação do código promocional: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Início" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Entre em contato conosco" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Sobre nós" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Confirmação de pedido" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logotipo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Olá %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2731,23 +2763,23 @@ msgstr "" "Obrigado por seu pedido #%(order.pk)s! Temos o prazer de informá-lo de que " "seu pedido foi colocado em prática. Abaixo estão os detalhes de seu pedido:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Preço total" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2756,28 +2788,28 @@ msgstr "" "Se tiver alguma dúvida, entre em contato com nosso suporte em " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Atenciosamente,
a equipe %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Todos os direitos reservados" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Pedido entregue" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Olá %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2786,7 +2818,7 @@ msgstr "" "Seu pedido №%(order_uuid)s foi processado com sucesso! Abaixo estão os " "detalhes de seu pedido:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2794,13 +2826,13 @@ msgstr "" "adicionais\n" " informações adicionais" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Valor" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2809,26 +2841,26 @@ msgstr "" "Se tiver alguma dúvida, entre em contato com nosso suporte em " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Chave" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Adicionar linha" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Código promocional concedido" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2836,8 +2868,8 @@ msgstr "" "Obrigado por ficar conosco! Nós lhe concedemos um código promocional\n" " para" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2845,24 +2877,24 @@ msgstr "" "Obrigado por seu pedido! Temos o prazer de confirmar sua compra. Abaixo " "estão os detalhes de seu pedido:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Preço da remessa" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Seu pedido será entregue no seguinte endereço:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Com os melhores cumprimentos,
A equipe %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2870,49 +2902,49 @@ msgstr "" "todos os direitos\n" " reservados" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "São necessários dados e tempo limite" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | entre em contato conosco iniciado" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmação do pedido" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Pedido entregue" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode granted" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Você não tem permissão para executar essa ação." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "As dimensões da imagem não devem exceder w{max_width} x h{max_height} pixels" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2921,7 +2953,7 @@ msgstr "" "Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" " para XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2931,17 +2963,17 @@ msgstr "" "processa a solicitação, obtém a resposta detalhada apropriada do mapa do " "site e define o cabeçalho Content-Type para XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Retorna uma lista de idiomas suportados e suas informações correspondentes." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Retorna os parâmetros do site como um objeto JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2949,11 +2981,11 @@ msgstr "" "Manipula operações de cache, como ler e definir dados de cache com uma chave" " e um tempo limite especificados." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Trata os envios de formulários \"entre em contato conosco\"." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2961,15 +2993,15 @@ msgstr "" "Trata as solicitações de processamento e validação de URLs de solicitações " "POST recebidas." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Trata as consultas de pesquisa global." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Lida com a lógica de comprar como uma empresa sem registro." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2977,27 +3009,27 @@ msgstr "" "Trata do download de um ativo digital associado a um pedido.\n" "Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid é obrigatório" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "o pedido deve ser pago antes de fazer o download do ativo digital" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "O produto do pedido não tem um produto" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon não encontrado" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3005,7 +3037,7 @@ msgstr "" "Trata as solicitações do favicon de um site.\n" "Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3016,11 +3048,11 @@ msgstr "" "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Retorna a versão atual do eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3034,7 +3066,7 @@ msgstr "" "inclui suporte para classes de serializadores dinâmicos com base na ação " "atual, permissões personalizáveis e formatos de renderização." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3048,7 +3080,7 @@ msgstr "" "parte da camada de API do aplicativo e fornece uma maneira padronizada de " "processar solicitações e respostas para dados do AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3064,7 +3096,7 @@ msgstr "" " a filtragem por campos específicos ou a recuperação de informações " "detalhadas ou simplificadas, dependendo da solicitação." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3079,7 +3111,7 @@ msgstr "" "serializadores apropriados para diferentes ações. Os recursos de filtragem " "são fornecidos por meio do DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3094,7 +3126,7 @@ msgstr "" " permissões para garantir que somente usuários autorizados possam acessar " "dados específicos." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3106,7 +3138,7 @@ msgstr "" "de objetos de marca. Ela usa a estrutura ViewSet do Django para simplificar " "a implementação de pontos de extremidade da API para objetos de marca." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3124,7 +3156,7 @@ msgstr "" "recuperar detalhes do produto, aplicar permissões e acessar o feedback " "relacionado de um produto." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3139,7 +3171,7 @@ msgstr "" "diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos" " recursos relacionados ao Vendor por meio da estrutura Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3156,7 +3188,7 @@ msgstr "" "feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" " de filtragem do Django para consultar dados." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3175,7 +3207,7 @@ msgstr "" "específica que está sendo executada e impõe as permissões de acordo com a " "interação com os dados do pedido." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3190,11 +3222,11 @@ msgstr "" "fornece uma ação detalhada para lidar com feedback sobre instâncias de " "OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3202,15 +3234,15 @@ msgstr "" "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "várias ações de API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Representa um conjunto de visualizações para gerenciar promoções." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Trata de operações relacionadas a dados de estoque no sistema." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3229,7 +3261,7 @@ msgstr "" "possam gerenciar suas próprias listas de desejos, a menos que sejam " "concedidas permissões explícitas." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3244,12 +3276,12 @@ msgstr "" "substituições de serializadores e tratamento de permissões com base no " "contexto da solicitação." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8608fe49a56ab49a7642013f4de3bf71fd4ec34b GIT binary patch literal 91724 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[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 Ng<+*FG&J*W{|~?n8Xo`v literal 0 HcmV?d00001 diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po similarity index 75% rename from core/locale/ro_RO/LC_MESSAGES/django.po rename to engine/core/locale/ro_RO/LC_MESSAGES/django.po index 4a691f72..5a2bd603 100644 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ID unic" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "ID-ul unic este utilizat pentru a identifica cu siguranță orice obiect din " "baza de date" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Este activ" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Dacă este setat la false, acest obiect nu poate fi văzut de utilizatori fără" " permisiunea necesară" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Creat" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Când a apărut pentru prima dată obiectul în baza de date" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modificat" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Când a fost editat obiectul ultima dată" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Traduceri" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Generalități" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relații" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "informații suplimentare" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadate" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Timestamps" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Activați %(verbose_name_plural)s selectat" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Articolele selectate au fost activate!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Dezactivați %(verbose_name_plural)s selectat" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Articolele selectate au fost dezactivate!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Atribut Valoare" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Valori ale atributului" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Imagine" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Imagini" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stoc" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocuri" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Comandați produse" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Copii" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Configurare" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Nucleu" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Terminat" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Livrarea" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Livrat" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Anulată" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Eșuat" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "În așteptare" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Acceptat" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Bani returnați" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Plata" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "De succes" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,33 +198,33 @@ msgstr "" "Aplicați doar o cheie pentru a citi datele permise din cache.\n" "Aplicați o cheie, date și timeout cu autentificare pentru a scrie date în cache." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Obțineți o listă a limbilor acceptate" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Obțineți parametrii expunibili ai aplicației" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Trimiteți un mesaj echipei de asistență" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicitați un URL CORSed. Numai https este permis." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Punct final de căutare globală pentru a efectua interogări în toate tabelele" " proiectului" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Achiziționați o comandă ca întreprindere" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -228,140 +232,141 @@ msgstr "" "Achiziționați o comandă ca o afacere, utilizând `products` cu `product_uuid`" " și `attributes` furnizate." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Lista tuturor grupurilor de atribute (vizualizare simplă)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Recuperarea unui singur grup de atribute (vedere detaliată)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Crearea unui grup de atribute" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Ștergerea unui grup de atribute" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Rescrierea unui grup de atribute existent cu salvarea elementelor " "needitabile" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Rescrierea unor câmpuri ale unui grup de atribute existent, cu salvarea " "elementelor needitabile" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Lista tuturor atributelor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Recuperarea unui singur atribut (vedere detaliată)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Crearea unui atribut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Ștergerea unui atribut" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unui atribut existent salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Lista tuturor valorilor atributelor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Recuperarea valorii unui singur atribut (vedere detaliată)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Crearea unei valori de atribut" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Ștergerea unei valori de atribut" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Rescrierea unei valori de atribut existente care salvează non-editabile" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Rescrierea unor câmpuri ale unei valori de atribut existente salvând " "elementele needitabile" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Lista tuturor categoriilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Recuperarea unei singure categorii (vedere detaliată)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Categorie UUID sau slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Creați o categorie" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Ștergeți o categorie" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Rescrieți o categorie existentă salvând non-editabile" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Returnează un instantaneu al metadatelor SEO ale categoriei" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Categorie UUID sau slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Lista tuturor categoriilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " "comenzile proprii." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -369,39 +374,39 @@ msgstr "" "Căutare de substring insensibilă la majuscule în human_readable_id, " "order_products.product.name și order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrați comenzile cu buy_time >= această dată ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrează comenzile cu buy_time <= această dată ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrare după UUID exact al comenzii" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrați după ID-ul exact al comenzii care poate fi citit de către om" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrare în funcție de adresa de e-mail a utilizatorului (potrivire exactă " "insensibilă la majuscule)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrare după UUID-ul utilizatorului" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Filtrare în funcție de starea comenzii (potrivire a substringurilor fără " "deosebire de majuscule)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -411,37 +416,41 @@ msgstr "" "status, created, modified, buy_time, random. Prefixați cu \"-\" pentru " "ordine descrescătoare (de exemplu, \"-buy_time\")." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Recuperarea unei singure categorii (vedere detaliată)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID al comenzii sau identificator lizibil de către om" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Crearea unui atribut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Ștergerea unui atribut" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Rescrieți o categorie existentă salvând non-editabile" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Prețul de achiziție la momentul comenzii" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -451,19 +460,19 @@ msgstr "" "achiziția este finalizată utilizând soldul utilizatorului; Dacă se " "utilizează `force_payment`, este inițiată o tranzacție." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "achiziționarea unei comenzi fără crearea unui cont" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "finalizează achiziția comenzii pentru un utilizator neînregistrat." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Adăugați un produs la comandă" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -471,11 +480,11 @@ msgstr "" "Adaugă un produs la o comandă folosind `product_uuid` și `attributes` " "furnizate." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Adăugați o listă de produse la comandă, cantitățile nu vor conta" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -483,11 +492,11 @@ msgstr "" "Adaugă o listă de produse la o comandă folosind `product_uuid` și " "`attributes` furnizate." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Eliminați un produs din comandă" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -495,12 +504,12 @@ msgstr "" "Elimină un produs dintr-o comandă folosind `product_uuid` și `attributes` " "furnizate." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "" "Eliminați un produs din comandă, cantitățile nu vor fi luate în considerare" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -508,82 +517,82 @@ msgstr "" "Îndepărtează o listă de produse dintr-o comandă folosind `product_uuid` și " "`attributes` furnizate." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Lista tuturor atributelor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Pentru utilizatorii care nu fac parte din personal, sunt returnate doar " "propriile liste de dorințe." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Recuperarea unui singur atribut (vedere detaliată)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Crearea unui atribut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Nu funcționează pentru utilizatorii care nu fac parte din personal." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Ștergerea unui atribut" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Rescrierea unui atribut existent cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unui atribut existent salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Adăugați un produs la comandă" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Adaugă un produs la o listă de dorințe folosind `product_uuid` furnizat" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Eliminați un produs din lista de dorințe" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Înlătură un produs dintr-o listă de dorințe folosind `product_uuid` furnizat" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Adăugați mai multe produse la lista de dorințe" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Adaugă mai multe produse la o listă de dorințe folosind `product_uuids` " "furnizat" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Eliminați un produs din comandă" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Îndepărtează mai multe produse dintr-o listă de dorințe folosind " "`product_uuids` furnizat" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -603,15 +612,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Listează toate produsele (vizualizare simplă)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exact) UUID al produsului" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -619,557 +628,567 @@ msgstr "" "Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați cu `-` pentru descrescător. \n" "**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Recuperarea unui singur produs (vedere detaliată)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID sau Slug al produsului" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Creați un produs" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Rescrierea unui produs existent, păstrând câmpurile care nu pot fi editate" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Actualizarea unor câmpuri ale unui produs existent, păstrând câmpurile " "needitabile" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Ștergeți un produs" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "listează toate feedback-urile permise pentru un produs" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnează un instantaneu al metadatelor SEO ale produsului" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Enumerați toate adresele" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Recuperarea unei singure adrese" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Creați o adresă nouă" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Ștergeți o adresă" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Actualizarea unei adrese întregi" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Actualizarea parțială a unei adrese" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autocompletare adresă de intrare" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "docker compose exec app poetry run python manage.py deepl_translate -l en-gb" " -l ar-ar -l cs-cz -l da-dk -l de-de -l en-us -l es-es -l fr-fr -l hi-in -l " "it-it -l ja-jp -l kk-kz -l nl-nl -l pl-pl -l pt-br -l ro-ro -l ru-ru -l zh-" -"hans -a core -a geo -a plăți -a vibes_auth -a blog" +"hans -a core -a geo -a plăți -a authv -a blog" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "limitează cantitatea de rezultate, 1 < limit < 10, implicit: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "lista tuturor feedback-urilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "recuperați un singur feedback (vizualizare detaliată)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "creați un feedback" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "ștergeți un feedback" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "rescrierea unui feedback existent cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "lista tuturor relațiilor comandă-produs (vedere simplă)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "recuperarea unei singure relații comandă-produs (vedere detaliată)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "crearea unei noi relații comandă-produs" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "să înlocuiască o relație comandă-produs existentă" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "actualizarea parțială a unei relații comandă-produs existente" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "ștergeți o relație comandă-produs" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Lista tuturor mărcilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Recuperarea unei singure mărci (vedere detaliată)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Marca UUID sau slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Creați un brand" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Ștergeți un brand" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Rescrierea unui brand existent care economisește materiale needitabile" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot pentru brand" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Lista tuturor furnizorilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Recuperarea unui singur furnizor (vedere detaliată)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Creați un furnizor" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Ștergeți un furnizor" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Rescrierea unui furnizor existent cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Listați toate imaginile produsului (vizualizare simplă)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Preluarea unei singure imagini a produsului (vedere detaliată)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Creați o imagine a produsului" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Ștergeți imaginea unui produs" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Rescrieți o imagine de produs existentă salvând elementele needitabile" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Lista tuturor codurilor promoționale (vizualizare simplă)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Recuperarea unui singur cod promoțional (vizualizare detaliată)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Creați un cod promoțional" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Ștergeți un cod promoțional" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Rescrieți un cod promoțional existent, economisind non-editabile" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Lista tuturor promoțiilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Recuperarea unei singure promoții (vedere detaliată)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Creați o promoție" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Ștergeți o promovare" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Rescrierea unei promoții existente cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Lista tuturor stocurilor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Recuperarea unui singur stoc (vedere detaliată)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Crearea unei fișe de stoc" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Ștergerea unei înregistrări de stoc" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Rescrierea unei fișe de stoc existente cu salvarea elementelor needitabile" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Listați toate etichetele produselor (vizualizare simplă)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Recuperarea unei singure etichete de produs (vizualizare detaliată)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Creați o etichetă de produs" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Ștergeți o etichetă de produs" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Rescrieți o etichetă de produs existentă salvând elementele needitabile" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Rescrieți unele câmpuri ale unei categorii existente, salvând elementele " "needitabile" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Căutare" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Nume și prenume" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Categorii" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Categorii Melci" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Etichete" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Preț minim" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Preț maxim" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Este activ" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marca" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Atribute" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Cantitate" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Melc" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Este digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Includeți subcategorii" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Trebuie să existe un category_uuid pentru a utiliza flagul " "include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Căutare (ID, numele produsului sau numărul piesei)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Cumpărat după (inclusiv)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Cumpărat înainte (inclusiv)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "E-mail utilizator" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID utilizator" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Statut" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "ID lizibil de către om" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Părinte" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Nivel" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID produs" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Cheie care trebuie căutată sau introdusă în cache" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Date de stocat în cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout în secunde pentru a seta datele în cache" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Date în cache" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Adăugați un produs la comandă" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Comanda {order_uuid} nu a fost găsită!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Eliminați toate produsele din comandă" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Cumpărați o comandă" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Efectuați o acțiune asupra unei liste de produse din comandă" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Eliminare/adăugare" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Efectuați o acțiune pe o listă de produse din lista de dorințe" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nu a fost găsit!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Adăugați un produs la comandă" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Cumpărați o comandă" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1177,137 +1196,141 @@ msgstr "" "Vă rugăm să trimiteți atributele sub formă de șir format ca attr1=valoare1, " "attr2=valoare2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Acțiunea trebuie să fie `add` sau `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limita trebuie să fie între 1 și 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Atribute" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Atribute grupate" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupuri de atribute" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Mărci" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Categorii" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentul de majorare" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " "categorii." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Prețurile minime și maxime pentru produsele din această categorie, dacă sunt" " disponibile." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Etichete pentru această categorie" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produse din această categorie" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Furnizori" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitudine (coordonata Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitudine (coordonata X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Cum să" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Valoare nominală de la 1 la 10, inclusiv, sau 0 dacă nu este setată." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Notificări" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Feedback" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Adresa de facturare" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1315,202 +1338,210 @@ msgstr "" "Adresa de expediere pentru această comandă, lăsați în alb dacă este aceeași " "cu adresa de facturare sau dacă nu se aplică" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Prețul total al acestei comenzi" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Cantitatea totală de produse din comandă" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Sunt toate produsele din comanda digitală" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Ordine" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL imagine" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Grupuri de atribute" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Preț" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Cantitate" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Numărul de reacții" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Preț redus" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produse" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Coduri promoționale" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promoții" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Liste de dorințe" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Etichete de produs" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Categorii etichetate" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Etichete \"Categorii" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Numele proiectului" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Email companie" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Numele companiei" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Adresa companiei" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Numărul de telefon al companiei" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "\"e-mail de la\", uneori trebuie să fie utilizat în locul valorii " "utilizatorului gazdă" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Utilizator gazdă e-mail" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Suma maximă pentru plată" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Suma minimă pentru plată" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Date analitice" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Date publicitare" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Configurație" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Codul limbii" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Numele limbii" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Indicatorul de limbă, dacă există :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Obțineți o listă a limbilor acceptate" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Rezultate căutare produse" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Rezultate căutare produse" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1523,23 +1554,23 @@ msgstr "" " lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " "atributelor în cadrul unui sistem complex." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Părinte al acestui grup" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Grup de atribute părinte" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Grup de atribute" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1558,50 +1589,50 @@ msgstr "" "metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru " "utilizarea în sisteme care interacționează cu furnizori terți." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stochează acreditările și punctele finale necesare pentru comunicarea API a " "furnizorului" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Informații privind autentificarea" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definirea marjei de profit pentru produsele preluate de la acest furnizor" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Procentul de majorare al furnizorului" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Numele acestui vânzător" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Numele furnizorului" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "fișier de răspuns" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "ultimul răspuns de prelucrare al vânzătorului" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Calea fișierului de integrare al furnizorului" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Calea de integrare" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1616,27 +1647,27 @@ msgstr "" "Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " "metadatelor în scopuri administrative." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1647,15 +1678,15 @@ msgstr "" "și clasificarea produselor. Aceasta include atribute pentru un identificator" " intern al etichetei și un nume de afișare ușor de utilizat." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "etichetă de categorie" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "Etichete de categorie" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1677,52 +1708,52 @@ msgstr "" " administratorilor să specifice numele, descrierea și ierarhia categoriilor," " precum și să atribuie atribute precum imagini, etichete sau prioritate." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Încărcați o imagine care reprezintă această categorie" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Categorie imagine" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" "Definiți un procent de majorare pentru produsele din această categorie" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Categoria de părinți" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Numele categoriei" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Furnizați un nume pentru această categorie" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Adăugați o descriere detaliată pentru această categorie" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Descriere categorie" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioritate" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1736,47 +1767,47 @@ msgstr "" "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Categorii" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1792,68 +1823,72 @@ msgstr "" "parte din sistemul de gestionare a stocurilor pentru a permite urmărirea și " "evaluarea produselor disponibile de la diverși furnizori." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Produs asociat" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Atribute de sistem" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1874,55 +1909,55 @@ msgstr "" " îmbunătăți performanța. Este utilizată pentru a defini și manipula datele " "despre produse și informațiile asociate acestora în cadrul unei aplicații." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1938,66 +1973,66 @@ msgstr "" "multe tipuri de valori, inclusiv șir, număr întreg, float, boolean, array și" " obiect. Acest lucru permite structurarea dinamică și flexibilă a datelor." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Grupul acestui atribut" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Șir de caractere" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Număr întreg" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Float" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Obiect" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Tipul valorii atributului" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Tipul de valoare" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Denumirea acestui atribut" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Numele atributului" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "este filtrabil" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " "categorii." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Atribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2007,19 +2042,19 @@ msgstr "" "produs. Leagă \"atributul\" de o \"valoare\" unică, permițând o mai bună " "organizare și reprezentare dinamică a caracteristicilor produsului." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Atributul acestei valori" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Valoarea specifică pentru acest atribut" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2034,39 +2069,39 @@ msgstr "" "asemenea, include o funcție de accesibilitate cu text alternativ pentru " "imagini." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2082,39 +2117,39 @@ msgstr "" "asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " "produse pentru a determina articolele afectate în cadrul campaniei." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Produse incluse" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promovare" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2127,23 +2162,23 @@ msgstr "" "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2160,19 +2195,19 @@ msgstr "" "funcționalitatea mixinilor specifici și oferă caracteristici personalizate " "suplimentare." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Documentar" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Documentare" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2194,59 +2229,59 @@ msgstr "" "unei adrese cu un utilizator, facilitând gestionarea personalizată a " "datelor." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Strada" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Districtul" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Oraș" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Regiunea" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Țara" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adresă" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adrese" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2264,73 +2299,73 @@ msgstr "" " a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost " "utilizat încă" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2338,16 +2373,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2364,140 +2399,141 @@ msgstr "" "de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " "în interfața de administrare este utilizată vizualizarea tabelară" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Utilizator" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Comandă" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" "Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în " "câteva minute." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Un utilizator fără sold nu poate cumpăra cu sold!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2505,7 +2541,7 @@ msgstr "" "nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele " "informații: nume client, e-mail client, număr de telefon client" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2513,7 +2549,7 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2536,110 +2572,110 @@ msgstr "" "produsele digitale. Modelul se integrează cu modelele Order și Product și " "stochează o referință la acestea." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Prețul plătit de client pentru acest produs la momentul achiziției" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Nume și prenume" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM-uri" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2656,15 +2692,15 @@ msgstr "" "adrese URL pentru descărcarea activului atunci când comanda asociată este în" " stare finalizată." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Descărcare" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2679,83 +2715,79 @@ msgstr "" "un rating atribuit de utilizator. Clasa utilizează câmpuri din baza de date " "pentru a modela și gestiona în mod eficient datele de feedback." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" "Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Face referire la produsul specific dintr-o comandă despre care este vorba în" " acest feedback" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Evaluarea produsului" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat" " pentru a adăuga feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Eroare în timpul creării codului promoțional: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Acasă" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Contactați-ne" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Despre noi" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Confirmarea comenzii" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Bună ziua %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2766,23 +2798,23 @@ msgstr "" "informăm că am preluat comanda dvs. în lucru. Mai jos sunt detaliile " "comenzii dvs:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Total" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Preț total" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2791,28 +2823,28 @@ msgstr "" "Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Cele mai bune salutări,
echipa %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Toate drepturile rezervate" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Comanda livrată" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Bună ziua %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2821,7 +2853,7 @@ msgstr "" "Am procesat cu succes comanda dvs. №%(order_uuid)s! Mai jos sunt detaliile " "comenzii dvs:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2829,13 +2861,13 @@ msgstr "" "informații suplimentare\n" " informații suplimentare" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Valoare" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2844,26 +2876,26 @@ msgstr "" "Dacă aveți întrebări, nu ezitați să contactați asistența noastră la " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Cheie" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Adaugă rând" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promocode acordat" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2871,8 +2903,8 @@ msgstr "" "Vă mulțumim pentru că stați cu noi! V-am acordat un cod promoțional\n" " pentru" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2880,24 +2912,24 @@ msgstr "" "Vă mulțumim pentru comanda dvs.! Suntem încântați să vă confirmăm achiziția." " Mai jos sunt detaliile comenzii dvs:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Preț de livrare" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Comanda dvs. va fi livrată la următoarea adresă:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Salutări,
Echipa %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2905,50 +2937,50 @@ msgstr "" "toate drepturile\n" " rezervate" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sunt necesare atât datele, cât și timpul de așteptare" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | contactați-ne inițiat" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Confirmarea comenzii" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Livrarea comenzii" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode acordat" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Nu aveți permisiunea de a efectua această acțiune." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " "pixeli" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2956,7 +2988,7 @@ msgstr "" "Gestionează cererea pentru indexul sitemap și returnează un răspuns XML. Se " "asigură că răspunsul include antetul tip de conținut adecvat pentru XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2966,17 +2998,17 @@ msgstr "" "Această funcție procesează cererea, extrage răspunsul detaliat corespunzător" " al hărții site-ului și stabilește antetul Content-Type pentru XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnează o listă a limbilor acceptate și informațiile corespunzătoare." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnează parametrii site-ului web sub forma unui obiect JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2984,11 +3016,11 @@ msgstr "" "Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din" " cache cu o cheie și un timeout specificate." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Gestionează trimiterea formularelor `contact us`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2996,15 +3028,15 @@ msgstr "" "Gestionează cererile de procesare și validare a URL-urilor din cererile POST" " primite." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Gestionează interogările de căutare globală." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3012,27 +3044,27 @@ msgstr "" "Gestionează descărcarea unui bun digital asociat cu o comandă.\n" "Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid este necesar" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "comanda trebuie plătită înainte de descărcarea activului digital" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Produsul de comandă nu are un produs" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3040,7 +3072,7 @@ msgstr "" "Gestionează cererile pentru favicon-ul unui site web.\n" "Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3051,11 +3083,11 @@ msgstr "" " index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returnează versiunea curentă a eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3070,7 +3102,7 @@ msgstr "" "dinamice în funcție de acțiunea curentă, permisiuni personalizabile și " "formate de redare." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3084,7 +3116,7 @@ msgstr "" "stratul API al aplicației și oferă o modalitate standardizată de a procesa " "cererile și răspunsurile pentru datele AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3100,7 +3132,7 @@ msgstr "" "cum ar fi filtrarea după câmpuri specifice sau recuperarea de informații " "detaliate sau simplificate în funcție de cerere." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3115,7 +3147,7 @@ msgstr "" "serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare " "sunt furnizate prin DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3130,7 +3162,7 @@ msgstr "" "permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa " "date specifice." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3142,7 +3174,7 @@ msgstr "" "serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " "simplifica implementarea punctelor finale API pentru obiectele Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3160,7 +3192,7 @@ msgstr "" "metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " "accesarea feedback-ului aferent unui produs." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3175,7 +3207,7 @@ msgstr "" "acestei clase este de a oferi acces simplificat la resursele legate de " "Vendor prin intermediul cadrului REST Django." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3192,7 +3224,7 @@ msgstr "" "Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " "utilizează sistemul de filtrare Django pentru interogarea datelor." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3212,7 +3244,7 @@ msgstr "" "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "timpul interacțiunii cu datele comenzii." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3227,12 +3259,12 @@ msgstr "" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "ului privind instanțele OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestionează operațiunile legate de imaginile produselor din aplicație." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3240,16 +3272,16 @@ msgstr "" "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "acțiuni API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestionează operațiunile legate de datele privind stocurile din sistem." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3268,7 +3300,7 @@ msgstr "" "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "cazului în care sunt acordate permisiuni explicite." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3283,12 +3315,12 @@ msgstr "" "serializatorului și gestionarea permisiunilor în funcție de contextul " "cererii." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..82517f628c79c8d8a3f3e303e621da255f5bf452 GIT binary patch literal 118853 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 MW8WtjDc?Ex|9P{Zxc~qF literal 0 HcmV?d00001 diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/engine/core/locale/ru_RU/LC_MESSAGES/django.po similarity index 79% rename from core/locale/ru_RU/LC_MESSAGES/django.po rename to engine/core/locale/ru_RU/LC_MESSAGES/django.po index 88076c5c..d20e672f 100644 --- a/core/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/core/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Уникальный идентификатор" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Уникальный идентификатор используется для точной идентификации любого " "объекта базы данных" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Активен" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Если установлено значение false, этот объект не может быть виден " "пользователям без необходимого разрешения" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Создано" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Когда объект впервые появился в базе данных" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Модифицированный" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Когда объект был отредактирован в последний раз" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Переводы" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Общие сведения" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Отношения" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "дополнительная информация" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Метаданные" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Временные метки" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Активировать выбранный %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Выбранные сущности активированы!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Деактивировать выбранный %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Выбранные сущности были деактивированы!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Значение атрибута" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Значения атрибутов" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Изображение" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Изображения" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Наличие" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Наличия" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Заказанный товар" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Заказанные товары" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Дети" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Конфигурация" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Главное" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Готовые" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Доставка" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Доставлено" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Отменено" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Не удалось" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "В ожидании" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Принято" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Возвращенные деньги" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Оплата" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Моментальный" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Успешный" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Ввод/вывод кэша" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Применяйте только ключ для чтения разрешенных данных из кэша.\n" "Применяйте ключ, данные и таймаут с аутентификацией для записи данных в кэш." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Получите список поддерживаемых языков" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Получите параметры приложения, которые можно использовать" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Отправьте сообщение в службу поддержки" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Ручка глобального поиска для запросов по всем открытым таблицам проекта" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Приобрести заказ в качестве предприятия" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,142 +231,143 @@ msgstr "" "Приобретите заказ как бизнес, используя предоставленные `продукты` с " "`product_uuid` и `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Список всех групп атрибутов (простой вид)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Получение одной группы атрибутов (подробный просмотр)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Создайте группу атрибутов" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Удаление группы атрибутов" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Переписать существующую группу атрибутов с сохранением нередактируемых " "элементов" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Переписывание некоторых полей существующей группы атрибутов с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Список всех атрибутов (простой вид)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Получение одного атрибута (подробный просмотр)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Создайте атрибут" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Удалить атрибут" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Переписать существующий атрибут, сохранив нередактируемый" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Переписывание некоторых полей существующего атрибута с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Список всех значений атрибутов (простой вид)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Получение значения одного атрибута (подробный просмотр)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Создание значения атрибута" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Удалить значение атрибута" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Перезапись существующего значения атрибута с сохранением нередактируемых " "значений" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Переписывание некоторых полей существующего значения атрибута с сохранением " "нередактируемых значений" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Список всех категорий (простой вид)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Получение одной категории (подробный просмотр)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "UUID или slug категории" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Создайте категорию" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Удалить категорию" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Возвращает снимок SEO-метаданных категории." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "UUID или slug категории" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Список всех категорий (простой вид)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Для пользователей, не являющихся сотрудниками, возвращаются только их " "собственные заказы." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -370,39 +375,39 @@ msgstr "" "Поиск подстроки с учетом регистра в human_readable_id, " "order_products.product.name и order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Отфильтруйте ордера с buy_time >= этому времени ISO 8601" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Отфильтруйте ордера с buy_time <= этому времени ISO 8601" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Фильтр по точному UUID заказа" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Фильтр по точному человекочитаемому идентификатору заказа" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Фильтр по электронной почте пользователя (точное совпадение без учета " "регистра)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Фильтр по UUID пользователя" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Фильтр по статусу заказа (нечувствительное к регистру подстрочное " "соответствие)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -412,38 +417,42 @@ msgstr "" "user_email, user, status, created, modified, buy_time, random. Префикс '-' " "для нисходящего порядка (например, '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Получение одной категории (подробный просмотр)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "UUID заказа или человекочитаемый идентификатор" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Создайте атрибут" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Не работает для нештатных пользователей." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Удалить атрибут" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Покупная цена на момент заказа" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -453,19 +462,19 @@ msgstr "" "завершается с использованием баланса пользователя; если используется " "`force_payment`, инициируется транзакция." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "приобретение заказа без создания учетной записи" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "завершает покупку заказа для незарегистрированного пользователя." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Добавить товар в заказ" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -473,11 +482,11 @@ msgstr "" "Добавляет товар в заказ, используя предоставленные `product_uuid` и " "`attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Добавьте список продуктов для заказа, количество не учитывается" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -485,11 +494,11 @@ msgstr "" "Добавляет список товаров в заказ, используя предоставленные `product_uuid` и" " `attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Удалить продукт из заказа" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -497,11 +506,11 @@ msgstr "" "Удаляет товар из заказа, используя предоставленные `product_uuid` и " "`attributes`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Удалите продукт из заказа, количество не будет учитываться" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -509,82 +518,82 @@ msgstr "" "Удаляет список товаров из заказа, используя предоставленные `product_uuid` и" " `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Список всех атрибутов (простой вид)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Для пользователей, не являющихся сотрудниками, возвращаются только их " "собственные списки желаний." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Получение одного атрибута (подробный просмотр)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Создайте атрибут" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Не работает для нештатных пользователей." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Удалить атрибут" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Переписать существующий атрибут, сохранив нередактируемый" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Переписывание некоторых полей существующего атрибута с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Добавить товар в заказ" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Добавляет товар в список желаний, используя предоставленный `product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Удалить продукт из списка желаний" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Удаляет продукт из списка желаний, используя предоставленный `product_uuid`." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Добавьте много товаров в список желаний" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Добавляет множество товаров в список желаний, используя предоставленные " "`product_uuids`." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Удалить продукт из заказа" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Удаляет множество товаров из списка желаний, используя предоставленные " "`product_uuids`." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -604,15 +613,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`." -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Список всех продуктов (простой вид)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(точный) UUID продукта" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -620,558 +629,568 @@ msgstr "" "Список полей для сортировки, разделенных запятыми. Для сортировки по убыванию используйте префикс `-`. \n" "**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Получение одного продукта (подробный просмотр)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "UUID или Slug продукта" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Создать продукт" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Переписать существующий продукт, сохранив нередактируемые поля" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Обновление некоторых полей существующего продукта с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Удалить продукт" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "список всех разрешенных отзывов о продукте" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Возвращает снимок метаданных SEO продукта." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Перечислите все адреса" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Получение одного адреса" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Создайте новый адрес" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Удалить адрес" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Обновление всего адреса" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Частичное обновление адреса" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Автозаполнение ввода адреса" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Строка запроса сырых данных, пожалуйста, дополните ее данными с конечной " "точки geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "ограничивает количество результатов, 1 < limit < 10, по умолчанию: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "список всех отзывов (простой вид)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "получить один отзыв (подробный просмотр)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "создать отзыв" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "удалить отзыв" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "список всех отношений \"заказ-продукт\" (простой вид)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "получить одно отношение \"заказ-продукт\" (подробный просмотр)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "создать новое отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "заменить существующее отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "частично обновить существующее отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "удалить отношение \"заказ-продукт" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Список всех брендов (простой вид)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Извлечение одного бренда (подробный просмотр)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID бренда или ссылка" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Создайте бренд" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Удалить бренд" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot для бренда" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Список всех продавцов (простой вид)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Получение данных по одному поставщику (подробный просмотр)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Создать поставщика" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Удалить поставщика" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Список всех изображений товаров (простой вид)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Получение изображения одного продукта (детальный просмотр)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Создайте изображение продукта" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Удаление изображения продукта" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Список всех промокодов (простой вид)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Получение одного промокода (подробный просмотр)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Создайте промокод" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Удалить промокод" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Список всех рекламных акций (простой вид)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Получение одной акции (подробный просмотр)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Создайте рекламную акцию" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Удалить акцию" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Список всех акций (простой вид)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Получение одной акции (подробный просмотр)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Создайте запись о запасах" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Удаление записи о запасах" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Список всех тегов товара (простой вид)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Получение одной метки товара (подробный просмотр)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Создайте тег продукта" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Удаление тега продукта" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Переписать существующую категорию с сохранением нередактируемых объектов" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Переписать некоторые поля существующей категории с сохранением " "нередактируемых полей" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Поиск" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Имя" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Категории" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Категории Слизни" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Теги" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Мин. цена" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Максимальная цена" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Активен" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Бренд" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Атрибуты" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Количество" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Слаг" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Цифровой" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Включите подкатегории" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "Артикул" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Для использования флага include_subcategories должен быть указан " "category_uuid." -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Поиск (идентификатор, название продукта или номер детали)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Куплено после (включительно)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Куплено ранее (включительно)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Электронная почта пользователя" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID пользователя" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Статус" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Человекочитаемый идентификатор" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Родитель" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Вся категория (есть хотя бы 1 продукт или нет)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Уровень" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "UUID продукта" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Ключ, который нужно найти в тайнике или вложить в него" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Данные для хранения в кэше" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Тайм-аут в секундах для занесения данных в кэш" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Кэшированные данные" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Добавить товар в заказ" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Заказ {order_uuid} не найден!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Удалить все товары из заказа" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Купить заказ" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие " "варианты!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Выполните действие над списком товаров в заказе" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Удалить/добавить" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Выполните действие над списком продуктов в списке желаний" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Пожалуйста, укажите значение `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Список желаний {wishlist_uuid} не найден!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Добавить товар в заказ" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Купить заказ" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1179,137 +1198,141 @@ msgstr "" "Пожалуйста, отправьте атрибуты в виде строки, отформатированной как " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Добавить или удалить отзыв для продукта заказа" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Действие должно быть либо `add`, либо `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Заказ товара {order_product_uuid} не найден!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Предел должен быть от 1 до 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Атрибуты" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Сгруппированные атрибуты" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Группы атрибутов" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Бренды" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Категории" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Процент наценки" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Минимальные и максимальные цены на товары в этой категории, если они " "доступны." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Теги для этой категории" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Продукты в этой категории" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Поставщики" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Широта (координата Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Долгота (координата X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Как" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Значение рейтинга от 1 до 10, включительно, или 0, если он не установлен." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Уведомления" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Обратная связь" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Адрес для выставления счетов" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1317,202 +1340,210 @@ msgstr "" "Адрес доставки для данного заказа, оставьте пустым, если он совпадает с " "адресом выставления счета или не применяется" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Общая стоимость этого заказа" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Общее количество продуктов в заказе" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Все ли товары в заказе представлены в цифровом виде" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Операции для этого заказа" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Заказы" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL-адрес изображения" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Изображения товара" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Бренд" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Группы атрибутов" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Цена" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Количество" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Количество отзывов" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Цена со скидкой" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Товары" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Промокоды" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Промоакции" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Товар" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Списки желаний" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Теги товара" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Категории с метками" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Теги категорий" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Название проекта" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Электронная почта компании" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Название компании" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Адрес компании" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Номер телефона компании" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', иногда его нужно использовать вместо значения пользователя " "хоста." -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Пользователь узла электронной почты" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Максимальная сумма для оплаты" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Минимальная сумма для оплаты" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Аналитические данные" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Рекламные данные" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Конфигурация" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Код языка" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Название языка" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Языковой флаг, если он существует :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Получите список поддерживаемых языков" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Результаты поиска товаров" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Результаты поиска товаров" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1525,23 +1556,23 @@ msgstr "" "быть полезно для категоризации и более эффективного управления атрибутами в " "сложной системе." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Родитель этой группы" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Родительская группа атрибутов" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Группа атрибутов" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1560,49 +1591,49 @@ msgstr "" "метаданные и ограничения, что делает ее пригодной для использования в " "системах, взаимодействующих со сторонними поставщиками." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" " поставщика." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Информация об аутентификации" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Определите наценку для товаров, полученных от этого продавца" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Процент наценки поставщика" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Имя этого продавца" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Название поставщика" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "файл ответа" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "последний ответ поставщика на обработку" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Путь к файлу интеграции поставщика" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Путь интеграции" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1617,27 +1648,27 @@ msgstr "" "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Название тега" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1648,15 +1679,15 @@ msgstr "" "классификации продуктов. Он включает атрибуты для внутреннего идентификатора" " тега и удобного для пользователя отображаемого имени." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "тег категории" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "теги категорий" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1678,51 +1709,51 @@ msgstr "" "администраторам указывать название, описание и иерархию категорий, а также " "назначать атрибуты, такие как изображения, теги или приоритет." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Загрузите изображение, представляющее эту категорию" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Изображение категории" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Определите процент наценки для товаров в этой категории" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Родитель данной категории для формирования иерархической структуры" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Родительская категория" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Название категории" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Укажите название этой категории" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Добавьте подробное описание для этой категории" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Описание категории" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Приоритет" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1735,47 +1766,47 @@ msgstr "" "связанные категории, уникальную метку и порядок приоритетов. Он позволяет " "организовать и представить данные, связанные с брендом, в приложении." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Название бренда" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Категории" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1791,68 +1822,72 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Сопутствующий товар" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Артикул поставщика" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Атрибуты системы" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Наличия" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1873,55 +1908,55 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Название продукта" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Описание товара" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Парт. номер" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1938,65 +1973,65 @@ msgstr "" "плавающую форму, булевую форму, массив и объект. Это позволяет динамично и " "гибко структурировать данные." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Группа этого атрибута" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Строка" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Целое число" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Поплавок" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Булево" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Массив" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Объект" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Тип значения атрибута" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Тип значения" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Имя этого атрибута" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Имя атрибута" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "поддается фильтрации" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Атрибут" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2006,19 +2041,19 @@ msgstr "" " Он связывает \"атрибут\" с уникальным \"значением\", позволяя лучше " "организовать и динамически представить характеристики продукта." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Атрибут этого значения" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Конкретное значение для этого атрибута" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2032,41 +2067,41 @@ msgstr "" "товарам и определения порядка их отображения. Он также включает функцию " "доступности с альтернативным текстом для изображений." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Изображения товаров" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2082,39 +2117,39 @@ msgstr "" "акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " "товаров для определения товаров, на которые распространяется акция." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Название акции" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Продвижение" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2127,23 +2162,23 @@ msgstr "" "товаров, а также поддерживая операции добавления и удаления нескольких " "товаров одновременно." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2159,19 +2194,19 @@ msgstr "" "документальных файлов. Он расширяет функциональность определенных миксинов и" " предоставляет дополнительные пользовательские возможности." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2192,59 +2227,59 @@ msgstr "" "обработки или проверки. Класс также позволяет ассоциировать адрес с " "пользователем, что облегчает работу с персонализированными данными." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Адресная строка" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Улица" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Округ" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Город" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Регион" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Страна" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Адрес" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Адреса" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2261,74 +2296,74 @@ msgstr "" "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Промокод" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2336,16 +2371,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2362,138 +2397,139 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Статус заказа" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Пользователь" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Время покупки" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Заказ" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2501,14 +2537,14 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2530,109 +2566,109 @@ msgstr "" "для цифровых продуктов. Модель интегрируется с моделями Order и Product и " "хранит ссылки на них." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Имя" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2648,15 +2684,15 @@ msgstr "" " общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Скачать" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Скачать" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2671,81 +2707,77 @@ msgstr "" "пользователем. Класс использует поля базы данных для эффективного " "моделирования и управления данными отзывов." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Рейтинг продукции" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "чтобы добавить отзыв, необходимо указать комментарий, рейтинг и uuid " "продукта заказа." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Ошибка при создании промокода: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Главная" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Свяжитесь с нами" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "О нас" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Подтверждение заказа" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Логотип" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Привет %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2755,23 +2787,23 @@ msgstr "" "Благодарим вас за заказ #%(order.pk)s! Мы рады сообщить Вам, что приняли Ваш" " заказ в работу. Ниже приведены детали вашего заказа:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Всего" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Общая цена" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2780,28 +2812,28 @@ msgstr "" "Если у вас возникнут вопросы, обращайтесь в нашу службу поддержки по адресу " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "С наилучшими пожеланиями,
команда %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Все права защищены" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Заказ доставлен" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Привет %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2810,7 +2842,7 @@ msgstr "" "Мы успешно обработали ваш заказ №%(order_uuid)s! Ниже приведены детали " "вашего заказа:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2818,13 +2850,13 @@ msgstr "" "дополнительная\n" " информация" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Значение" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2833,26 +2865,26 @@ msgstr "" "Если у вас возникнут вопросы, обращайтесь в нашу службу поддержки по адресу " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Ключ" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Добавить строку" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Предоставленный промокод" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2860,8 +2892,8 @@ msgstr "" "Спасибо, что остаетесь с нами! Мы предоставили вам промокод\n" " для" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2869,24 +2901,24 @@ msgstr "" "Спасибо за ваш заказ! Мы рады подтвердить вашу покупку. Ниже приведены " "детали вашего заказа:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Цена доставки" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Ваш заказ будет доставлен по следующему адресу:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "С наилучшими пожеланиями,
Команда %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2894,52 +2926,52 @@ msgstr "" "все права\n" " защищены" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Требуются как данные, так и тайм-аут" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " "216000 секунд" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | свяжитесь с нами по инициативе" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Подтверждение заказа" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Заказ доставлен" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | Промокод предоставлен" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "У вас нет разрешения на выполнение этого действия." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Параметр NOMINATIM_URL должен быть настроен!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Размеры изображения не должны превышать w{max_width} x h{max_height} " "пикселей" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2948,7 +2980,7 @@ msgstr "" "Он обеспечивает включение в ответ заголовка типа содержимого, " "соответствующего типу XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2958,17 +2990,17 @@ msgstr "" "обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и" " устанавливает заголовок Content-Type для XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Возвращает список поддерживаемых языков и соответствующую информацию о них." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Возвращает параметры сайта в виде объекта JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2976,26 +3008,26 @@ msgstr "" "Выполняет операции с кэшем, такие как чтение и установка данных кэша с " "заданным ключом и таймаутом." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Обрабатывает отправленные формы `contact us`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" "Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Обрабатывает глобальные поисковые запросы." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Работает с логикой покупки как бизнеса без регистрации." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3003,27 +3035,27 @@ msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" "Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "требуется order_product_uuid" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "заказ должен быть оплачен до загрузки цифрового актива" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "У заказанного продукта нет продукта" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon не найден" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3031,7 +3063,7 @@ msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" "Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3042,11 +3074,11 @@ msgstr "" "администратора Django. Для обработки HTTP-перенаправления используется " "функция Django `redirect`." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Возвращает текущую версию eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3060,7 +3092,7 @@ msgstr "" " включает в себя поддержку динамических классов сериализаторов в зависимости" " от текущего действия, настраиваемые разрешения и форматы рендеринга." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3074,7 +3106,7 @@ msgstr "" "уровня API приложения и обеспечивает стандартизированный способ обработки " "запросов и ответов на данные AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3090,7 +3122,7 @@ msgstr "" "например, фильтровать по определенным полям или получать подробную или " "упрощенную информацию в зависимости от запроса." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3105,7 +3137,7 @@ msgstr "" "соответствующие сериализаторы для различных действий. Возможности фильтрации" " предоставляются через DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3120,7 +3152,7 @@ msgstr "" "чтобы только авторизованные пользователи могли получить доступ к " "определенным данным." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3132,7 +3164,7 @@ msgstr "" "сериализации объектов Brand. Он использует фреймворк Django ViewSet для " "упрощения реализации конечных точек API для объектов Brand." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3150,7 +3182,7 @@ msgstr "" "методы для получения информации о продукте, применения разрешений и доступа " "к связанным отзывам о продукте." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3165,7 +3197,7 @@ msgstr "" "класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " "фреймворк Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3182,7 +3214,7 @@ msgstr "" "доступа. Он расширяет базовый `EvibesViewSet` и использует систему " "фильтрации Django для запроса данных." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3203,7 +3235,7 @@ msgstr "" "соответствующим образом устанавливает разрешения при взаимодействии с " "данными заказа." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3218,12 +3250,12 @@ msgstr "" " от запрашиваемого действия. Кроме того, он предоставляет подробное действие" " для обработки отзывов об экземплярах OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "" "Управляет операциями, связанными с изображениями продуктов в приложении." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3231,16 +3263,16 @@ msgstr "" "Управляет получением и обработкой экземпляров PromoCode с помощью различных " "действий API." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "" "Представляет собой набор представлений для управления рекламными акциями." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Выполняет операции, связанные с данными о запасах в системе." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3258,7 +3290,7 @@ msgstr "" "проверка прав доступа гарантирует, что пользователи смогут управлять только " "своими списками желаний, если не предоставлены явные права." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3273,12 +3305,12 @@ msgstr "" "методов HTTP, переопределение сериализатора и обработку разрешений в " "зависимости от контекста запроса." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..03b6a0e1f2d138b0e1c30318febd9af0ce53c5cd GIT binary patch literal 87743 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 literal 0 HcmV?d00001 diff --git a/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po similarity index 74% rename from core/locale/sv_SE/LC_MESSAGES/django.po rename to engine/core/locale/sv_SE/LC_MESSAGES/django.po index 78bdd0e5..793fcb12 100644 --- a/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Unikt ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "Unikt ID används för att säkert identifiera alla databasobjekt" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Är aktiv" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,158 +33,162 @@ msgstr "" "Om det är inställt på false kan objektet inte ses av användare utan " "nödvändigt tillstånd" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Skapad" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "När objektet först dök upp på databasen" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Modifierad" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "När objektet senast redigerades" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Översättningar" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Allmänt" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Relationer" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "Ytterligare information" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Tidsstämplar" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Aktivera vald %(verbose_name_plural)s." -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Valda artiklar har aktiverats!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Avaktivera vald %(verbose_name_plural)s." -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Valda objekt har avaktiverats!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Attributvärde" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Attributets värden" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Bild" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Bilder" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stock" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stocks" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Beställ produkt" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Beställ produkter" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Barn och ungdomar" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfig" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Kärnan" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Färdig" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Leverera" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Levereras" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Annullerad" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Misslyckades" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Avvaktande" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Accepterad" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Återbetalda pengar" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Betalning" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Framgångsrik" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -192,31 +196,31 @@ msgstr "" "Använd endast en nyckel för att läsa tillåtna data från cacheminnet.\n" "Använd nyckel, data och timeout med autentisering för att skriva data till cacheminnet." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Hämta en lista över språk som stöds" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Hämta applikationens exponerbara parametrar" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Skicka ett meddelande till supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Begär en CORSed URL. Endast https tillåtet." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Global sökpunkt för att söka i projektets alla tabeller" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Köpa en order som ett företag" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -224,136 +228,137 @@ msgstr "" "Köp en order som ett företag, med hjälp av de tillhandahållna `produkterna` " "med `produkt_uuid` och `attribut`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Lista alla attributgrupper (enkel vy)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Hämta en enskild attributgrupp (detaljerad vy)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Skapa en attributgrupp" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Ta bort en attributgrupp" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Skriva om en befintlig attributgrupp och spara icke-redigerbara attribut" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Skriv om vissa fält i en befintlig attributgrupp och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Lista alla attribut (enkel vy)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Hämta ett enskilt attribut (detaljerad vy)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Skapa ett attribut" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Ta bort ett attribut" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Lista alla attributvärden (enkel vy)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Hämta ett enskilt attributvärde (detaljerad vy)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Skapa ett attributvärde" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Ta bort ett attributvärde" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "Skriva om ett befintligt attributvärde som sparar icke-redigerbara" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Skriva om vissa fält i ett befintligt attributvärde och spara icke-" "redigerbara fält" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Lista alla kategorier (enkel vy)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Hämta en enskild kategori (detaljerad vy)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "Skapa en kategori" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "Ta bort en kategori" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "SEO Meta snapshot" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "Returnerar en ögonblicksbild av kategorins SEO-metadata" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "Kategori UUID eller slug" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "Skapa en kategori" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "Ta bort en kategori" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "SEO Meta snapshot" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "Returnerar en ögonblicksbild av kategorins SEO-metadata" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Lista alla kategorier (enkel vy)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "För användare som inte är anställda returneras endast deras egna " "beställningar." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -361,37 +366,37 @@ msgstr "" "Substringsökning utan skiftlägeskänslighet över human_readable_id, " "order_products.product.name och order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Filtrera order med buy_time >= denna ISO 8601-datumtid" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Filtrera order med buy_time <= denna ISO 8601-datumtid" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Filtrera efter exakt order UUID" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Filtrera efter exakt mänskligt läsbart order-ID" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Filtrera efter användarens e-post (exakt matchning utan " "skiftlägeskänslighet)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Filtrera efter användarens UUID" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "Filtrera efter orderstatus (skiftlägeskänslig matchning av delsträng)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -401,35 +406,39 @@ msgstr "" "status, created, modified, buy_time, random. Prefix med \"-\" för fallande " "ordning (t.ex. \"-buy_time\")." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Hämta en enskild kategori (detaljerad vy)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Order UUID eller mänskligt läsbart id" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Skapa ett attribut" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Fungerar inte för användare som inte är anställda." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Ta bort ett attribut" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Skriva om en befintlig kategori som sparar icke-redigerbara" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "Skriva om vissa fält i en befintlig kategori spara icke-redigerbara" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Inköpspris vid ordertillfället" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -438,19 +447,19 @@ msgstr "" "Slutför orderköpet. Om `force_balance` används, slutförs köpet med " "användarens saldo; Om `force_payment` används, initieras en transaktion." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "köpa en order utan att skapa ett konto" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "slutför orderköpet för en icke registrerad användare." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Lägg till en produkt i ordern" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -458,11 +467,11 @@ msgstr "" "Lägger till en produkt till en order med hjälp av de angivna `product_uuid` " "och `attributes`." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Lägg till en lista med produkter till ordern, kvantiteter räknas inte" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -470,11 +479,11 @@ msgstr "" "Lägger till en lista med produkter till en order med hjälp av de angivna " "`product_uuid` och `attributes`." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Ta bort en produkt från ordern" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -482,11 +491,11 @@ msgstr "" "Tar bort en produkt från en order med hjälp av de angivna `product_uuid` och" " `attributen`." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Ta bort en produkt från ordern, kvantiteter räknas inte" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -494,84 +503,84 @@ msgstr "" "Tar bort en lista med produkter från en order med hjälp av de angivna " "`product_uuid` och `attributes`." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Lista alla attribut (enkel vy)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "För användare som inte är anställda returneras endast deras egna " "önskelistor." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Hämta ett enskilt attribut (detaljerad vy)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Skapa ett attribut" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Fungerar inte för användare som inte är anställda." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Ta bort ett attribut" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Skriva om ett befintligt attribut och spara icke-redigerbara" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Skriv om vissa fält i ett befintligt attribut och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Lägg till en produkt i ordern" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Lägger till en produkt i en önskelista med hjälp av den angivna " "`product_uuid`." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Ta bort en produkt från önskelistan" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Tar bort en produkt från en önskelista med hjälp av den angivna " "`product_uuid`" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Lägg till många produkter på önskelistan" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Lägger till många produkter till en önskelista med hjälp av de angivna " "`product_uuids`" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Ta bort en produkt från ordern" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Tar bort många produkter från en önskelista med hjälp av de angivna " "`product_uuids`" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -591,15 +600,15 @@ msgstr "" "`color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`,\n" "`b64-beskrivning=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Lista alla produkter (enkel vy)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exakt) UUID för produkt" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -607,681 +616,695 @@ msgstr "" "Kommaseparerad lista över fält att sortera efter. Prefix med `-` för fallande. \n" "**Tillåtna:** uuid, betyg, namn, slug, skapad, modifierad, pris, slumpmässig" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Hämta en enskild produkt (detaljerad vy)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Skapa en produkt" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Skriva om en befintlig produkt och bevara icke redigerbara fält" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Uppdatera vissa fält i en befintlig produkt och bevara icke redigerbara fält" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Ta bort en produkt" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "listar alla tillåtna återkopplingar för en produkt" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Returnerar en ögonblicksbild av produktens SEO-metadata" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Lista alla adresser" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Hämta en enskild adress" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Skapa en ny adress" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Ta bort en adress" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Uppdatera en hel adress" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Delvis uppdatera en adress" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Autokomplettering av adressinmatning" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "Frågesträng för rådata, komplettera med data från geo-IP-slutpunkt" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "begränsar resultatmängden, 1 < limit < 10, standard: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "lista alla återkopplingar (enkel vy)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "hämta en enskild feedback (detaljerad vy)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "skapa en återkoppling" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "ta bort en återkoppling" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "skriva om en befintlig feedback och spara icke-redigerbara filer" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "skriva om vissa fält i en befintlig feedback och spara icke-redigerbara fält" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "lista alla order-produktrelationer (enkel vy)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "hämta en enskild order-produktrelation (detaljerad vy)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "skapa en ny relation mellan order och produkt" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "ersätta en befintlig order-produktrelation" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "delvis uppdatera en befintlig order-produktrelation" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "ta bort en order-produktrelation" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "lägga till eller ta bort feedback om en order-produktrelation" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Lista alla varumärken (enkel vy)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Hämta ett enskilt varumärke (detaljerad vy)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "UUID eller slug för varumärke" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Skapa ett varumärke" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Ta bort ett varumärke" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Skriva om ett befintligt varumärke och spara icke-redigerbara produkter" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Skriva om vissa fält i ett befintligt varumärke och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot for brand" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Lista alla leverantörer (enkel vy)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Hämta en enskild leverantör (detaljerad vy)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Skapa en leverantör" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Ta bort en leverantör" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Skriva om en befintlig leverantör och spara icke-redigerbara filer" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig leverantör och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Lista alla produktbilder (enkel vy)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Hämta en enskild produktbild (detaljerad vy)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Skapa en produktbild" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Ta bort en produktbild" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "Skriva om en befintlig produktbild och spara icke-redigerbara objekt" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Skriva om några fält i en befintlig produktbild och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Lista alla kampanjkoder (enkel vy)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Hämta en enskild kampanjkod (detaljerad vy)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Skapa en kampanjkod" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Ta bort en kampanjkod" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "Skriva om en befintlig kampanjkod som sparar icke-redigerbara" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig kampanjkod och spara icke-redigerbara " "fält" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Lista alla kampanjer (enkel vy)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Hämta en enskild kampanj (detaljerad vy)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Skapa en kampanj" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Ta bort en kampanj" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Skriv om en befintlig kampanj som sparar icke-redigerbara" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig kampanj och spara icke-redigerbara fält" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Lista alla aktier (enkel vy)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Hämta en enskild aktie (detaljerad vy)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Skapa en lagerpost" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Ta bort en lagerpost" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Skriva om en befintlig lagerpost och spara icke-redigerbara uppgifter" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig lagerpost och spara icke-redigerbara " "uppgifter" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Lista alla produkttaggar (enkel vy)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Hämta en enskild produkttagg (detaljerad vy)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Skapa en produkttagg" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Ta bort en produkttagg" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Skriv om en befintlig produkttagg och spara icke-redigerbara objekt" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Skriva om vissa fält i en befintlig produkttagg och spara icke-redigerbara " "fält" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Ingen sökterm angavs." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Sök" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Namn" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Sniglar" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Etiketter" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Max pris" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Är aktiv" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Varumärke" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Attribut" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Kvantitet" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Snigel" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Är digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Inkludera underkategorier" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det måste finnas en category_uuid för att använda flaggan " "include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Sök (ID, produktnamn eller artikelnummer)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Köpt efter (inklusive)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Köpt tidigare (inklusive)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Användarens e-post" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "Användarens UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Status" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Förälder" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Hela kategorin (har minst 1 produkt eller inte)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Nivå" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Produktens UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nyckel att leta efter i eller sätta in i cachen" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data som ska lagras i cacheminnet" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder för att lägga data i cacheminnet" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Cachad data" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Lägg till en produkt i ordern" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} hittades inte!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Ta bort alla produkter från ordern" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Köpa en order" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt " "uteslutande!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Utför en åtgärd på en lista med produkter i ordern" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Ta bort/lägga till" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Åtgärden måste vara antingen \"lägg till\" eller \"ta bort\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Utför en åtgärd på en lista med produkter i önskelistan" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vänligen ange värdet för `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Önskelista {wishlist_uuid} hittades inte!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Lägg till en produkt i ordern" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Köpa en order" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Skicka attributen som en sträng formaterad som attr1=värde1,attr2=värde2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Lägg till eller ta bort en feedback för orderprodukten" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Åtgärden måste vara antingen `add` eller `remove`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderprodukt {order_product_uuid} hittades inte!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Gränsen måste vara mellan 1 och 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Attribut" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Grupperade attribut" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Grupper av attribut" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Brands" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategorier" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Procentuell påslagning" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Vilka attribut och värden som kan användas för att filtrera denna kategori." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Minsta och högsta pris för produkter i denna kategori, om tillgängligt." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Taggar för denna kategori" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Produkter i denna kategori" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Leverantörer" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Latitud (Y-koordinat)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Longitud (X-koordinat)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Hur gör man" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "Ratingvärde från 1 till och med 10, eller 0 om det inte är inställt." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Meddelanden" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Återkoppling" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Faktureringsadress" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1289,200 +1312,208 @@ msgstr "" "Leveransadress för denna order, lämna tom om den är samma som " "faktureringsadressen eller om den inte är tillämplig" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Totalpris för denna order" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Totalt antal produkter i ordern" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Är alla produkter i beställningen digitala" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Beställningar" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL för bild" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Produktens bilder" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Återkoppling" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Varumärke" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Attributgrupper" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Pris" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Kvantitet" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Antal återkopplingar" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Rabatterat pris" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Produkter" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promokoder" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Produkter på rea" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Leverantör" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Önskelistor" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Taggade produkter" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Produkttaggar" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Taggade kategorier" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriernas taggar" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Projektets namn" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Företagets e-post" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Företagets namn" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Företagets adress" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Företagets telefonnummer" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "\"email from\", ibland måste det användas istället för host user-värdet" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "E-post värd användare" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Högsta belopp för betalning" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Lägsta belopp för betalning" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analysdata" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Annonsdata" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfiguration" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Språkkod" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Språkets namn" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Språkflagga, om sådan finns :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Hämta en lista över språk som stöds" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Sökresultat för produkter" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Sökresultat för produkter" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1495,23 +1526,23 @@ msgstr "" "användbart för att kategorisera och hantera attribut på ett mer effektivt " "sätt i ett komplext system." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Förälder till denna grupp" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Överordnad attributgrupp" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Attributgruppens namn" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Attributgrupp" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1530,50 +1561,50 @@ msgstr "" "metadata och begränsningar, vilket gör den lämplig att använda i system som " "interagerar med tredjepartsleverantörer." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens " "API-kommunikation" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Autentiseringsinformation" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definiera markeringen för produkter som hämtas från den här leverantören" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Leverantörens påslag i procent" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Namn på denna säljare" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Leverantörens namn" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "svarsfil" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "säljarens senaste bearbetningssvar" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Sökväg till leverantörens integrationsfil" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Integrationsväg" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1588,27 +1619,27 @@ msgstr "" "operationer som exporteras via mixins och tillhandahåller metadataanpassning" " för administrativa ändamål." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Intern taggidentifierare för produkttaggen" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tagg namn" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Användarvänligt namn för produkttaggen" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Taggens visningsnamn" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Produktmärkning" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1619,15 +1650,15 @@ msgstr "" "klassificera produkter. Den innehåller attribut för en intern " "taggidentifierare och ett användarvänligt visningsnamn." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "kategori tagg" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "Kategoritaggar" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1649,51 +1680,51 @@ msgstr "" " ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Ladda upp en bild som representerar denna kategori" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Kategori bild" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Definiera en påslagsprocent för produkter i den här kategorin" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Förälder till denna kategori för att bilda en hierarkisk struktur" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Föräldrakategori" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Namn på kategori" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Ange ett namn för denna kategori" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Lägg till en detaljerad beskrivning för denna kategori" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Beskrivning av kategori" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Prioritet" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1707,47 +1738,47 @@ msgstr "" "prioritetsordning. Den gör det möjligt att organisera och representera " "varumärkesrelaterade data i applikationen." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Varumärke" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Varumärke liten image" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Varumärke med stor image" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Valfria kategorier som detta varumärke är förknippat med" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1763,68 +1794,72 @@ msgstr "" "lagerhanteringssystemet för att möjliggöra spårning och utvärdering av " "produkter som finns tillgängliga från olika leverantörer." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Associerad leverantör" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Försäljningspris" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Tillhörande produkt" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Det pris som betalats till säljaren för denna produkt" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Antal i lager" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Leverantörens SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Digital fil" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Systemattribut" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Lagerposter" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1845,55 +1880,55 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Är produkten digital" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Produktens namn" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Produktbeskrivning" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Artikelnummer" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1909,65 +1944,65 @@ msgstr "" "sträng, heltal, flottör, boolean, array och objekt. Detta ger möjlighet till" " dynamisk och flexibel datastrukturering." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Grupp av detta attribut" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Sträng" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Heltal" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Flottör" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Array" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Objekt" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Typ av attributets värde" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Typ av värde" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Namn på detta attribut" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Attributets namn" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "är filtrerbar" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Vilka attribut och värden som kan användas för att filtrera denna kategori." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Attribut" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1978,19 +2013,19 @@ msgstr "" "möjliggör bättre organisation och dynamisk representation av " "produktegenskaper." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Attribut för detta värde" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Den specifika produkt som är associerad med detta attributs värde" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Det specifika värdet för detta attribut" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2004,39 +2039,39 @@ msgstr "" "produkter och bestämma deras visningsordning. Den innehåller också en " "tillgänglighetsfunktion med alternativ text för bilderna." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Tillhandahåll alternativ text för bilden för tillgänglighet" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Alt-text för bild" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Produktbild" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Prioritet för visning" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Produktbilder" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2052,39 +2087,39 @@ msgstr "" "tillämpliga produkterna. Den integreras med produktkatalogen för att " "fastställa vilka artiklar som påverkas av kampanjen." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Rabattprocent" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Kampanjens namn" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Inkluderade produkter" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Marknadsföring" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2097,23 +2132,23 @@ msgstr "" "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Önskelista" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2129,19 +2164,19 @@ msgstr "" "för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" " tillhandahåller ytterligare anpassade funktioner." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Dokumentärfilm" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Dokumentärer" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Olöst" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2162,59 +2197,59 @@ msgstr "" "inspektion. Klassen gör det också möjligt att associera en adress med en " "användare, vilket underlättar personlig datahantering." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adresslinje" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Gata" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Distrikt" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Stad" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Region" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Postnummer" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Land" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adress" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresser" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2231,72 +2266,72 @@ msgstr "" "funktioner för att validera och tillämpa kampanjkoden på en order och " "samtidigt säkerställa att begränsningarna uppfylls." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Unik kod som används av en användare för att lösa in en rabatt" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuell rabatt som tillämpas om fast belopp inte används" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Procentuell rabatt" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Start giltighetstid" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstämpel när kampanjkoden användes, tom om den inte har använts ännu" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Tilldelad användare" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Kampanjkod" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Kampanjkoder" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2304,16 +2339,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2330,136 +2365,137 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Leveransadress" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Orderstatus" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur för meddelanden som ska visas för användare, i admin UI " "används tabellvyn" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Användare" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Köp tid" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Beställning" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "En användare får bara ha en väntande order åt gången!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Du kan inte lägga till produkter i en order som inte är en pågående order" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Du kan inte lägga till fler produkter än vad som finns i lager" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan inte ta bort produkter från en order som inte är en pågående order" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bara köpa fysiska produkter med angiven leveransadress!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adressen finns inte" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Du kan inte köpa just nu, vänligen försök igen om några minuter." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "En användare utan balans kan inte köpa med balans!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2467,14 +2503,14 @@ msgstr "" "du kan inte köpa utan registrering, vänligen ange följande information: " "kundens namn, kundens e-post, kundens telefonnummer" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ogiltig betalningsmetod: {payment_method} från {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2496,108 +2532,108 @@ msgstr "" " digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Det pris som kunden betalade för denna produkt vid inköpstillfället" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Interna kommentarer" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Meddelanden till användare" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Föräldraorder" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Produktens kvantitet" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Status för produktlinje" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Namn" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL för integrationen" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM-system" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2614,15 +2650,15 @@ msgstr "" "metod för att generera en URL för nedladdning av tillgången när den " "associerade ordern har statusen slutförd." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Nedladdningar" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Nedladdningar" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2637,82 +2673,78 @@ msgstr "" " betyg. Klassen använder databasfält för att effektivt modellera och hantera" " feedbackdata." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Refererar till den specifika produkten i en order som denna feedback handlar" " om" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Relaterad order produkt" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Produktbetyg" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till" " feedback." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Fel under skapande av promokod: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Hem" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakta oss" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Om oss" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Orderbekräftelse" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logotyp" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Hej %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2723,23 +2755,23 @@ msgstr "" "om att vi har tagit din beställning i arbete. Nedan följer detaljerna för " "din order:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Totalt" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Totalt pris" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2748,28 +2780,28 @@ msgstr "" "Om du har några frågor är du välkommen att kontakta vår support på " "%(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Bästa hälsningar,
teamet %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Alla rättigheter förbehålls" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Beställning levererad" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2778,7 +2810,7 @@ msgstr "" "Vi har framgångsrikt behandlat din beställning №%(order_uuid)s! Nedan finns " "detaljerna i din beställning:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2786,13 +2818,13 @@ msgstr "" "ytterligare\n" " information" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Värde" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2801,26 +2833,26 @@ msgstr "" "Om du har några frågor är du välkommen att kontakta vår support på " "%(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Nyckel" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Lägg till rad" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promokod beviljad" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2828,8 +2860,8 @@ msgstr "" "Tack för att du stannar hos oss! Vi har gett dig en promokod\n" " för" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2837,24 +2869,24 @@ msgstr "" "Tack för din beställning! Vi är glada att kunna bekräfta ditt köp. Nedan " "följer detaljerna för din beställning:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Fraktpris" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Din beställning kommer att levereras till följande adress:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Bästa hälsningar,
The %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2862,48 +2894,48 @@ msgstr "" "Alla rättigheter\n" " reserverade" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data och timeout krävs" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | kontakta oss initierad" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Orderbekräftelse" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Beställning levererad" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | promocode beviljad" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Du har inte behörighet att utföra den här åtgärden." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Parametern NOMINATIM_URL måste konfigureras!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2911,7 +2943,7 @@ msgstr "" "Hanterar begäran om index för webbplatskartan och returnerar ett XML-svar. " "Den ser till att svaret innehåller rätt innehållstypshuvud för XML." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2921,16 +2953,16 @@ msgstr "" "bearbetar begäran, hämtar det lämpliga detaljerade svaret för " "webbplatskartan och ställer in Content-Type-huvudet för XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Returnerar en lista över språk som stöds och motsvarande information." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2938,11 +2970,11 @@ msgstr "" "Hanterar cacheoperationer som att läsa och ställa in cachedata med en " "angiven nyckel och timeout." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Hanterar formulärinlämningar för `kontakta oss`." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2950,15 +2982,15 @@ msgstr "" "Hanterar förfrågningar om bearbetning och validering av URL:er från " "inkommande POST-förfrågningar." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Hanterar globala sökfrågor." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Hanterar logiken i att köpa som ett företag utan registrering." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2966,27 +2998,27 @@ msgstr "" "Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n" "Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid är obligatoriskt" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Du kan bara ladda ner den digitala tillgången en gång" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "beställningen måste betalas innan den digitala tillgången laddas ner" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Beställningens produkt har ingen produkt" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon hittades inte" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2994,7 +3026,7 @@ msgstr "" "Hanterar förfrågningar om favicon på en webbplats.\n" "Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3005,11 +3037,11 @@ msgstr "" "admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " "HTTP-omdirigeringen." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Returnerar aktuell version av eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3023,7 +3055,7 @@ msgstr "" "stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, " "anpassningsbara behörigheter och renderingsformat." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3037,7 +3069,7 @@ msgstr "" " tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar" " för AttributeGroup-data." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3053,7 +3085,7 @@ msgstr "" "returneras, t.ex. filtrering efter specifika fält eller hämtning av " "detaljerad eller förenklad information beroende på begäran." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3067,7 +3099,7 @@ msgstr "" "viewset-mekanismer och använder lämpliga serializers för olika åtgärder. " "Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3081,7 +3113,7 @@ msgstr "" "kategoridata. Vyuppsättningen tillämpar också behörigheter för att " "säkerställa att endast behöriga användare kan komma åt specifika data." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3093,7 +3125,7 @@ msgstr "" "Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla " "implementeringen av API-slutpunkter för varumärkesobjekt." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3111,7 +3143,7 @@ msgstr "" "att hämta produktinformation, tillämpa behörigheter och få tillgång till " "relaterad feedback för en produkt." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3125,7 +3157,7 @@ msgstr "" "olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst " "till Vendor-relaterade resurser genom Django REST-ramverket." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3142,7 +3174,7 @@ msgstr "" "basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " "data." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3161,7 +3193,7 @@ msgstr "" "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "interaktion med orderdata." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3176,11 +3208,11 @@ msgstr "" "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "feedback på OrderProduct-instanser" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3188,15 +3220,15 @@ msgstr "" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "åtgärder." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Representerar en vyuppsättning för hantering av kampanjer." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3214,7 +3246,7 @@ msgstr "" "integrerade för att säkerställa att användare endast kan hantera sina egna " "önskelistor om inte uttryckliga behörigheter beviljas." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3228,12 +3260,12 @@ msgstr "" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "överskrivningar och behörighetshantering baserat på förfrågningskontexten." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed9a39dc06b642e773d552aa0655c416e104dac2 GIT binary patch literal 141879 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 literal 0 HcmV?d00001 diff --git a/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po similarity index 82% rename from core/locale/th_TH/LC_MESSAGES/django.po rename to engine/core/locale/th_TH/LC_MESSAGES/django.po index 1fba55c7..d4a9bdd0 100644 --- a/core/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,19 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "รหัสประจำตัวที่ไม่ซ้ำกัน" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "รหัสประจำตัวที่ไม่ซ้ำกันใช้เพื่อระบุวัตถุฐานข้อมูลใด ๆ อย่างแน่นอน" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "กำลังใช้งานอยู่" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -33,158 +33,162 @@ msgstr "" "หากตั้งค่าเป็น false, " "วัตถุนี้ไม่สามารถมองเห็นได้โดยผู้ใช้ที่ไม่มีสิทธิ์ที่ต้องการ" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "สร้างขึ้น" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "เมื่อวัตถุปรากฏขึ้นครั้งแรกในฐานข้อมูล" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "แก้ไขแล้ว" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "เมื่อครั้งล่าสุดที่มีการแก้ไขวัตถุ" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "การแปล" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "ทั่วไป" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "ความสัมพันธ์" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "เมตาดาตา" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "เวลาที่บันทึก" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "เปิดใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "รายการที่เลือกไว้ได้รับการเปิดใช้งานแล้ว!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "ยกเลิกการใช้งานที่เลือกไว้ %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "รายการที่เลือกถูกยกเลิกการใช้งานแล้ว!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "ค่าคุณสมบัติ" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "ค่าของแอตทริบิวต์" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "ภาพ" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "รูปภาพ" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "สต็อก" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "หุ้น" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "เด็ก" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "การกำหนดค่า" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "แกนหลัก" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "เสร็จแล้ว" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "การส่งมอบ" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "ส่งมอบแล้ว" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "ยกเลิก" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "ล้มเหลว" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "รอดำเนินการ" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "ได้รับการยอมรับ" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "เงินคืน" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "การชำระเงิน" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "ชั่วขณะหนึ่ง" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "ประสบความสำเร็จ" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "แคช I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -192,31 +196,31 @@ msgstr "" "ใช้เฉพาะคีย์เพื่ออ่านข้อมูลที่ได้รับอนุญาตจากแคช ใช้คีย์ ข้อมูล " "และระยะเวลาหมดอายุ พร้อมการยืนยันตัวตนเพื่อเขียนข้อมูลลงในแคช" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "รับรายการภาษาที่รองรับ" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "รับพารามิเตอร์ที่สามารถเปิดเผยได้ของแอปพลิเคชัน" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "ส่งข้อความถึงทีมสนับสนุน" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "จุดสิ้นสุดการค้นหาทั่วโลกเพื่อค้นหาข้ามตารางของโครงการ" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "ซื้อสินค้าเป็นธุรกิจ" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -224,136 +228,137 @@ msgstr "" "ซื้อสินค้าในฐานะธุรกิจ โดยใช้ `products` ที่ให้มาพร้อมกับ `product_uuid` และ" " `attributes`" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "แสดงกลุ่มแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "ดึงกลุ่มแอตทริบิวต์เดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "สร้างกลุ่มคุณลักษณะ" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "ลบกลุ่มแอตทริบิวต์" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "เขียนกลุ่มคุณลักษณะที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของกลุ่มแอตทริบิวต์ที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "สร้างแอตทริบิวต์" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "ลบแอตทริบิวต์" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "แสดงรายการค่าของแอตทริบิวต์ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "ดึงค่าแอตทริบิวต์เดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "สร้างค่าแอตทริบิวต์" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "ลบค่าของแอตทริบิวต์" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "เขียนค่าแอตทริบิวต์ที่มีอยู่ใหม่โดยเก็บค่าที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของค่าแอตทริบิวต์ที่มีอยู่ใหม่ " "โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "หมวดหมู่ UUID หรือ slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "สร้างหมวดหมู่" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "ลบหมวดหมู่" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "เขียนหมวดหมู่ที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของหมวดหมู่" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "หมวดหมู่ UUID หรือ slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "แสดงรายการหมวดหมู่ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "สำหรับผู้ใช้ที่ไม่ใช่พนักงาน จะแสดงเฉพาะคำสั่งซื้อของตนเองเท่านั้น" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -361,37 +366,37 @@ msgstr "" "การค้นหาส่วนย่อยโดยไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ใน human_readable_id, " "order_products.product.name และ order_products.product.partnumber" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "กรองคำสั่งซื้อที่มี buy_time >= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "กรองคำสั่งซื้อที่มี buy_time <= วันที่และเวลาตามมาตรฐาน ISO 8601 นี้" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "กรองตาม UUID ของคำสั่งซื้อที่ตรงกัน" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "กรองตามหมายเลขคำสั่งซื้อที่อ่านได้โดยมนุษย์อย่างถูกต้อง" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "กรองตามอีเมลของผู้ใช้ (ตรงตามตัวอักษรโดยไม่คำนึงถึงตัวพิมพ์ใหญ่หรือเล็ก)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "กรองตาม UUID ของผู้ใช้" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "กรองตามสถานะคำสั่งซื้อ (การจับคู่สตริงย่อยโดยไม่คำนึงตัวพิมพ์ใหญ่/เล็ก)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -401,37 +406,41 @@ msgstr "" "created, modified, buy_time, random. นำหน้าด้วย '-' " "สำหรับเรียงลำดับจากมากไปน้อย (เช่น '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "ดึงข้อมูลหมวดหมู่เดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "ลำดับ UUID หรือรหัสที่มนุษย์อ่านได้" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "สร้างแอตทริบิวต์" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "ลบแอตทริบิวต์" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "เขียนหมวดหมู่ที่มีอยู่ใหม่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของหมวดหมู่ที่มีอยู่แล้วใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -441,30 +450,30 @@ msgstr "" "การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ " "`force_payment` จะเริ่มการทำธุรกรรม" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "ซื้อสินค้าโดยไม่ต้องสร้างบัญชี" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "สรุปการสั่งซื้อสินค้าสำหรับผู้ใช้ที่ไม่ได้ลงทะเบียน" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "" "เพิ่มสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "เพิ่มรายการสินค้าที่ต้องการสั่งซื้อ โดยจำนวนจะไม่ถูกนับ" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -472,22 +481,22 @@ msgstr "" "เพิ่มรายการสินค้าไปยังคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " "ที่ให้มา" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "" "ลบผลิตภัณฑ์ออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` ที่ให้มา" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "นำสินค้าออกจากคำสั่งซื้อ, จำนวนจะไม่ถูกนับ" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -495,79 +504,79 @@ msgstr "" "ลบรายการสินค้าออกจากคำสั่งซื้อโดยใช้ `product_uuid` และ `attributes` " "ที่ให้มา" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "แสดงรายการคุณลักษณะทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "สำหรับผู้ใช้ที่ไม่ใช่บุคลากร " "จะแสดงเฉพาะรายการที่อยู่ในรายการสิ่งที่ต้องการของตนเองเท่านั้น" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "ดึงข้อมูลคุณลักษณะเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "สร้างแอตทริบิวต์" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "ไม่สามารถใช้งานได้สำหรับผู้ใช้ที่ไม่ใช่พนักงาน" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "ลบแอตทริบิวต์" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "เขียนแอตทริบิวต์ที่มีอยู่ใหม่โดยบันทึกเฉพาะส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของแอตทริบิวต์ที่มีอยู่ใหม่ " "โดยบันทึกเฉพาะข้อมูลที่ไม่มีการแก้ไข" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "เพิ่มสินค้าไปยังรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "นำสินค้าออกจากรายการที่อยากได้" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "ลบผลิตภัณฑ์ออกจากรายการที่ต้องการโดยใช้ `product_uuid` ที่ให้มา" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "เพิ่มสินค้าหลายรายการลงในรายการที่ต้องการ" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "เพิ่มสินค้าหลายรายการลงในรายการสินค้าที่ต้องการโดยใช้ `product_uuids` " "ที่ให้มา" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "ลบผลิตภัณฑ์หลายรายการออกจากรายการที่ต้องการโดยใช้ `product_uuids` ที่ให้มา" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -581,15 +590,15 @@ msgstr "" "กรองตามชื่อ/ค่าของแอตทริบิวต์หนึ่งรายการหรือมากกว่า • **ไวยากรณ์**: `attr_name=method-value[;attr2=method2-value2]…` •**วิธีการ** (ค่าเริ่มต้นคือ `icontains` หากไม่ได้ระบุ): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` •**การกำหนดประเภทข้อมูล**: JSON จะถูกพยายามแปลงก่อน (ดังนั้นคุณสามารถส่งรายการ/ดิคชันนารีได้), `true`/`false` สำหรับบูลีน, จำนวนเต็ม, จำนวนทศนิยม; มิฉะนั้นจะถือว่าเป็นสตริง. • **Base64**: นำหน้าด้วย `b64-` เพื่อเข้ารหัส base64 ที่ปลอดภัยสำหรับ URL ของค่าดิบ. \n" "ตัวอย่าง: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "รายการสินค้าทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(exact) รหัส UUID ของผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -598,680 +607,694 @@ msgstr "" " สำหรับการเรียงลำดับจากน้อยไปมาก **ที่อนุญาต:** uuid, rating, name, slug, " "created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "ดึงข้อมูลสินค้าเพียงรายการเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "รหัส UUID ของผลิตภัณฑ์ หรือชื่อเรียก" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "สร้างผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "เขียนใหม่ผลิตภัณฑ์ที่มีอยู่ โดยรักษาฟิลด์ที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "อัปเดตบางฟิลด์ของสินค้าที่มีอยู่แล้ว โดยคงฟิลด์ที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "ลบผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "แสดงรายการข้อเสนอแนะที่ได้รับอนุญาตทั้งหมดสำหรับผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "ส่งคืนภาพรวมของข้อมูลเมตา SEO ของผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "รายการที่อยู่ทั้งหมด" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "ดึงที่อยู่เดียว" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "สร้างที่อยู่ใหม่" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "ลบที่อยู่" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "อัปเดตที่อยู่ทั้งหมด" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "อัปเดตที่อยู่บางส่วน" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "การเติมที่อยู่โดยอัตโนมัติ" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "ข้อมูลดิบสำหรับคำค้นหา กรุณาเพิ่มข้อมูลจากจุดสิ้นสุด geo-IP" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "จำกัดจำนวนผลลัพธ์, 1 < limit < 10, ค่าเริ่มต้น: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "แสดงความคิดเห็นทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "ดึงข้อมูลความคิดเห็นหนึ่งรายการ (มุมมองแบบละเอียด)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "สร้างข้อเสนอแนะ" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "ลบความคิดเห็น" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "เขียนใหม่ข้อเสนอแนะที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของฟิลด์ในข้อเสนอแนะที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "แสดงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "ดึงความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์เพียงรายการเดียว " "(มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "สร้างความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ใหม่" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "แทนที่ความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "อัปเดตบางส่วนของความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์ที่มีอยู่" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "ลบความสัมพันธ์ระหว่างคำสั่งซื้อและสินค้า" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "แสดงรายการทั้งหมดของแบรนด์ (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "ดึงข้อมูลแบรนด์เดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "แบรนด์ UUID หรือ slug" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "สร้างแบรนด์" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "ลบแบรนด์" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "เขียนใหม่แบรนด์ที่มีอยู่โดยไม่แก้ไขส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "เขียนข้อมูลในบางช่องของแบรนด์ที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot สำหรับแบรนด์" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "แสดงรายชื่อผู้จำหน่ายทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "ดึงข้อมูลผู้ขายรายเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "สร้างผู้ขาย" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "ลบผู้ขาย" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "เขียนใหม่ผู้ขายที่มีอยู่โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "เขียนข้อมูลในบางช่องของซัพพลายเออร์ที่มีอยู่แล้วใหม่ " "โดยเก็บค่าที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "แสดงภาพสินค้าทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "ดึงภาพสินค้าเพียงหนึ่งรายการ (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "สร้างภาพสินค้า" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "ลบรูปภาพสินค้า" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "เขียนภาพสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของภาพสินค้าที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "แสดงรายการรหัสโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "ดึงรหัสโปรโมชั่นเพียงหนึ่งรายการ (มุมมองแบบละเอียด)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "สร้างรหัสโปรโมชั่น" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "ลบโค้ดโปรโมชั่น" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "เขียนโค้ดโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของรหัสโปรโมชั่นที่มีอยู่ใหม่ " "โดยคงค่าที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "รายการโปรโมชั่นทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "ดึงข้อมูลโปรโมชั่นเดียว (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "สร้างโปรโมชั่น" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "ลบโปรโมชั่น" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "เขียนโปรโมชั่นใหม่โดยคงส่วนที่ไม่สามารถแก้ไขได้ไว้" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของโปรโมชั่นที่มีอยู่ใหม่ " "โดยเก็บรักษาข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "แสดงรายการหุ้นทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "ดึงข้อมูลสินค้าคงคลังหนึ่งรายการ (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "สร้างบันทึกสินค้าคงคลัง" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "ลบข้อมูลสินค้าคงคลัง" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "เขียนบันทึกสต็อกที่มีอยู่ใหม่โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "เขียนฟิลด์บางส่วนของบันทึกสต็อกที่มีอยู่ใหม่ " "โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "แสดงแท็กสินค้าทั้งหมด (มุมมองแบบง่าย)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "ดึงแท็กสินค้าหนึ่งรายการ (มุมมองรายละเอียด)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "สร้างแท็กสินค้า" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "ลบแท็กสินค้า" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "เขียนแท็กสินค้าที่มีอยู่ใหม่โดยเก็บส่วนที่ไม่สามารถแก้ไขได้" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "เขียนข้อมูลบางส่วนของแท็กสินค้าที่มีอยู่แล้วใหม่ " "โดยบันทึกข้อมูลที่ไม่สามารถแก้ไขได้" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "ไม่พบคำค้นหา" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "ค้นหา" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "ยูไอไอดี" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "ชื่อ" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "หมวดหมู่" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "หมวดหมู่ slug" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "แท็ก" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "ราคาต่ำสุด" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "ราคาสูงสุด" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "กำลังใช้งานอยู่" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "แบรนด์" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "คุณลักษณะ" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "ปริมาณ" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "ทาก" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "คือ ดิจิทัล" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "รวมหมวดหมู่ย่อย" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "ซื้อหลังจาก (รวมแล้ว)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "ซื้อมาก่อน (รวมแล้ว)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "อีเมลผู้ใช้" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "รหัสผู้ใช้ UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "สถานะ" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "รหัสที่มนุษย์อ่านได้" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "ผู้ปกครอง" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "ระดับ" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "ข้อมูลที่จะเก็บไว้ในแคช" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "ข้อมูลที่เก็บไว้ในแคช" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ไม่พบคำสั่งซื้อ {order_uuid}!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "ซื้อคำสั่ง" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "ดำเนินการกับรายการสินค้าในลำดับ" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "ลบ/เพิ่ม" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "การกระทำต้องเป็น \"เพิ่ม\" หรือ \"ลบ\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "กรุณาให้ค่า `wishlist_uuid`" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "รายการที่อยากได้ {wishlist_uuid} ไม่พบ!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "ซื้อคำสั่ง" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "คุณลักษณะ" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "กลุ่มคุณสมบัติ" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "แบรนด์" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "คุณลักษณะและคุณค่าใดที่สามารถใช้สำหรับกรองหมวดหมู่นี้ได้" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "ราคาต่ำสุดและราคาสูงสุดสำหรับสินค้าในหมวดนี้ (หากมี)" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "แท็กสำหรับหมวดหมู่นี้" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "ละติจูด (พิกัด Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "ลองจิจูด (พิกัด X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "อย่างไร" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "ให้คะแนนตั้งแต่ 1 ถึง 10 รวมทั้งสองค่า หรือ 0 หากไม่ได้กำหนด" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "การแจ้งเตือน" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1279,200 +1302,208 @@ msgstr "" "ที่อยู่สำหรับจัดส่งสำหรับคำสั่งซื้อนี้, " "ปล่อยว่างไว้หากเป็นที่อยู่เดียวกับที่อยู่สำหรับเรียกเก็บเงินหรือหากไม่เกี่ยวข้อง" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "ราคาทั้งหมดของคำสั่งซื้อนี้" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "จำนวนรวมของผลิตภัณฑ์ในคำสั่งซื้อ" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "สินค้าทั้งหมดในคำสั่งซื้อนี้เป็นสินค้าดิจิทัลหรือไม่" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "คำสั่ง" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL ของรูปภาพ" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "รูปภาพของสินค้า" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "แบรนด์" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "กลุ่มคุณลักษณะ" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "ราคา" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "ปริมาณ" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "จำนวนความคิดเห็น" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "ราคาลดพิเศษ" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "ผลิตภัณฑ์" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "รหัสส่งเสริมการขาย" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "สินค้าลดราคา" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "โปรโมชั่น" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "สินค้า" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "แท็กสินค้า" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "หมวดหมู่ที่ถูกติดแท็ก" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "หมวดหมู่' แท็ก" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "ชื่อโครงการ" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "อีเมลบริษัท" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "ชื่อบริษัท" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "ที่อยู่บริษัท" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "หมายเลขโทรศัพท์บริษัท" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'อีเมลจาก', บางครั้งจำเป็นต้องใช้แทนค่าผู้ใช้โฮสต์" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "ผู้ใช้โฮสต์อีเมล" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "จำนวนเงินสูงสุดสำหรับการชำระเงิน" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "จำนวนเงินขั้นต่ำสำหรับการชำระเงิน" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "ข้อมูลการวิเคราะห์" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "ข้อมูลโฆษณา" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "การกำหนดค่า" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "รหัสภาษา" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "ชื่อภาษา" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "ธงภาษา, หากมีอยู่ :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "รับรายการภาษาที่รองรับ" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "ผลการค้นหาสินค้า" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "ผลการค้นหาสินค้า" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1484,23 +1515,23 @@ msgstr "" "กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " "ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "ผู้ปกครองของกลุ่มนี้" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "กลุ่มแอตทริบิวต์ของพ่อแม่" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1517,48 +1548,48 @@ msgstr "" "โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " "ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "ข้อมูลการยืนยันตัวตน" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "ชื่อของผู้ขายนี้" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "ชื่อผู้ขาย" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "ไฟล์การตอบสนอง" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "เส้นทางไฟล์การรวมของผู้ขาย" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "เส้นทางการบูรณาการ" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1571,27 +1602,27 @@ msgstr "" " รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "ชื่อวัน" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "แท็กสินค้า" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1601,15 +1632,15 @@ msgstr "" "คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " "รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "แท็กหมวดหมู่" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "แท็กหมวดหมู่" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1629,51 +1660,51 @@ msgstr "" " ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" " รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "ภาพหมวดหมู่" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "หมวดหมู่หลัก" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "ชื่อหมวดหมู่" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "หมวดหมู่คำอธิบาย" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "ลำดับความสำคัญ" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1685,47 +1716,47 @@ msgstr "" "รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "ชื่อแบรนด์" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "หมวดหมู่" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1741,68 +1772,72 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "ราคาขาย" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "คุณลักษณะของระบบ" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1822,55 +1857,55 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "ชื่อสินค้า" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "รายละเอียดสินค้า" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1886,64 +1921,64 @@ msgstr "" "อาร์เรย์, และออบเจ็กต์. " "ซึ่งช่วยให้สามารถจัดโครงสร้างข้อมูลได้ไดนามิกและยืดหยุ่น." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "กลุ่มของแอตทริบิวต์นี้" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "สตริง" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "ความซื่อสัตย์" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "ลอย" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "บูลีน" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "อาร์เรย์" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "วัตถุ" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "ประเภทของค่าของแอตทริบิวต์" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "ประเภทของค่า" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "ชื่อของแอตทริบิวต์นี้" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "สามารถกรองได้" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "คุณสมบัติ" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1953,19 +1988,19 @@ msgstr "" "กับ 'ค่า' ที่ไม่ซ้ำกัน " "ทำให้การจัดระเบียบและการแสดงลักษณะของผลิตภัณฑ์เป็นไปอย่างมีประสิทธิภาพและยืดหยุ่นมากขึ้น" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "คุณลักษณะของค่านี้" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "ผลิตภัณฑ์เฉพาะที่เกี่ยวข้องกับค่าของแอตทริบิวต์นี้" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "ค่าเฉพาะสำหรับคุณสมบัตินี้" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1980,39 +2015,39 @@ msgstr "" "นอกจากนี้ยังมีคุณสมบัติการเข้าถึงสำหรับผู้ใช้ที่มีความต้องการพิเศษ " "โดยให้ข้อความทางเลือกสำหรับภาพ." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "ให้ข้อความทางเลือกสำหรับภาพเพื่อการเข้าถึง" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "ข้อความแสดงแทนภาพ" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "รูปภาพสินค้า" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "รูปภาพสินค้า" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2027,39 +2062,39 @@ msgstr "" "ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "โปรโมชั่น" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2071,23 +2106,23 @@ msgstr "" "ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " "ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2103,19 +2138,19 @@ msgstr "" " คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " "และให้คุณสมบัติเพิ่มเติมตามความต้องการ." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "สารคดี" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "สารคดี" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2136,59 +2171,59 @@ msgstr "" "ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" " ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "บรรทัดที่อยู่" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "ถนน" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "เขต" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "เมือง" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "ภูมิภาค" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "ประเทศ" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "ที่อยู่" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "ที่อยู่" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2205,71 +2240,71 @@ msgstr "" "รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" " ได้รับการปฏิบัติตาม" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2277,16 +2312,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2304,138 +2339,139 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "ผู้ใช้" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "ซื้อเวลา" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "คำสั่ง" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2443,14 +2479,14 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2472,108 +2508,108 @@ msgstr "" "โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "จำนวนสินค้า" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "ชื่อ" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2589,15 +2625,15 @@ msgstr "" "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "ดาวน์โหลด" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "ดาวน์โหลด" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2611,79 +2647,75 @@ msgstr "" "การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "การให้คะแนนสินค้า" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "เกิดข้อผิดพลาดระหว่างการสร้างรหัสโปรโมชั่น: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "หน้าแรก" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "ติดต่อเรา" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "เกี่ยวกับเรา" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "การยืนยันคำสั่งซื้อ" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "โลโก้" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "สวัสดีครับ/ค่ะ %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2694,23 +2726,23 @@ msgstr "" "เราขอแจ้งให้คุณทราบว่าเราได้ดำเนินการตามคำสั่งซื้อของคุณแล้ว " "รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "รวม" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "ราคาทั้งหมด" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2719,28 +2751,28 @@ msgstr "" "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ " "%(config.EMAIL_HOST_USER)s" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "สงวนลิขสิทธิ์" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "คำสั่งซื้อจัดส่งแล้ว" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2749,52 +2781,52 @@ msgstr "" "เราได้ดำเนินการคำสั่งซื้อของคุณหมายเลข %(order_uuid)s สำเร็จแล้ว! " "รายละเอียดของคำสั่งซื้อของคุณมีดังนี้:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "ข้อมูลเพิ่มเติม" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "มูลค่า" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ %(contact_email)s" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "คีย์" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "เพิ่มแถว" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "รหัสส่งเสริมการขายได้รับแล้ว" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " msgstr "ขอบคุณที่เข้าพักกับเรา! เราได้มอบรหัสโปรโมชั่นให้คุณสำหรับ" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2802,71 +2834,71 @@ msgstr "" "ขอบคุณสำหรับการสั่งซื้อของคุณ! เราขอแจ้งยืนยันการสั่งซื้อของคุณเรียบร้อยแล้ว" " รายละเอียดการสั่งซื้อของคุณมีดังนี้:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "ราคาค่าจัดส่ง" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "คำสั่งซื้อของคุณจะถูกจัดส่งไปยังที่อยู่ต่อไปนี้:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "สงวนลิขสิทธิ์" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "จำเป็นต้องมีทั้งข้อมูลและเวลาหมดอายุ" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | ติดต่อเรา เริ่มต้น" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | ยืนยันการสั่งซื้อ" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | จัดส่งเรียบร้อย" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | รหัสโปรโมชั่นได้รับแล้ว" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "คุณไม่มีสิทธิ์ดำเนินการนี้" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2874,7 +2906,7 @@ msgstr "" "จัดการคำขอสำหรับดัชนีแผนผังเว็บไซต์และส่งคืนการตอบสนองในรูปแบบ XML " "โดยตรวจสอบให้แน่ใจว่าการตอบสนองมีหัวข้อประเภทเนื้อหาที่เหมาะสมสำหรับ XML" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2884,16 +2916,16 @@ msgstr "" " ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-" "Type สำหรับ XML" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2901,11 +2933,11 @@ msgstr "" "จัดการการดำเนินการแคช เช่น " "การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2913,15 +2945,15 @@ msgstr "" "จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " "ที่เข้ามา" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "จัดการคำค้นหาทั่วโลก" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2930,27 +2962,27 @@ msgstr "" "ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" " หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2959,7 +2991,7 @@ msgstr "" "favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " "จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2969,11 +3001,11 @@ msgstr "" "ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " "โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2987,7 +3019,7 @@ msgstr "" "Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน " "การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3001,7 +3033,7 @@ msgstr "" "ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล" " AttributeGroup" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3017,7 +3049,7 @@ msgstr "" "การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ " "ขึ้นอยู่กับความต้องการของคำขอ" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3031,7 +3063,7 @@ msgstr "" "REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ " "ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3045,7 +3077,7 @@ msgstr "" " " "ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3058,7 +3090,7 @@ msgstr "" "ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API " "สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3075,7 +3107,7 @@ msgstr "" " API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " "และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3089,7 +3121,7 @@ msgstr "" "วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " "อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3105,7 +3137,7 @@ msgstr "" " และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " "`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3123,7 +3155,7 @@ msgstr "" "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3138,26 +3170,26 @@ msgstr "" "นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" " OrderProduct" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3175,7 +3207,7 @@ msgstr "" "มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" " เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3189,12 +3221,12 @@ msgstr "" "รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " "และการจัดการสิทธิ์ตามบริบทของคำขอ" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..187e9a0ba557931301f61327729627761466fe2e GIT binary patch literal 90080 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

ZUIH7 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 U67p\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "Benzersiz Kimlik" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Benzersiz kimlik, herhangi bir veritabanı nesnesini kesin olarak tanımlamak " "için kullanılır" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Aktif mi" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "false olarak ayarlanırsa, bu nesne gerekli izne sahip olmayan kullanıcılar " "tarafından görülemez" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Oluşturuldu" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Nesne veritabanında ilk kez göründüğünde" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Değiştirilmiş" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Nesne en son ne zaman düzenlendi" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Çeviriler" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Genel" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "İlişkiler" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "EK BİLGİ" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Metadata" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Zaman Damgaları" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı etkinleştirin" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Seçilen öğeler etkinleştirildi!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Seçili %(verbose_name_plural)s'ı devre dışı bırak" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Seçilen öğeler devre dışı bırakıldı!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Öznitelik Değeri" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Öznitelik Değerleri" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Resim" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Görüntüler" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Stok" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Stoklar" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Ürün Siparişi" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Sipariş Ürünleri" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Çocuklar" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Konfigürasyon" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Çekirdek" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Bitti" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Teslimat" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Teslim edildi" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "İptal edildi" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Başarısız" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Beklemede" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Kabul Edildi" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "İade Edilen Para" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Ödeme" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Başarılı" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Önbellek I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,32 +198,32 @@ msgstr "" "Önbellekten izin verilen verileri okumak için yalnızca bir anahtar uygulayın.\n" "Önbelleğe veri yazmak için kimlik doğrulama ile anahtar, veri ve zaman aşımı uygulayın." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Desteklenen dillerin bir listesini alın" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Destek ekibine bir mesaj gönderin" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "" "Proje tabloları arasında sorgulama yapmak için global arama uç noktası" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "İşletme olarak bir sipariş satın alın" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -227,138 +231,139 @@ msgstr "" "Sağlanan `products` ile `product_uuid` ve `attributes` öğelerini kullanarak " "bir siparişi işletme olarak satın alın." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Tüm öznitelik gruplarını listeleme (basit görünüm)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Tek bir öznitelik grubunu alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Öznitelik grubu oluşturma" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Öznitelik grubunu silme" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir öznitelik grubunu yeniden yazma" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Mevcut bir öznitelik grubunun bazı alanlarını düzenlenemez olarak kaydederek" " yeniden yazın" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Tüm öznitelikleri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Öznitelik oluşturma" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Bir özniteliği silme" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Tüm öznitelik değerlerini listeleme (basit görünüm)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Tek bir öznitelik değerini alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Öznitelik değeri oluşturma" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Öznitelik değerini silme" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir öznitelik değerini yeniden yazma" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Mevcut bir öznitelik değerinin bazı alanlarını düzenlenemeyenleri kaydederek" " yeniden yazın" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Tüm kategorileri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Kategori UUID'si veya slug" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Bir kategori oluşturun" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Kategori silme" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın" -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta anlık görüntüsü" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Kategorinin SEO meta verilerinin anlık görüntüsünü döndürür" -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Kategori UUID'si veya slug" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Tüm kategorileri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Personel olmayan kullanıcılar için sadece kendi siparişleri iade edilir." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -367,40 +372,40 @@ msgstr "" "order_products.product.partnumber arasında büyük/küçük harfe duyarlı olmayan" " alt dize araması" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Buy_time >= this ISO 8601 datetime içeren siparişleri filtreleyin" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Buy_time <= this ISO 8601 datetime ile siparişleri filtreleyin" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Tam sipariş UUID'sine göre filtreleme" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "" "Tam olarak insan tarafından okunabilir sipariş kimliğine göre filtreleme" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Kullanıcının e-postasına göre filtreleme (büyük/küçük harfe duyarlı olmayan " "tam eşleşme)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Kullanıcının UUID'sine göre filtreleme" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Sipariş durumuna göre filtreleme (büyük/küçük harfe duyarlı olmayan alt dize" " eşleşmesi)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -410,37 +415,41 @@ msgstr "" "status, created, modified, buy_time, random. Azalan için '-' ile önekleyin " "(örn. '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Tek bir kategoriyi alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Sipariş UUID'si veya insan tarafından okunabilir kimlik" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Öznitelik oluşturma" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Personel olmayan kullanıcılar için çalışmaz." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Bir özniteliği silme" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir kategoriyi yeniden yazın" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -450,19 +459,19 @@ msgstr "" " işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` " "kullanılırsa, bir işlem başlatılır." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "hesap oluşturmadan sipariş satın alma" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "Kayıtlı olmayan bir kullanıcı için sipariş alımını sonuçlandırır." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Siparişe ürün ekleme" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -470,12 +479,12 @@ msgstr "" "Verilen `product_uuid` ve `attributes` öğelerini kullanarak siparişe bir " "ürün ekler." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "" "Sipariş edilecek ürünlerin bir listesini ekleyin, miktarlar sayılmayacaktır" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -483,11 +492,11 @@ msgstr "" "Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişe " "ürün listesi ekler." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Siparişten bir ürünü kaldırma" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -495,11 +504,11 @@ msgstr "" "Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir ürünü " "siparişten kaldırır." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Siparişten bir ürünü kaldırın, miktarlar sayılmayacaktır" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -507,83 +516,83 @@ msgstr "" "Sağlanan `product_uuid` ve `attributes` öğelerini kullanarak bir siparişten " "ürün listesini kaldırır." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Tüm öznitelikleri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Personel olmayan kullanıcılar için yalnızca kendi istek listeleri " "döndürülür." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Tek bir özniteliği alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Öznitelik oluşturma" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Personel olmayan kullanıcılar için çalışmaz." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Bir özniteliği silme" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir niteliği yeniden yazma" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Mevcut bir özniteliğin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Siparişe ürün ekleme" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesine ekler" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "İstek listesinden bir ürünü kaldırma" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Sağlanan `product_uuid` öğesini kullanarak bir ürünü istek listesinden " "kaldırır" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "İstek listesine birçok ürün ekleyin" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Sağlanan `product_uuids` öğesini kullanarak bir istek listesine birçok ürün " "ekler" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Sağlanan `product_uuids` öğesini kullanarak bir istek listesinden birçok " "ürünü kaldırır" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -603,15 +612,15 @@ msgstr "" "color=exact-red`, `size=gt-10`, `features=in-[\"wifi\", \"bluetooth\"]`,\n" "`b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Tüm ürünleri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(tam) Ürün UUID'si" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -619,549 +628,559 @@ msgstr "" "Sıralanacak alanların virgülle ayrılmış listesi. Azalan için `-` ile ön ek. \n" "**İzin verilenler:** uuid, derecelendirme, ad, slug, oluşturuldu, değiştirildi, fiyat, rastgele" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Tek bir ürünü alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Ürün UUID'si veya Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Bir ürün oluşturun" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Düzenlenemeyen alanları koruyarak mevcut bir ürünü yeniden yazın" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Düzenlenemeyen alanları koruyarak mevcut bir ürünün bazı alanlarını " "güncelleme" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Ürün silme" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "bir ürün için izin verilen tüm geri bildirimleri listeler" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Ürünün SEO meta verilerinin anlık görüntüsünü döndürür" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Tüm adresleri listeleyin" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Tek bir adres alma" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Yeni bir adres oluşturun" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Adres silme" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Adresin tamamını güncelleme" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Bir adresi kısmen güncelleme" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Otomatik tamamlanan adres girişi" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Ham veri sorgu dizesi, lütfen geo-IP uç noktasından gelen verilerle ekleyin" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "sonuç miktarını sınırlar, 1 < limit < 10, varsayılan: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "tüm geri bildirimleri listele (basit görünüm)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "tek bir geri bildirim alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "bir geri bildirim oluşturun" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "bir geri bildirimi silme" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "düzenlenemeyenleri kaydederek mevcut bir geri bildirimi yeniden yazın" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "mevcut bir geri bildirimin bazı alanlarını yeniden yazarak düzenlenemezleri " "kaydetme" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "tüm sipariş-ürün ilişkilerini listeler (basit görünüm)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "tek bir sipariş-ürün ilişkisi alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "yeni bir sipariş-ürün ilişkisi oluşturun" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "mevcut bir sipariş-ürün ilişkisini değiştirir" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "mevcut bir sipariş-ürün ilişkisini kısmen güncelleme" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "sipariş-ürün ilişkisini silme" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Tüm markaları listele (basit görünüm)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "Tek bir markayı alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Marka UUID'si veya sümüklü böcek" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Bir marka yaratın" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Bir markayı silme" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "Mevcut bir markayı yeniden yazarak düzenlenemeyenleri kaydedin" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "Marka için SEO Meta anlık görüntüsü" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Tüm satıcıları listeleyin (basit görünüm)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Tek bir satıcıyı alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Bir satıcı oluşturun" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Satıcı silme" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir satıcıyı yeniden yazın" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Tüm ürün görsellerini listeleme (basit görünüm)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Tek bir ürün resmini alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Bir ürün görseli oluşturun" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Ürün görselini silme" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün resmini yeniden yazın" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Tüm promosyon kodlarını listele (basit görünüm)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Tek bir promosyon kodunu alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Promosyon kodu oluşturun" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Promosyon kodunu silme" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Düzenlenemeyenleri kaydederek mevcut bir promosyon kodunu yeniden yazın" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Tüm promosyonları listele (basit görünüm)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Tek bir promosyonu alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Bir promosyon oluşturun" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Bir promosyonu silme" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir promosyonu yeniden yazma" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Tüm hisse senetlerini listele (basit görünüm)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Tek bir stoku alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Stok kaydı oluşturma" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Stok kaydını silme" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir stok kaydını yeniden yazma" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Tüm ürün etiketlerini listeleme (basit görünüm)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Tek bir ürün etiketini alma (ayrıntılı görünüm)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Ürün etiketi oluşturma" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Ürün etiketini silme" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "Düzenlenemeyenleri kaydederek mevcut bir ürün etiketini yeniden yazma" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Mevcut bir kategorinin bazı alanlarını düzenlenemez olarak kaydederek " "yeniden yazın" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Arama" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "İsim" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Kategoriler" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Kategoriler Sümüklüböcekler" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Etiketler" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Min Fiyat" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Maksimum Fiyat" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Aktif mi" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Marka" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Nitelikler" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Miktar" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Sümüklüböcek" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Dijital mi" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Alt kategorileri dahil edin" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Kişisel sipariş edilen ürünleri dahil edin" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "SKU" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "include_subcategories bayrağını kullanmak için bir category_uuid olmalıdır" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Arama (ID, ürün adı veya parça numarası)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Sonra satın alındı (dahil)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Daha önce satın alındı (dahil)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Kullanıcı e-postası" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "Kullanıcı UUID'si" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Durum" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "İnsan Tarafından Okunabilir Kimlik" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Ebeveyn" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Tüm kategori (en az 1 ürün var veya yok)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Seviye" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Ürün UUID'si" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Önbellekte aranacak veya önbelleğe yerleştirilecek anahtar" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Önbellekte depolanacak veriler" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Verileri önbelleğe almak için saniye cinsinden zaman aşımı" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Önbelleğe alınmış veriler" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Siparişe ürün ekleme" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Sipariş {order_uuid} bulunamadı!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Siparişten tüm ürünleri kaldırın" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Bir sipariş satın alın" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini" " dışlayan bilgiler!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Siparişteki ürünlerin listesi üzerinde bir eylem gerçekleştirin" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Kaldır/Ekle" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Eylem ya \"ekle\" ya da \"kaldır\" olmalıdır!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "İstek listesindeki bir ürün listesi üzerinde eylem gerçekleştirme" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Lütfen `wishlist_uuid` değerini girin." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "İstek listesi {wishlist_uuid} bulunamadı!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Siparişe ürün ekleme" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Bir sipariş satın alın" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1169,134 +1188,138 @@ msgstr "" "Lütfen öznitelikleri attr1=value1,attr2=value2 şeklinde biçimlendirilmiş " "dize olarak gönderin" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Orderproduct için bir geri bildirim ekleme veya silme" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} bulunamadı!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit 1 ile 10 arasında olmalıdır" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Nitelikler" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Gruplandırılmış nitelikler" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Nitelik grupları" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Kategoriler" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Markalar" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Kategoriler" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "Varsa, bu kategorideki ürünler için minimum ve maksimum fiyatlar." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Bu kategori için etiketler" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Bu kategorideki ürünler" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Satıcılar" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Enlem (Y koordinatı)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Boylam (X koordinatı)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Nasıl yapılır" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "1'den 10'a kadar (dahil) derecelendirme değeri veya ayarlanmamışsa 0." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Bildirimler" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Varsa, bu sipariş ürünü için URL'yi indirin" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Geri bildirim" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Fatura adresi" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1304,200 +1327,208 @@ msgstr "" "Bu sipariş için sevkiyat adresi, fatura adresi ile aynıysa veya geçerli " "değilse boş bırakın" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Bu siparişin toplam fiyatı" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Siparişteki toplam ürün miktarı" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "Siparişteki tüm ürünler dijital mi" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Siparişler" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "Resim URL'si" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Ürün görselleri" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Geri Bildirimler" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Öznitelik grupları" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Fiyat" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Miktar" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Geri bildirim sayısı" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "İndirimli fiyat" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Ürünler" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Promosyon Kodları" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Satıştaki ürünler" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Promosyonlar" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Satıcı" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Ürün" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Dilek Listeleri" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Ürün etiketleri" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Etiketlenmiş kategoriler" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Kategoriler' etiketleri" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Proje adı" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Şirket E-postası" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Şirket Adı" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Şirket Adresi" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Şirket Telefon Numarası" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "'email from', bazen ana kullanıcı değeri yerine kullanılmalıdır" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "E-posta ana kullanıcısı" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Ödeme için maksimum tutar" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Ödeme için minimum tutar" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Analitik veriler" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Reklam verileri" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Konfigürasyon" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Dil kodu" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Dil adı" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Dil bayrağı, eğer varsa :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Desteklenen dillerin bir listesini alın" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Ürünler arama sonuçları" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Ürünler arama sonuçları" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1510,23 +1541,23 @@ msgstr "" " sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek" " için yararlı olabilir." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Bu grubun ebeveyni" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Üst öznitelik grubu" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Öznitelik grubu" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1544,49 +1575,49 @@ msgstr "" "meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla " "etkileşime giren sistemlerde kullanıma uygun hale getirir." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Satıcının API iletişimi için gerekli kimlik bilgilerini ve uç noktaları " "depolar" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Kimlik doğrulama bilgisi" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "Bu satıcıdan alınan ürünler için işaretlemeyi tanımlayın" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Satıcı kar payı yüzdesi" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Bu satıcının adı" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Satıcı adı" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "yanıt dosyası" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "satıcının son işlem yanıtı" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Satıcının entegrasyon dosya yolu" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Entegrasyon yolu" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1601,27 +1632,27 @@ msgstr "" "aracılığıyla dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için " "meta veri özelleştirmesi sağlar." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Etiket adı" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Ürün etiketi için kullanıcı dostu ad" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Etiket görünen adı" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Ürün etiketi" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1632,15 +1663,15 @@ msgstr "" "kategori etiketini modeller. Dahili bir etiket tanımlayıcısı ve kullanıcı " "dostu bir ekran adı için öznitelikler içerir." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "kategori etiketi" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "kategori etiketleri" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1662,51 +1693,51 @@ msgstr "" "açıklamasını ve hiyerarşisini belirlemesinin yanı sıra resimler, etiketler " "veya öncelik gibi öznitelikler atamasına olanak tanır." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Bu kategoriyi temsil eden bir resim yükleyin" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Kategori görüntüsü" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "Bu kategorideki ürünler için bir fiyatlandırma yüzdesi tanımlayın" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Hiyerarşik bir yapı oluşturmak için bu kategorinin üst öğesi" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Ana kategori" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Kategori adı" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Bu kategori için bir ad girin" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Kategori açıklaması" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Öncelik" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1720,47 +1751,47 @@ msgstr "" "Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " "edilmesini sağlar." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Bu markanın adı" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Marka adı" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Marka küçük imajı" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Marka büyük imaj" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Marka açıklaması" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Bu markanın ilişkili olduğu isteğe bağlı kategoriler" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Kategoriler" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1776,68 +1807,72 @@ msgstr "" " ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "İlişkili satıcı" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Satış fiyatı" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "İlişkili ürün" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Dijital dosya" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Sistem nitelikleri" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Stok girişleri" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1858,55 +1893,55 @@ msgstr "" "yönetir. Bir uygulama içinde ürün verilerini ve ilişkili bilgileri " "tanımlamak ve işlemek için kullanılır." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "İsteğe bağlı olarak bu ürünü bir marka ile ilişkilendirin" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Bu ürünü tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Ürün dijital mi" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Ürün için net bir tanımlayıcı isim sağlayın" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Ürün adı" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Ürün Açıklaması" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Parça numarası" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1922,65 +1957,65 @@ msgstr "" "tamsayı, float, boolean, dizi ve nesne dahil olmak üzere birden fazla değer " "türünü destekler. Bu, dinamik ve esnek veri yapılandırmasına olanak tanır." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Bu niteliğin grubu" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "String" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Tamsayı" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Yüzer" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Dizi" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Nesne" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Özniteliğin değerinin türü" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Değer türü" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Bu niteliğin adı" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Özniteliğin adı" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "filtrelenebilir" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Öznitelik" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -1990,19 +2025,19 @@ msgstr "" "'Niteliği' benzersiz bir 'değere' bağlayarak ürün özelliklerinin daha iyi " "düzenlenmesine ve dinamik olarak temsil edilmesine olanak tanır." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Bu değerin niteliği" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Bu özniteliğin değeriyle ilişkili belirli ürün" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Bu öznitelik için özel değer" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2016,39 +2051,39 @@ msgstr "" "görüntülerini yönetmek için tasarlanmıştır. Ayrıca görüntüler için " "alternatif metin içeren bir erişilebilirlik özelliği de içerir." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Erişilebilirlik için görüntü için alternatif metin sağlayın" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Resim alt metni" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Ürün görseli" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Görüntülerin görüntülenme sırasını belirler" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Ekran önceliği" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Ürün görselleri" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2064,39 +2099,39 @@ msgstr "" "öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " "kataloğu ile entegre olur." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Promosyon adı" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Promosyon açıklaması" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Dahil olan ürünler" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Promosyon" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2108,23 +2143,23 @@ msgstr "" "sağlar, ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden " "fazla ürün ekleme ve kaldırma işlemlerini destekler." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Kullanıcının aranıyor olarak işaretlediği ürünler" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "İstek Listesi" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2139,19 +2174,19 @@ msgstr "" "dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir." " Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Belgesel" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Belgeseller" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Çözümlenmemiş" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2172,59 +2207,59 @@ msgstr "" "Sınıf ayrıca bir adresin bir kullanıcıyla ilişkilendirilmesine olanak " "tanıyarak kişiselleştirilmiş veri işlemeyi kolaylaştırır." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Adres hattı" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Sokak" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Bölge" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Şehir" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Bölge" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Posta kodu" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Ülke" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Bu adres için geocoder'dan alınan tam JSON yanıtı" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Adres" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Adresler" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2241,74 +2276,74 @@ msgstr "" "karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " "uygulamak için işlevsellik içerir." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "" "Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz " "kod" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Yüzde indirim" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Promosyon kodunun kullanıldığı zaman damgası, henüz kullanılmadıysa boş" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Promosyon kodu" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Promosyon kodları" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2316,16 +2351,16 @@ msgstr "" "Sadece bir indirim türü (tutar veya yüzde) tanımlanmalı, ikisi birden veya " "hiçbiri tanımlanmamalıdır." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2342,136 +2377,137 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Nakliye adresi" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Sipariş durumu" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Kullanıcılara gösterilecek bildirimlerin JSON yapısı, yönetici kullanıcı " "arayüzünde tablo görünümü kullanılır" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Kullanıcı" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Zaman satın alın" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Sipariş" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "Bir kullanıcı aynı anda yalnızca bir bekleyen emre sahip olmalıdır!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "Beklemede olmayan bir siparişe ürün ekleyemezsiniz" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "Beklemede olmayan bir siparişten ürün kaldıramazsınız" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Fiziksel ürünleri yalnızca gönderim adresi belirtilerek satın alabilirsiniz!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Adres mevcut değil" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2479,14 +2515,14 @@ msgstr "" "kayıt olmadan satın alamazsınız, lütfen aşağıdaki bilgileri sağlayın: " "müşteri adı, müşteri e-postası, müşteri telefon numarası" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Geçersiz ödeme yöntemi: {available_payment_methods}'den {payment_method}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2508,108 +2544,108 @@ msgstr "" "destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " "modelleriyle entegre olur ve bunlara referans depolar." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Satın alma sırasında müşteri tarafından bu ürün için ödenen fiyat" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Sipariş edilen bu ürün hakkında yöneticiler için dahili yorumlar" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Dahili yorumlar" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Ana sipariş" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Ürün miktarı" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Ürün hattı durumu" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "İsim" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Yalnızca bir varsayılan CRM sağlayıcınız olabilir" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "CRM" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "CRM'ler" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2625,15 +2661,15 @@ msgstr "" " sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "İndir" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "İndirmeler" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2648,83 +2684,79 @@ msgstr "" "atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir" " şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" "Ürünle ilgili deneyimleri hakkında kullanıcı tarafından sağlanan yorumlar" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta " "bulunur" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Ürün değerlendirmesi" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇" " sağlamalisiniz." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Promosyon kodu oluşturma sırasında hata: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Ev" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Bize Ulaşın" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Hakkımızda" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Sipariş Onayı" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Logo" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Merhaba %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2735,23 +2767,23 @@ msgstr "" "aldığımızı bildirmekten memnuniyet duyarız. Siparişinizin detayları " "aşağıdadır:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Toplam" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Toplam Fiyat" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2760,28 +2792,28 @@ msgstr "" "Herhangi bir sorunuz varsa, %(config.EMAIL_HOST_USER)s adresinden destek " "ekibimizle iletişime geçmekten çekinmeyin." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Saygılarımla,
the %(config.PROJECT_NAME)s team" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Tüm hakları saklıdır" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Sipariş Teslim Edildi" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Merhaba %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2790,7 +2822,7 @@ msgstr "" "Siparişinizi başarıyla işleme aldık №%(order_uuid)s! Siparişinizin detayları" " aşağıdadır:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2798,13 +2830,13 @@ msgstr "" "ilave\n" " BİLGİ" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Değer" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2813,26 +2845,26 @@ msgstr "" "Herhangi bir sorunuz varsa, %(contact_email)s adresinden destek ekibimizle " "iletişime geçmekten çekinmeyin." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Anahtar" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Satır Ekle" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Promosyon kodu verildi" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2840,8 +2872,8 @@ msgstr "" "Bizimle kaldığınız için teşekkür ederiz! Size bir promosyon kodu verdik\n" " için" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2849,24 +2881,24 @@ msgstr "" "Siparişiniz için teşekkür ederiz! Satın alma işleminizi onaylamaktan " "memnuniyet duyuyoruz. Siparişinizin detayları aşağıdadır:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Nakliye fiyatı" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Siparişiniz aşağıdaki adrese teslim edilecektir:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Saygılarımla,
The %(config.PROJECT_NAME)s team" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2874,48 +2906,48 @@ msgstr "" "Tüm hakları\n" " ayrılmış" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Hem veri hem de zaman aşımı gereklidir" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | bi̇zi̇mle i̇leti̇şi̇me geçi̇n" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Sipariş Onayı" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Sipariş Teslim Edildi" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | verilen promosyon kodu" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Bu eylemi gerçekleştirmek için izniniz yok." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2923,7 +2955,7 @@ msgstr "" "Site haritası dizini için isteği işler ve bir XML yanıtı döndürür. Yanıtın " "XML için uygun içerik türü başlığını içermesini sağlar." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2933,18 +2965,18 @@ msgstr "" " işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-" "Type başlığını ayarlar." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Desteklenen dillerin bir listesini ve bunlara karşılık gelen bilgileri " "döndürür." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Web sitesinin parametrelerini bir JSON nesnesi olarak döndürür." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2952,11 +2984,11 @@ msgstr "" "Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama" " gibi önbellek işlemlerini gerçekleştirir." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Bize ulaşın` form gönderimlerini işler." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2964,15 +2996,15 @@ msgstr "" "Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " "işler." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Küresel arama sorgularını işler." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2980,27 +3012,27 @@ msgstr "" "Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n" "Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid gereklidir" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Sipariş ürününün bir ürünü yok" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "favicon bulunamadı" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3008,7 +3040,7 @@ msgstr "" "Bir web sitesinin favicon'u için istekleri işler.\n" "Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3019,11 +3051,11 @@ msgstr "" "yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " "fonksiyonunu kullanır." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "eVibes'in geçerli sürümünü döndürür." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3037,7 +3069,7 @@ msgstr "" "eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve" " işleme biçimleri için destek içerir." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3051,7 +3083,7 @@ msgstr "" "parçasıdır ve AttributeGroup verilerine yönelik istekleri ve yanıtları " "işlemek için standartlaştırılmış bir yol sağlar." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3067,7 +3099,7 @@ msgstr "" "bağlı olarak ayrıntılı ve basitleştirilmiş bilgilerin alınması gibi " "döndürülen veriler üzerinde dinamik kontrol sağlar." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3082,7 +3114,7 @@ msgstr "" "serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend " "aracılığıyla sağlanır." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3097,7 +3129,7 @@ msgstr "" "kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de " "zorlar." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3109,7 +3141,7 @@ msgstr "" "sağlar. Brand nesneleri için API uç noktalarının uygulanmasını " "basitleştirmek için Django'nun ViewSet çerçevesini kullanır." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3127,7 +3159,7 @@ msgstr "" "uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " "içerir." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3142,7 +3174,7 @@ msgstr "" "tanımlar. Bu sınıfın amacı, Django REST çerçevesi aracılığıyla Vendor ile " "ilgili kaynaklara kolaylaştırılmış erişim sağlamaktır." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3159,7 +3191,7 @@ msgstr "" "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "kullanır." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3178,7 +3210,7 @@ msgstr "" "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "girerken izinleri buna göre zorlar." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3192,11 +3224,11 @@ msgstr "" " serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " "geri bildirimleri işlemek için ayrıntılı bir eylem sağlar" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3204,15 +3236,15 @@ msgstr "" "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "işlenmesini yönetir." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3230,7 +3262,7 @@ msgstr "" "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "yönetebilmelerini sağlamak için entegre edilmiştir." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3244,12 +3276,12 @@ msgstr "" "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "özel davranışlar içerir." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d8b6b742192c25ce539fb6f8d0a15d477233cd21 GIT binary patch literal 101246 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 KK{$CEu>S+K-}nLm literal 0 HcmV?d00001 diff --git a/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po similarity index 77% rename from core/locale/vi_VN/LC_MESSAGES/django.po rename to engine/core/locale/vi_VN/LC_MESSAGES/django.po index 9efde566..9199f60f 100644 --- a/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,21 +13,21 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "ID duy nhất" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "" "Mã định danh duy nhất (Unique ID) được sử dụng để xác định chính xác bất kỳ " "đối tượng cơ sở dữ liệu nào." -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "Đang hoạt động" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" @@ -35,158 +35,162 @@ msgstr "" "Nếu được đặt thành false, đối tượng này sẽ không hiển thị cho người dùng " "không có quyền truy cập cần thiết." -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "Được tạo ra" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "Khi đối tượng lần đầu tiên xuất hiện trong cơ sở dữ liệu" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "Đã sửa đổi" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "Khi đối tượng được chỉnh sửa lần cuối" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "Dịch thuật" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "Tổng quát" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "Quan hệ" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "Thông tin bổ sung" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "Siêu dữ liệu" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "Dấu thời gian" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "Kích hoạt %(verbose_name_plural)s đã chọn" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "Các mục đã được chọn đã được kích hoạt!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "Vô hiệu hóa các mục đã chọn %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "Các mục đã chọn đã bị vô hiệu hóa!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "Giá trị thuộc tính" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "Giá trị thuộc tính" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "Hình ảnh" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "Hình ảnh" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "Cổ phiếu" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "Cổ phiếu" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "Trẻ em" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "Cấu hình" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "Lõi" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "Hoàn thành" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "Giao hàng" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "Đã giao" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "Đã hủy" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "Thất bại" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "Đang chờ xử lý" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "Được chấp nhận" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "Tiền được hoàn lại" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "Thanh toán" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "Momental" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "Thành công" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Bộ nhớ đệm I/O" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -194,31 +198,31 @@ msgstr "" "Chỉ sử dụng khóa để đọc dữ liệu được phép từ bộ nhớ đệm. Sử dụng khóa, dữ " "liệu và thời gian chờ kèm theo xác thực để ghi dữ liệu vào bộ nhớ đệm." -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "Xem danh sách các ngôn ngữ được hỗ trợ" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "Lấy các tham số có thể truy cập của ứng dụng" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "Gửi tin nhắn cho đội ngũ hỗ trợ" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Yêu cầu URL CORSed. Chỉ cho phép https." -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "Điểm cuối tìm kiếm toàn cầu để tra cứu qua các bảng của dự án" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "Mua hàng với tư cách là doanh nghiệp" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." @@ -226,144 +230,145 @@ msgstr "" "Mua hàng với tư cách là doanh nghiệp, sử dụng các sản phẩm được cung cấp với" " `product_uuid` và `attributes`." -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "Danh sách tất cả các nhóm thuộc tính (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "Lấy một nhóm thuộc tính duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "Tạo nhóm thuộc tính" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "Xóa nhóm thuộc tính" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "" "Viết lại nhóm thuộc tính hiện có và giữ nguyên các thuộc tính không thể " "chỉnh sửa." -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "" "Cập nhật một số trường trong nhóm thuộc tính hiện có, giữ nguyên các trường " "không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "Tạo một thuộc tính" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "Xóa một thuộc tính" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "" "Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "" "Cập nhật một số trường của một thuộc tính hiện có, giữ nguyên các trường " "không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "Danh sách tất cả các giá trị thuộc tính (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "Lấy giá trị của một thuộc tính duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "Tạo giá trị thuộc tính" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "Xóa giá trị của một thuộc tính" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "" "Cập nhật giá trị của một thuộc tính hiện có mà không thay đổi các trường " "không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "" "Cập nhật một số trường của giá trị thuộc tính hiện có, giữ nguyên các trường" " không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 +msgid "Category UUID or slug" +msgstr "Mã định danh duy nhất (UUID) hoặc tên gọi (slug) của danh mục" + +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 msgid "create a category" msgstr "Tạo một danh mục" -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 msgid "delete a category" msgstr "Xóa một danh mục" -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 msgid "rewrite an existing category saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 msgid "rewrite some fields of an existing category saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 msgid "SEO Meta snapshot" msgstr "SEO Meta snapshot" -#: core/docs/drf/viewsets.py:170 +#: engine/core/docs/drf/viewsets.py:178 msgid "returns a snapshot of the category's SEO meta data" msgstr "Trả về bản sao dữ liệu meta SEO của danh mục." -#: core/docs/drf/viewsets.py:175 -msgid "Category UUID or slug" -msgstr "Mã định danh duy nhất (UUID) hoặc tên gọi (slug) của danh mục" - -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "Danh sách tất cả các danh mục (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "" "Đối với người dùng không phải nhân viên, chỉ các đơn hàng của chính họ được " "hiển thị." -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -372,39 +377,39 @@ msgstr "" "human_readable_id, order_products.product.name và " "order_products.product.partnumber." -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "Lọc các đơn hàng có thời gian mua >= thời gian ISO 8601 này" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "Lọc các đơn hàng có thời gian mua <= thời gian ISO 8601 này" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "Lọc theo UUID chính xác" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "Lọc theo ID đơn hàng chính xác có thể đọc được bởi con người" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "" "Lọc theo địa chỉ email của người dùng (khớp chính xác không phân biệt chữ " "hoa chữ thường)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "Lọc theo UUID của người dùng" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "" "Lọc theo trạng thái đơn hàng (so khớp chuỗi con không phân biệt chữ hoa chữ " "thường)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -414,39 +419,43 @@ msgstr "" "user, status, created, modified, buy_time, random. Thêm tiền tố '-' để sắp " "xếp theo thứ tự giảm dần (ví dụ: '-buy_time')." -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "Lấy một danh mục duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "Đặt hàng UUID hoặc ID dễ đọc cho con người" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "Tạo một thuộc tính" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "Không áp dụng cho người dùng không phải nhân viên." -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "Xóa một thuộc tính" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " @@ -456,19 +465,19 @@ msgstr "" "hoàn tất bằng số dư của người dùng; nếu sử dụng `force_payment`, một giao " "dịch sẽ được khởi tạo." -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "Đặt hàng mà không cần tạo tài khoản" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "Hoàn tất đơn đặt hàng cho người dùng chưa đăng ký." -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." @@ -476,11 +485,11 @@ msgstr "" "Thêm sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và `attributes` " "được cung cấp." -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "Thêm danh sách sản phẩm vào đơn hàng, số lượng sẽ không được tính." -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." @@ -488,11 +497,11 @@ msgstr "" "Thêm danh sách sản phẩm vào đơn hàng bằng cách sử dụng `product_uuid` và " "`attributes` được cung cấp." -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." @@ -500,11 +509,11 @@ msgstr "" "Xóa một sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và " "`attributes` được cung cấp." -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "Xóa sản phẩm khỏi đơn hàng, số lượng sẽ không được tính." -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" @@ -512,85 +521,85 @@ msgstr "" "Xóa danh sách sản phẩm khỏi đơn hàng bằng cách sử dụng `product_uuid` và " "`attributes` được cung cấp." -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "Danh sách tất cả các thuộc tính (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "" "Đối với người dùng không phải nhân viên, chỉ danh sách mong muốn của chính " "họ được hiển thị." -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "Lấy một thuộc tính duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "Tạo một thuộc tính" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "Không áp dụng cho người dùng không phải nhân viên." -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "Xóa một thuộc tính" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "" "Viết lại một thuộc tính hiện có để lưu trữ các trường không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "" "Cập nhật một số trường của một thuộc tính hiện có, giữ nguyên các trường " "không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "" "Thêm sản phẩm vào danh sách mong muốn bằng cách sử dụng `product_uuid` được " "cung cấp." -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "Xóa sản phẩm khỏi danh sách mong muốn" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "" "Xóa một sản phẩm khỏi danh sách mong muốn bằng cách sử dụng `product_uuid` " "được cung cấp." -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "Thêm nhiều sản phẩm vào danh sách mong muốn" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "" "Thêm nhiều sản phẩm vào danh sách mong muốn bằng cách sử dụng các " "`product_uuids` được cung cấp." -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "" "Xóa nhiều sản phẩm khỏi danh sách mong muốn bằng cách sử dụng các " "`product_uuids` được cung cấp." -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -604,15 +613,15 @@ msgstr "" "Lọc theo một hoặc nhiều cặp tên/giá trị thuộc tính. • **Cú pháp**: `attr_name=method-value[;attr2=method2-value2]…` • **Phương thức** (mặc định là `icontains` nếu không được chỉ định): `iexact`, `exact`, `icontains`, `contains`, `isnull`, `startswith`, `istartswith`, `endswith`, `iendswith`, `regex`, `iregex`, `lt`, `lte`, `gt`, `gte`, `in` • **Kiểu giá trị**: JSON được ưu tiên (nên bạn có thể truyền danh sách/đối tượng), `true`/`false` cho boolean, số nguyên, số thực; nếu không sẽ được xử lý như chuỗi. • **Base64**: thêm tiền tố `b64-` để mã hóa Base64 an toàn cho URL giá trị thô. \n" "Ví dụ: `color=exact-red`, `size=gt-10`, `features=in-[\"wifi\",\"bluetooth\"]`, `b64-description=icontains-aGVhdC1jb2xk`" -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "Danh sách tất cả sản phẩm (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(chính xác) Mã định danh duy nhất của sản phẩm (UUID)" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -621,570 +630,580 @@ msgstr "" "`-` để sắp xếp theo thứ tự giảm dần. **Được phép:** uuid, rating, name, " "slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "Lấy thông tin chi tiết của một sản phẩm (xem chi tiết)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "Mã định danh duy nhất (UUID) hoặc Slug của sản phẩm" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "Tạo sản phẩm" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Viết lại một sản phẩm hiện có, giữ nguyên các trường không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Cập nhật một số trường của sản phẩm hiện có, giữ nguyên các trường không thể" " chỉnh sửa." -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "Xóa sản phẩm" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "Danh sách tất cả các phản hồi được phép cho một sản phẩm" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "Trả về bản sao lưu dữ liệu meta SEO của sản phẩm." -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "Danh sách tất cả các địa chỉ" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "Lấy một địa chỉ duy nhất" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "Tạo một địa chỉ mới" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "Xóa địa chỉ" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "Cập nhật toàn bộ địa chỉ" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "Cập nhật một phần địa chỉ" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "Tự động hoàn thành địa chỉ nhập liệu" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "" "Dãy truy vấn dữ liệu thô, vui lòng bổ sung dữ liệu từ điểm cuối geo-IP." -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "Giới hạn số lượng kết quả, 1 < giới hạn < 10, mặc định: 5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "Danh sách tất cả phản hồi (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "Lấy một phản hồi duy nhất (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "Tạo phản hồi" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "Xóa phản hồi" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "Viết lại phản hồi hiện có để lưu các trường không thể chỉnh sửa." -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "" "Cập nhật một số trường của một phản hồi hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "" "Danh sách tất cả các mối quan hệ giữa đơn hàng và sản phẩm (cách xem đơn " "giản)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "" "Lấy thông tin về mối quan hệ giữa đơn hàng và sản phẩm (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "Tạo mối quan hệ mới giữa đơn hàng và sản phẩm" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "Thay thế mối quan hệ giữa đơn hàng và sản phẩm hiện có" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "Cập nhật một phần mối quan hệ giữa đơn hàng và sản phẩm hiện có" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "Thêm hoặc xóa phản hồi về mối quan hệ giữa đơn hàng và sản phẩm" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "Danh sách tất cả các thương hiệu (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "" "Trích xuất thông tin chi tiết về một thương hiệu duy nhất (chế độ xem chi " "tiết)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "Mã định danh thương hiệu (UUID) hoặc tên gọi tắt" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "Xây dựng thương hiệu" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "Xóa thương hiệu" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "SEO Meta snapshot cho thương hiệu" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "Danh sách tất cả nhà cung cấp (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "Tra cứu thông tin chi tiết về một nhà cung cấp duy nhất" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "Tạo nhà cung cấp" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "Xóa nhà cung cấp" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "Danh sách tất cả hình ảnh sản phẩm (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "Lấy một hình ảnh sản phẩm (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "Tạo hình ảnh sản phẩm" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "Xóa hình ảnh sản phẩm" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "Danh sách tất cả mã khuyến mãi (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "Lấy một mã khuyến mãi duy nhất (xem chi tiết)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "Tạo mã khuyến mãi" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "Xóa mã khuyến mãi" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "Danh sách tất cả các chương trình khuyến mãi (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "Tra cứu một chương trình khuyến mãi (xem chi tiết)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "Tạo chương trình khuyến mãi" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "Xóa một chương trình khuyến mãi" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "Danh sách tất cả các cổ phiếu (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "Tra cứu một cổ phiếu (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "Tạo hồ sơ kho hàng" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "Xóa một bản ghi kho" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "Danh sách tất cả thẻ sản phẩm (chế độ xem đơn giản)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "Lấy thông tin thẻ sản phẩm đơn lẻ (chế độ xem chi tiết)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "Tạo thẻ sản phẩm" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "Xóa thẻ sản phẩm" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "" "Viết lại một danh mục hiện có mà không thay đổi các trường không thể chỉnh " "sửa." -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "" "Cập nhật một số trường của một danh mục hiện có, giữ nguyên các trường không" " thể chỉnh sửa." -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "Tìm kiếm" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "Tên" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "Các danh mục" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "Thể loại Tiêu đề" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "Thẻ" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "Giá tối thiểu" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "Giá tối đa" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "Đang hoạt động" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "Thương hiệu" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "Thuộc tính" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "Số lượng" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "Sên" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "Bao gồm các danh mục con" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "Gồm các sản phẩm đặt hàng cá nhân" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "Mã sản phẩm" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Phải có trường category_uuid để sử dụng cờ include_subcategories." -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "Tìm kiếm (ID, tên sản phẩm hoặc số hiệu linh kiện)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "Được mua sau (bao gồm)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "Đã mua trước đó (bao gồm)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "Địa chỉ email của người dùng" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "UUID người dùng" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "Trạng thái" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "Mã định danh dễ đọc cho con người" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "Cha mẹ" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "Toàn bộ danh mục (có ít nhất 1 sản phẩm hoặc không)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "Cấp độ" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Khóa để tìm kiếm trong hoặc đặt vào bộ nhớ đệm" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dữ liệu cần lưu trữ trong bộ nhớ cache" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Thời gian chờ (timeout) tính bằng giây để lưu dữ liệu vào bộ nhớ đệm." -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" "Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu." -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép." -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Lệnh {order_uuid} không tìm thấy!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Xóa tất cả sản phẩm khỏi đơn hàng." -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "Đặt hàng" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vui lòng cung cấp một trong hai trường order_uuid hoặc order_hr_id - hai " "trường này là tương hỗ!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Thực hiện một hành động trên danh sách sản phẩm theo thứ tự." -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "Xóa/Thêm" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Hành động phải là \"thêm\" hoặc \"xóa\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Thực hiện một hành động trên danh sách sản phẩm trong danh sách mong muốn." -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`." -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Danh sách mong muốn {wishlist_uuid} không tìm thấy!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "Đặt hàng" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -1192,137 +1211,141 @@ msgstr "" "Vui lòng gửi các thuộc tính dưới dạng chuỗi được định dạng như sau: " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Thêm hoặc xóa phản hồi cho sản phẩm đặt hàng" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Hành động phải là `thêm` hoặc `xóa`!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Sản phẩm {order_product_uuid} không tìm thấy!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Dòng địa chỉ gốc do người dùng cung cấp" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Giới hạn phải nằm trong khoảng từ 1 đến 10." -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - hoạt động rất tốt." -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "Thuộc tính" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "Các thuộc tính được nhóm lại" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "Nhóm thuộc tính" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "Các danh mục" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "Thương hiệu" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "Các danh mục" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "" "Các thuộc tính và giá trị nào có thể được sử dụng để lọc danh mục này." -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "" "Giá tối thiểu và tối đa cho các sản phẩm trong danh mục này, nếu có sẵn." -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "Thẻ cho danh mục này" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "Sản phẩm trong danh mục này" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "Vĩ độ (tọa độ Y)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "Kinh độ (tọa độ X)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "Làm thế nào" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "" "Giá trị đánh giá từ 1 đến 10, bao gồm cả 1 và 10, hoặc 0 nếu không được " "thiết lập." -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "Đại diện cho phản hồi từ người dùng." -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "Thông báo" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "Tải xuống liên kết URL cho sản phẩm của đơn hàng này (nếu có)." -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "Phản hồi" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "Danh sách các sản phẩm trong đơn hàng này" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "Địa chỉ thanh toán" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" @@ -1330,202 +1353,210 @@ msgstr "" "Địa chỉ giao hàng cho đơn hàng này, để trống nếu trùng với địa chỉ thanh " "toán hoặc nếu không áp dụng." -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "Tổng giá trị của đơn hàng này" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "Tổng số lượng sản phẩm trong đơn hàng" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "" "Tất cả các sản phẩm trong đơn hàng có phải là sản phẩm kỹ thuật số không?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "Đơn hàng" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "URL hình ảnh" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "Thể loại" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "Phản hồi" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "Thương hiệu" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "Nhóm thuộc tính" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "Giá" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "Số lượng" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "Số lượng phản hồi" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "Sản phẩm chỉ dành cho đơn đặt hàng cá nhân." -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "Giá khuyến mãi" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "Sản phẩm" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "Mã khuyến mãi" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "Khuyến mãi" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "Sản phẩm" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "Danh sách mong muốn" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "Thẻ sản phẩm" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "Các danh mục được gắn thẻ" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "Thẻ của các danh mục" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "Tên dự án" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "Email công ty" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "Tên công ty" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "Địa chỉ công ty" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "Số điện thoại của công ty" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "" "'email from', đôi khi phải sử dụng thay cho giá trị người dùng máy chủ." -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "Người dùng máy chủ email" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "Số tiền tối đa cho thanh toán" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "Số tiền tối thiểu để thanh toán" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "Dữ liệu phân tích" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "Dữ liệu quảng cáo" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "Cấu hình" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "Mã ngôn ngữ" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "Tên ngôn ngữ" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "Cờ ngôn ngữ, nếu có :)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "Xem danh sách các ngôn ngữ được hỗ trợ" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1538,23 +1569,23 @@ msgstr "" " việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ" " thống phức tạp." -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "Cha mẹ của nhóm này" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "Nhóm thuộc tính cha" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "Nhóm thuộc tính" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1573,50 +1604,50 @@ msgstr "" " bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " "nhà cung cấp bên thứ ba." -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lưu trữ thông tin đăng nhập và các điểm cuối cần thiết cho việc giao tiếp " "API của nhà cung cấp." -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "Thông tin xác thực" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "" "Xác định định dạng đánh dấu cho các sản phẩm được lấy từ nhà cung cấp này." -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "Tỷ lệ chiết khấu của nhà cung cấp" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "Tên của nhà cung cấp này" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "Tên nhà cung cấp" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "Tệp phản hồi" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "Đường dẫn tệp tích hợp của nhà cung cấp" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "Đường dẫn tích hợp" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1630,27 +1661,27 @@ msgstr "" "thân thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và " "cung cấp tùy chỉnh metadata cho mục đích quản trị." -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "Mã định danh thẻ nội bộ cho thẻ sản phẩm" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "Tên ngày" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "Tên thân thiện với người dùng cho thẻ sản phẩm" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "Thẻ sản phẩm" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1661,15 +1692,15 @@ msgstr "" "gồm các thuộc tính cho mã định danh thẻ nội bộ và tên hiển thị thân thiện " "với người dùng." -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "Thẻ danh mục" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "Thẻ danh mục" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1690,52 +1721,52 @@ msgstr "" " hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh " "mục, cũng như gán các thuộc tính như hình ảnh, thẻ hoặc ưu tiên." -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "Tải lên một hình ảnh đại diện cho danh mục này." -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "Hình ảnh danh mục" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "" "Xác định tỷ lệ phần trăm chiết khấu cho các sản phẩm trong danh mục này." -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "Cha của danh mục này để tạo cấu trúc phân cấp." -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "Danh mục cha" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "Tên danh mục" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "Đặt tên cho danh mục này." -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "Thêm mô tả chi tiết cho danh mục này." -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "Mô tả danh mục" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "Thẻ giúp mô tả hoặc phân loại danh mục này" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "Ưu tiên" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1748,47 +1779,47 @@ msgstr "" "các danh mục liên quan, một slug duy nhất và thứ tự ưu tiên. Nó cho phép tổ " "chức và hiển thị dữ liệu liên quan đến thương hiệu trong ứng dụng." -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "Tên thương hiệu" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "Tải lên logo đại diện cho thương hiệu này." -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "Tải lên một logo lớn đại diện cho thương hiệu này." -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "Mô tả thương hiệu" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "Các danh mục tùy chọn mà thương hiệu này liên kết với" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "Các danh mục" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1804,68 +1835,72 @@ msgstr "" "phần của hệ thống quản lý hàng tồn kho để cho phép theo dõi và đánh giá các " "sản phẩm có sẵn từ các nhà cung cấp khác nhau." -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "Nhà cung cấp cung cấp hàng tồn kho cho sản phẩm này." -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "Giá cuối cùng cho khách hàng sau khi cộng thêm chi phí." -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "Giá bán" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "Sản phẩm liên quan đến mục hàng tồn kho này" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "Sản phẩm liên quan" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "Giá thanh toán cho nhà cung cấp cho sản phẩm này" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "Mã SKU do nhà cung cấp gán để nhận dạng sản phẩm" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "Tệp tin kỹ thuật số liên quan đến cổ phiếu này (nếu có)" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "Thuộc tính hệ thống" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "Nhập kho" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1886,56 +1921,56 @@ msgstr "" " dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan " "trong ứng dụng." -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "Tùy chọn: Kết hợp sản phẩm này với một thương hiệu" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "Thẻ giúp mô tả hoặc phân loại sản phẩm này" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "" "Cho biết sản phẩm này có được phân phối dưới dạng kỹ thuật số hay không." -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "Cung cấp một tên gọi rõ ràng để nhận diện sản phẩm." -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "Tên sản phẩm" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "Mô tả sản phẩm" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "Số hiệu linh kiện" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "Đơn vị quản lý hàng tồn kho cho sản phẩm này" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1951,64 +1986,64 @@ msgstr "" "chuỗi, số nguyên, số thực, boolean, mảng và đối tượng. Điều này cho phép cấu" " trúc dữ liệu động và linh hoạt." -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "Nhóm có thuộc tính này" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "Dây" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "Chính trực" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "Nổi" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "Boolean" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "Mảng" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "Đối tượng" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "Loại giá trị của thuộc tính" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "Kiểu giá trị" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "Tên của thuộc tính này" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "Tên thuộc tính" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "có thể lọc được" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "Xác định xem thuộc tính này có thể được sử dụng để lọc hay không." -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "Thuộc tính" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" @@ -2018,19 +2053,19 @@ msgstr "" " phẩm. Nó liên kết 'thuộc tính' với một 'giá trị' duy nhất, cho phép tổ chức" " tốt hơn và thể hiện động các đặc điểm của sản phẩm." -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "Thuộc tính của giá trị này" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "Sản phẩm cụ thể liên quan đến giá trị của thuộc tính này" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "Giá trị cụ thể cho thuộc tính này" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -2044,39 +2079,39 @@ msgstr "" "định thứ tự hiển thị của chúng. Nó cũng bao gồm tính năng truy cập với văn " "bản thay thế cho hình ảnh." -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "Cung cấp văn bản thay thế cho hình ảnh để đảm bảo tính khả dụng." -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "Nội dung thay thế cho hình ảnh" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "Tải lên tệp hình ảnh cho sản phẩm này." -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "Xác định thứ tự hiển thị của các hình ảnh." -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -2092,39 +2127,39 @@ msgstr "" "mãi và liên kết nó với các sản phẩm áp dụng. Nó tích hợp với danh mục sản " "phẩm để xác định các mặt hàng bị ảnh hưởng trong chiến dịch." -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "Giảm giá theo phần trăm cho các sản phẩm đã chọn" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "Hãy đặt một tên duy nhất cho chương trình khuyến mãi này." -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "Chọn các sản phẩm được bao gồm trong chương trình khuyến mãi này." -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "Khuyến mãi" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -2136,23 +2171,23 @@ msgstr "" " phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các " "thao tác thêm và xóa nhiều sản phẩm cùng lúc." -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "Các sản phẩm mà người dùng đã đánh dấu là mong muốn" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "Người dùng sở hữu danh sách mong muốn này" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "Danh sách mong muốn" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -2168,19 +2203,19 @@ msgstr "" "Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh" " bổ sung." -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "Phim tài liệu" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "Phim tài liệu" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "Chưa được giải quyết" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2200,59 +2235,59 @@ msgstr "" "lý hoặc kiểm tra thêm. Lớp này cũng cho phép liên kết địa chỉ với người " "dùng, giúp quản lý dữ liệu cá nhân hóa." -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "Dòng địa chỉ" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "Phố" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "Quận" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "Thành phố" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "Khu vực" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "Mã bưu chính" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "Quốc gia" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "Phản hồi JSON đầy đủ từ dịch vụ định vị địa lý cho địa chỉ này" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "Phản hồi JSON được lưu trữ từ dịch vụ định vị địa lý" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "Địa chỉ" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "Địa chỉ" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2268,72 +2303,72 @@ msgstr "" "(nếu có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng " "mã khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng." -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "Mã duy nhất mà người dùng sử dụng để đổi lấy ưu đãi giảm giá." -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "Số tiền giảm giá cố định được áp dụng nếu không sử dụng phần trăm." -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Giảm giá theo phần trăm sẽ được áp dụng nếu không sử dụng số tiền cố định." -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "Thời gian bắt đầu hiệu lực của mã khuyến mãi này" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Thời gian sử dụng mã khuyến mãi, để trống nếu chưa được sử dụng." -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "Người dùng được gán mã khuyến mãi này (nếu có)." -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "Mã khuyến mãi" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "Mã khuyến mãi" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2341,16 +2376,16 @@ msgstr "" "Chỉ nên định nghĩa một loại giảm giá (theo số tiền hoặc theo phần trăm), " "nhưng không nên định nghĩa cả hai hoặc không định nghĩa cả hai." -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Loại giảm giá không hợp lệ cho mã khuyến mãi {self.uuid}!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2367,140 +2402,141 @@ msgstr "" "toán. Đồng thời, chức năng hỗ trợ quản lý các sản phẩm trong chu kỳ đời của " "đơn hàng." -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "Địa chỉ thanh toán được sử dụng cho đơn hàng này" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "Mã khuyến mãi tùy chọn đã được áp dụng cho đơn hàng này." -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "Địa chỉ giao hàng được sử dụng cho đơn hàng này" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "Tình trạng hiện tại của đơn hàng trong chu kỳ đời sống của nó" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "Tình trạng đơn hàng" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "" "Cấu trúc JSON của thông báo hiển thị cho người dùng, trong giao diện quản " "trị (admin UI), chế độ xem bảng (table-view) được sử dụng." -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "Đại diện JSON của các thuộc tính đơn hàng cho đơn hàng này" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "Người dùng" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "Thời gian ghi nhận khi đơn hàng được hoàn tất" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "Mua thời gian" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "Đặt hàng" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "" "Một người dùng chỉ được phép có một lệnh chờ duy nhất tại một thời điểm!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Bạn không thể thêm sản phẩm vào đơn hàng không phải là đơn hàng đang chờ xử " "lý." -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "Bạn không thể thêm các sản phẩm không hoạt động vào đơn hàng." -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "Bạn không thể thêm nhiều sản phẩm hơn số lượng hiện có trong kho." -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ" " xử lý." -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} không tồn tại với truy vấn <{query}>!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "" "Bạn chỉ có thể mua các sản phẩm vật lý có địa chỉ giao hàng được chỉ định!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Bạn không thể mua hàng vào lúc này, vui lòng thử lại sau vài phút." -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "Bạn không thể đặt hàng mà không có tài khoản người dùng!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "Người dùng không có số dư không thể mua bằng số dư!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2509,7 +2545,7 @@ msgstr "" "sau: tên khách hàng, địa chỉ email của khách hàng, số điện thoại của khách " "hàng." -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2517,7 +2553,7 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2539,108 +2575,108 @@ msgstr "" "kỹ thuật số. Mô hình này tích hợp với các mô hình Order và Product và lưu " "trữ tham chiếu đến chúng." -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "Giá mà khách hàng phải trả cho sản phẩm này tại thời điểm mua hàng." -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "Nhận xét nội bộ dành cho quản trị viên về sản phẩm đã đặt hàng này" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "Đại diện JSON của các thuộc tính của mục này" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "Tham chiếu đến đơn hàng chính chứa sản phẩm này." -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "Sản phẩm cụ thể liên quan đến dòng đơn hàng này" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "Số lượng sản phẩm cụ thể này trong đơn hàng" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "Tình trạng hiện tại của sản phẩm này trong đơn hàng" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "Sản phẩm đặt hàng phải có đơn hàng liên quan!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Hành động sai được chỉ định cho phản hồi: {action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "Bạn không thể phản hồi đơn hàng mà bạn chưa nhận được." -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "Tên" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "Bạn chỉ có thể có một nhà cung cấp CRM mặc định." -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2656,15 +2692,15 @@ msgstr "" "thị công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài" " sản khi đơn hàng liên quan ở trạng thái đã hoàn thành." -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "Tải xuống" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "Tải xuống" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2679,82 +2715,78 @@ msgstr "" " sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi" " một cách hiệu quả." -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "" "Những bình luận do người dùng cung cấp về trải nghiệm của họ với sản phẩm" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "Phản hồi" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Tham chiếu đến sản phẩm cụ thể trong đơn hàng mà phản hồi này đề cập đến." -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "Đánh giá do người dùng gán cho sản phẩm" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "Đánh giá sản phẩm" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Bạn phải cung cấp bình luận, đánh giá và mã UUID của sản phẩm để thêm phản " "hồi." -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "Lỗi xảy ra trong quá trình tạo mã khuyến mãi: {e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "Trang chủ" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "Liên hệ với chúng tôi" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "Giới thiệu về chúng tôi" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "Xác nhận đơn hàng" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "Biểu trưng" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "Xin chào %(order.user.first_name)s," -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2765,23 +2797,23 @@ msgstr "" "rằng đơn hàng của quý khách đã được tiếp nhận và đang được xử lý. Dưới đây " "là chi tiết đơn hàng của quý khách:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "Tổng cộng" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "Giá tổng cộng" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2790,28 +2822,28 @@ msgstr "" "Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" " tôi tại %(config.EMAIL_HOST_USER)s." -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "Trân trọng,
Đội ngũ %(config.PROJECT_NAME)s" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "Tất cả các quyền được bảo lưu." -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "Đơn hàng đã được giao" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "Xin chào %(user_first_name)s," -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" @@ -2820,19 +2852,19 @@ msgstr "" "Chúng tôi đã xử lý thành công đơn hàng của quý khách số №%(order_uuid)s! " "Dưới đây là chi tiết đơn hàng của quý khách:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" msgstr "Thông tin bổ sung" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "Giá trị" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -2841,26 +2873,26 @@ msgstr "" "Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" " tôi tại %(contact_email)s." -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "Chìa khóa" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "Thêm hàng" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "Mã khuyến mãi được cấp" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2868,8 +2900,8 @@ msgstr "" "Cảm ơn quý khách đã đồng hành cùng chúng tôi! Chúng tôi đã cấp cho quý khách" " một mã khuyến mãi cho" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" @@ -2877,74 +2909,74 @@ msgstr "" "Cảm ơn quý khách đã đặt hàng! Chúng tôi rất vui được xác nhận đơn hàng của " "quý khách. Dưới đây là chi tiết đơn hàng của quý khách:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "Giá vận chuyển" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "Đơn hàng của quý khách sẽ được giao đến địa chỉ sau:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "Trân trọng,
Đội ngũ %(config.PROJECT_NAME)s" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" msgstr "Tất cả các quyền được bảo lưu." -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Cả dữ liệu và thời gian chờ đều là bắt buộc." -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến " "216.000 giây." -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME} | Liên hệ với chúng tôi đã được khởi tạo" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME} | Xác nhận đơn hàng" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | Đơn hàng đã được giao" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | mã khuyến mãi được cấp" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "Bạn không có quyền thực hiện hành động này." -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "Tham số NOMINATIM_URL phải được cấu hình!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Kích thước hình ảnh không được vượt quá w{max_width} x h{max_height} pixel!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2952,7 +2984,7 @@ msgstr "" "Xử lý yêu cầu về sơ đồ trang web (sitemap index) và trả về phản hồi XML. Nó " "đảm bảo rằng phản hồi bao gồm tiêu đề loại nội dung XML phù hợp." -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2962,17 +2994,17 @@ msgstr "" "lấy phản hồi chi tiết phù hợp của sơ đồ trang web và đặt tiêu đề Content-" "Type cho XML." -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Trả về danh sách các ngôn ngữ được hỗ trợ và thông tin tương ứng của chúng." -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "Trả về các tham số của trang web dưới dạng đối tượng JSON." -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2980,27 +3012,27 @@ msgstr "" "Xử lý các thao tác bộ nhớ đệm như đọc và ghi dữ liệu bộ nhớ đệm với khóa và " "thời gian chờ được chỉ định." -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "Xử lý các biểu mẫu liên hệ." -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "Xử lý các yêu cầu xử lý và xác thực URL từ các yêu cầu POST đến." -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "Xử lý các truy vấn tìm kiếm toàn cầu." -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "" "Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng" " ký." -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3010,28 +3042,28 @@ msgstr "" " lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được " "trả về để thông báo rằng tài nguyên không khả dụng." -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid là trường bắt buộc." -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một lần." -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "" "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "Sản phẩm đặt hàng không có sản phẩm." -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3041,7 +3073,7 @@ msgstr "" "không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài " "nguyên không khả dụng." -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3052,11 +3084,11 @@ msgstr "" "Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " "HTTP." -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "Trả về phiên bản hiện tại của eVibes." -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -3070,7 +3102,7 @@ msgstr "" "trợ cho các lớp serializer động dựa trên hành động hiện tại, quyền truy cập " "có thể tùy chỉnh và các định dạng hiển thị." -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -3084,7 +3116,7 @@ msgstr "" " ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ" " liệu AttributeGroup." -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -3100,7 +3132,7 @@ msgstr "" " hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông" " tin đơn giản tùy thuộc vào yêu cầu." -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -3114,7 +3146,7 @@ msgstr "" "sử dụng các trình serializer phù hợp cho các hành động khác nhau. Khả năng " "lọc được cung cấp thông qua DjangoFilterBackend." -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -3128,7 +3160,7 @@ msgstr "" "của các danh mục. Chế độ xem này cũng áp dụng các quyền truy cập để đảm bảo " "chỉ những người dùng được ủy quyền mới có thể truy cập vào dữ liệu cụ thể." -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -3140,7 +3172,7 @@ msgstr "" "thương hiệu. Nó sử dụng khung ViewSet của Django để đơn giản hóa việc triển " "khai các điểm cuối API cho các đối tượng thương hiệu." -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3158,7 +3190,7 @@ msgstr "" "thức để lấy thông tin chi tiết về sản phẩm, áp dụng quyền truy cập và truy " "cập phản hồi liên quan đến sản phẩm." -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3173,7 +3205,7 @@ msgstr "" "khác nhau. Mục đích của lớp này là cung cấp truy cập thuận tiện đến các tài " "nguyên liên quan đến Nhà cung cấp thông qua khung làm việc Django REST." -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3189,7 +3221,7 @@ msgstr "" "với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu." -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3208,7 +3240,7 @@ msgstr "" "serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và " "áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng." -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3223,11 +3255,11 @@ msgstr "" "hành động được yêu cầu. Ngoài ra, nó cung cấp một hành động chi tiết để xử " "lý phản hồi cho các thực thể OrderProduct." -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "Quản lý các hoạt động liên quan đến hình ảnh sản phẩm trong ứng dụng." -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3235,15 +3267,15 @@ msgstr "" "Quản lý việc truy xuất và xử lý các thực thể PromoCode thông qua các hành " "động API khác nhau." -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "Đại diện cho một bộ xem để quản lý các chương trình khuyến mãi." -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "Quản lý các hoạt động liên quan đến dữ liệu kho trong hệ thống." -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3262,7 +3294,7 @@ msgstr "" " bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình " "trừ khi được cấp quyền rõ ràng." -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3276,12 +3308,12 @@ msgstr "" "chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và " "xử lý quyền truy cập dựa trên bối cảnh yêu cầu." -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6de3640fd4829062495f0c56f57e8e687c28121b GIT binary patch literal 79025 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 ZF-^Hi@{(JjXkn<;O3XgH_+N&5<;?&9 literal 0 HcmV?d00001 diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po similarity index 72% rename from core/locale/zh_Hans/LC_MESSAGES/django.po rename to engine/core/locale/zh_Hans/LC_MESSAGES/django.po index b1fc6886..432594bb 100644 --- a/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,176 +13,180 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/abstract.py:12 +#: engine/core/abstract.py:12 msgid "unique id" msgstr "唯一 ID" -#: core/abstract.py:13 +#: engine/core/abstract.py:13 msgid "unique id is used to surely identify any database object" msgstr "唯一 ID 用于确定识别任何数据库对象" -#: core/abstract.py:20 +#: engine/core/abstract.py:20 msgid "is active" msgstr "处于活动状态" -#: core/abstract.py:21 +#: engine/core/abstract.py:21 msgid "" "if set to false, this object can't be seen by users without needed " "permission" msgstr "如果设置为 false,则没有必要权限的用户无法查看此对象" -#: core/abstract.py:23 core/choices.py:18 +#: engine/core/abstract.py:23 engine/core/choices.py:18 msgid "created" msgstr "创建" -#: core/abstract.py:23 +#: engine/core/abstract.py:23 msgid "when the object first appeared on the database" msgstr "对象首次出现在数据库中的时间" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "modified" msgstr "改装" -#: core/abstract.py:24 +#: engine/core/abstract.py:24 msgid "when the object was last modified" msgstr "对象最后一次编辑的时间" -#: core/admin.py:68 +#: engine/core/admin.py:68 msgid "translations" msgstr "翻译" -#: core/admin.py:72 +#: engine/core/admin.py:72 msgid "general" msgstr "一般情况" -#: core/admin.py:74 +#: engine/core/admin.py:74 msgid "relations" msgstr "关系" -#: core/admin.py:76 +#: engine/core/admin.py:76 msgid "additional info" msgstr "其他信息" -#: core/admin.py:94 +#: engine/core/admin.py:94 msgid "metadata" msgstr "元数据" -#: core/admin.py:101 +#: engine/core/admin.py:101 msgid "timestamps" msgstr "时间戳" -#: core/admin.py:116 +#: engine/core/admin.py:116 #, python-format msgid "activate selected %(verbose_name_plural)s" msgstr "激活选定的 %(verbose_name_plural)s" -#: core/admin.py:121 +#: engine/core/admin.py:121 msgid "selected items have been activated." msgstr "所选项目已激活!" -#: core/admin.py:127 +#: engine/core/admin.py:127 #, python-format msgid "deactivate selected %(verbose_name_plural)s" msgstr "停用选定的 %(verbose_name_plural)s" -#: core/admin.py:132 +#: engine/core/admin.py:132 msgid "selected items have been deactivated." msgstr "选定项目已停用!" -#: core/admin.py:144 core/graphene/object_types.py:582 -#: core/graphene/object_types.py:589 core/models.py:783 core/models.py:791 +#: engine/core/admin.py:144 engine/core/graphene/object_types.py:586 +#: engine/core/graphene/object_types.py:593 engine/core/models.py:794 +#: engine/core/models.py:802 msgid "attribute value" msgstr "属性值" -#: core/admin.py:145 core/graphene/object_types.py:75 core/models.py:792 +#: engine/core/admin.py:145 engine/core/graphene/object_types.py:75 +#: engine/core/models.py:803 msgid "attribute values" msgstr "属性值" -#: core/admin.py:156 +#: engine/core/admin.py:156 msgid "image" msgstr "图片" -#: core/admin.py:157 core/graphene/object_types.py:474 +#: engine/core/admin.py:157 engine/core/graphene/object_types.py:474 msgid "images" msgstr "图片" -#: core/admin.py:168 core/models.py:559 +#: engine/core/admin.py:169 engine/core/models.py:559 msgid "stock" msgstr "库存" -#: core/admin.py:169 core/graphene/object_types.py:636 +#: engine/core/admin.py:170 engine/core/graphene/object_types.py:640 msgid "stocks" msgstr "股票" -#: core/admin.py:182 core/models.py:1744 +#: engine/core/admin.py:183 engine/core/models.py:1761 msgid "order product" msgstr "订购产品" -#: core/admin.py:183 core/graphene/object_types.py:389 core/models.py:1745 +#: engine/core/admin.py:184 engine/core/graphene/object_types.py:389 +#: engine/core/models.py:1762 msgid "order products" msgstr "订购产品" -#: core/admin.py:196 core/admin.py:197 +#: engine/core/admin.py:197 engine/core/admin.py:198 msgid "children" msgstr "儿童" -#: core/admin.py:965 +#: engine/core/admin.py:969 msgid "Config" msgstr "配置" -#: core/apps.py:8 +#: engine/core/apps.py:8 msgid "core" msgstr "核心" -#: core/choices.py:4 core/choices.py:20 +#: engine/core/choices.py:4 engine/core/choices.py:20 msgid "finished" msgstr "完成" -#: core/choices.py:5 core/choices.py:19 +#: engine/core/choices.py:5 engine/core/choices.py:19 msgid "delivering" msgstr "交付" -#: core/choices.py:6 +#: engine/core/choices.py:6 msgid "delivered" msgstr "已交付" -#: core/choices.py:7 +#: engine/core/choices.py:7 msgid "canceled" msgstr "已取消" -#: core/choices.py:8 core/choices.py:16 core/choices.py:24 +#: engine/core/choices.py:8 engine/core/choices.py:16 +#: engine/core/choices.py:24 msgid "failed" msgstr "失败" -#: core/choices.py:9 core/choices.py:15 +#: engine/core/choices.py:9 engine/core/choices.py:15 msgid "pending" msgstr "待定" -#: core/choices.py:10 +#: engine/core/choices.py:10 msgid "accepted" msgstr "已接受" -#: core/choices.py:11 +#: engine/core/choices.py:11 msgid "money returned" msgstr "退还的款项" -#: core/choices.py:17 +#: engine/core/choices.py:17 msgid "payment" msgstr "付款方式" -#: core/choices.py:21 +#: engine/core/choices.py:21 msgid "momental" msgstr "时刻" -#: core/choices.py:24 +#: engine/core/choices.py:24 msgid "successful" msgstr "成功" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 +#: engine/core/docs/drf/views.py:17 engine/core/graphene/mutations.py:38 msgid "cache I/O" msgstr "缓存输入/输出" -#: core/docs/drf/views.py:19 +#: engine/core/docs/drf/views.py:19 msgid "" "apply only a key to read permitted data from cache.\n" "apply key, data and timeout with authentication to write data to cache." @@ -190,157 +194,158 @@ msgstr "" "仅使用密钥从缓存中读取允许的数据。\n" "应用密钥、数据和带验证的超时,将数据写入缓存。" -#: core/docs/drf/views.py:32 +#: engine/core/docs/drf/views.py:32 msgid "get a list of supported languages" msgstr "获取支持的语言列表" -#: core/docs/drf/views.py:41 +#: engine/core/docs/drf/views.py:41 msgid "get application's exposable parameters" msgstr "获取应用程序的可公开参数" -#: core/docs/drf/views.py:48 +#: engine/core/docs/drf/views.py:48 msgid "send a message to the support team" msgstr "向支持团队发送信息" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 +#: engine/core/docs/drf/views.py:59 engine/core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "请求 CORSed URL。只允许使用 https。" -#: core/docs/drf/views.py:85 +#: engine/core/docs/drf/views.py:85 msgid "global search endpoint to query across project's tables" msgstr "全局搜索端点可跨项目表格进行查询" -#: core/docs/drf/views.py:91 +#: engine/core/docs/drf/views.py:91 msgid "purchase an order as a business" msgstr "以企业身份购买订单" -#: core/docs/drf/views.py:98 +#: engine/core/docs/drf/views.py:98 msgid "" "purchase an order as a business, using the provided `products` with " "`product_uuid` and `attributes`." msgstr "使用提供的带有 `product_uuid` 和 `attributes` 的 `products` 作为企业购买订单。" -#: core/docs/drf/viewsets.py:58 +#: engine/core/docs/drf/viewsets.py:58 msgid "list all attribute groups (simple view)" msgstr "列出所有属性组(简单视图)" -#: core/docs/drf/viewsets.py:62 +#: engine/core/docs/drf/viewsets.py:62 msgid "retrieve a single attribute group (detailed view)" msgstr "检索单个属性组(详细视图)" -#: core/docs/drf/viewsets.py:66 +#: engine/core/docs/drf/viewsets.py:66 msgid "create an attribute group" msgstr "创建属性组" -#: core/docs/drf/viewsets.py:70 +#: engine/core/docs/drf/viewsets.py:70 msgid "delete an attribute group" msgstr "删除属性组" -#: core/docs/drf/viewsets.py:74 +#: engine/core/docs/drf/viewsets.py:74 msgid "rewrite an existing attribute group saving non-editables" msgstr "重写保存不可编辑的现有属性组" -#: core/docs/drf/viewsets.py:78 +#: engine/core/docs/drf/viewsets.py:78 msgid "" "rewrite some fields of an existing attribute group saving non-editables" msgstr "重写现有属性组的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:85 +#: engine/core/docs/drf/viewsets.py:85 msgid "list all attributes (simple view)" msgstr "列出所有属性(简单视图)" -#: core/docs/drf/viewsets.py:89 +#: engine/core/docs/drf/viewsets.py:89 msgid "retrieve a single attribute (detailed view)" msgstr "检索单个属性(详细视图)" -#: core/docs/drf/viewsets.py:93 +#: engine/core/docs/drf/viewsets.py:93 msgid "create an attribute" msgstr "创建属性" -#: core/docs/drf/viewsets.py:97 +#: engine/core/docs/drf/viewsets.py:97 msgid "delete an attribute" msgstr "删除属性" -#: core/docs/drf/viewsets.py:101 +#: engine/core/docs/drf/viewsets.py:101 msgid "rewrite an existing attribute saving non-editables" msgstr "重写现有属性,保存不可编辑属性" -#: core/docs/drf/viewsets.py:105 +#: engine/core/docs/drf/viewsets.py:105 msgid "rewrite some fields of an existing attribute saving non-editables" msgstr "重写现有属性的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:112 +#: engine/core/docs/drf/viewsets.py:112 msgid "list all attribute values (simple view)" msgstr "列出所有属性值(简单视图)" -#: core/docs/drf/viewsets.py:116 +#: engine/core/docs/drf/viewsets.py:116 msgid "retrieve a single attribute value (detailed view)" msgstr "读取单个属性值(详细视图)" -#: core/docs/drf/viewsets.py:120 +#: engine/core/docs/drf/viewsets.py:120 msgid "create an attribute value" msgstr "创建属性值" -#: core/docs/drf/viewsets.py:124 +#: engine/core/docs/drf/viewsets.py:124 msgid "delete an attribute value" msgstr "删除属性值" -#: core/docs/drf/viewsets.py:128 +#: engine/core/docs/drf/viewsets.py:128 msgid "rewrite an existing attribute value saving non-editables" msgstr "重写现有属性值,保存不可编辑属性" -#: core/docs/drf/viewsets.py:132 +#: engine/core/docs/drf/viewsets.py:132 msgid "" "rewrite some fields of an existing attribute value saving non-editables" msgstr "重写现有属性值的某些字段,保存不可编辑的属性值" -#: core/docs/drf/viewsets.py:139 core/docs/drf/viewsets.py:140 +#: engine/core/docs/drf/viewsets.py:139 engine/core/docs/drf/viewsets.py:140 msgid "list all categories (simple view)" msgstr "列出所有类别(简单视图)" -#: core/docs/drf/viewsets.py:144 core/docs/drf/viewsets.py:145 +#: engine/core/docs/drf/viewsets.py:144 engine/core/docs/drf/viewsets.py:145 msgid "retrieve a single category (detailed view)" msgstr "检索单个类别(详细视图)" -#: core/docs/drf/viewsets.py:149 core/docs/drf/viewsets.py:150 -msgid "create a category" -msgstr "创建类别" - -#: core/docs/drf/viewsets.py:154 core/docs/drf/viewsets.py:155 -msgid "delete a category" -msgstr "删除类别" - -#: core/docs/drf/viewsets.py:159 core/docs/drf/viewsets.py:160 -msgid "rewrite an existing category saving non-editables" -msgstr "重写现有类别,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:164 core/docs/drf/viewsets.py:165 -msgid "rewrite some fields of an existing category saving non-editables" -msgstr "重写现有类别的某些字段,保存不可编辑内容" - -#: core/docs/drf/viewsets.py:169 core/docs/drf/viewsets.py:501 -#: core/graphene/object_types.py:117 core/graphene/object_types.py:207 -#: core/graphene/object_types.py:482 -msgid "SEO Meta snapshot" -msgstr "搜索引擎优化元快照" - -#: core/docs/drf/viewsets.py:170 -msgid "returns a snapshot of the category's SEO meta data" -msgstr "返回类别的搜索引擎优化元数据快照" - -#: core/docs/drf/viewsets.py:175 +#: engine/core/docs/drf/viewsets.py:150 engine/core/docs/drf/viewsets.py:183 msgid "Category UUID or slug" msgstr "类别 UUID 或标签" -#: core/docs/drf/viewsets.py:188 +#: engine/core/docs/drf/viewsets.py:157 engine/core/docs/drf/viewsets.py:158 +msgid "create a category" +msgstr "创建类别" + +#: engine/core/docs/drf/viewsets.py:162 engine/core/docs/drf/viewsets.py:163 +msgid "delete a category" +msgstr "删除类别" + +#: engine/core/docs/drf/viewsets.py:167 engine/core/docs/drf/viewsets.py:168 +msgid "rewrite an existing category saving non-editables" +msgstr "重写现有类别,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:172 engine/core/docs/drf/viewsets.py:173 +msgid "rewrite some fields of an existing category saving non-editables" +msgstr "重写现有类别的某些字段,保存不可编辑内容" + +#: engine/core/docs/drf/viewsets.py:177 engine/core/docs/drf/viewsets.py:517 +#: engine/core/graphene/object_types.py:117 +#: engine/core/graphene/object_types.py:207 +#: engine/core/graphene/object_types.py:482 +msgid "SEO Meta snapshot" +msgstr "搜索引擎优化元快照" + +#: engine/core/docs/drf/viewsets.py:178 +msgid "returns a snapshot of the category's SEO meta data" +msgstr "返回类别的搜索引擎优化元数据快照" + +#: engine/core/docs/drf/viewsets.py:196 msgid "list all orders (simple view)" msgstr "列出所有类别(简单视图)" -#: core/docs/drf/viewsets.py:189 +#: engine/core/docs/drf/viewsets.py:197 msgid "for non-staff users, only their own orders are returned." msgstr "对于非工作人员用户,只有他们自己的订单才会被退回。" -#: core/docs/drf/viewsets.py:195 +#: engine/core/docs/drf/viewsets.py:203 msgid "" "Case-insensitive substring search across human_readable_id, " "order_products.product.name, and order_products.product.partnumber" @@ -348,35 +353,35 @@ msgstr "" "在 human_readable_id、order_products.product.name 和 " "order_products.product.partnumber 中进行不区分大小写的子串搜索" -#: core/docs/drf/viewsets.py:202 +#: engine/core/docs/drf/viewsets.py:210 msgid "Filter orders with buy_time >= this ISO 8601 datetime" msgstr "过滤买入时间 >= 此 ISO 8601 日期的订单" -#: core/docs/drf/viewsets.py:207 +#: engine/core/docs/drf/viewsets.py:215 msgid "Filter orders with buy_time <= this ISO 8601 datetime" msgstr "过滤买入时间 <= 此 ISO 8601 日期的订单" -#: core/docs/drf/viewsets.py:212 +#: engine/core/docs/drf/viewsets.py:220 msgid "Filter by exact order UUID" msgstr "按准确订单 UUID 筛选" -#: core/docs/drf/viewsets.py:217 +#: engine/core/docs/drf/viewsets.py:225 msgid "Filter by exact human-readable order ID" msgstr "根据准确的人工可读订单 ID 进行筛选" -#: core/docs/drf/viewsets.py:222 +#: engine/core/docs/drf/viewsets.py:230 msgid "Filter by user's email (case-insensitive exact match)" msgstr "按用户电子邮件过滤(不区分大小写精确匹配)" -#: core/docs/drf/viewsets.py:227 +#: engine/core/docs/drf/viewsets.py:235 msgid "Filter by user's UUID" msgstr "按用户的 UUID 筛选" -#: core/docs/drf/viewsets.py:232 +#: engine/core/docs/drf/viewsets.py:240 msgid "Filter by order status (case-insensitive substring match)" msgstr "按订单状态筛选(不区分大小写的子串匹配)" -#: core/docs/drf/viewsets.py:238 +#: engine/core/docs/drf/viewsets.py:246 msgid "" "Order by one of: uuid, human_readable_id, user_email, user, status, created," " modified, buy_time, random. Prefix with '-' for descending (e.g. " @@ -384,155 +389,159 @@ msgid "" msgstr "" "按以下一项排序:uuid、human_readable_id、user_email、user、status、created、modified、buy_time、random。前缀\"-\"表示降序(例如\"-buy_time\")。" -#: core/docs/drf/viewsets.py:247 +#: engine/core/docs/drf/viewsets.py:255 msgid "retrieve a single order (detailed view)" msgstr "检索单个类别(详细视图)" -#: core/docs/drf/viewsets.py:251 +#: engine/core/docs/drf/viewsets.py:260 +msgid "Order UUID or human-readable id" +msgstr "订单 UUID 或人类可读 ID" + +#: engine/core/docs/drf/viewsets.py:267 msgid "create an order" msgstr "创建属性" -#: core/docs/drf/viewsets.py:252 +#: engine/core/docs/drf/viewsets.py:268 msgid "doesn't work for non-staff users." msgstr "不适用于非工作人员用户。" -#: core/docs/drf/viewsets.py:256 +#: engine/core/docs/drf/viewsets.py:272 msgid "delete an order" msgstr "删除属性" -#: core/docs/drf/viewsets.py:260 +#: engine/core/docs/drf/viewsets.py:276 msgid "rewrite an existing order saving non-editables" msgstr "重写现有类别,保存不可编辑内容" -#: core/docs/drf/viewsets.py:264 +#: engine/core/docs/drf/viewsets.py:280 msgid "rewrite some fields of an existing order saving non-editables" msgstr "重写现有类别的某些字段,保存不可编辑内容" -#: core/docs/drf/viewsets.py:268 +#: engine/core/docs/drf/viewsets.py:284 msgid "purchase an order" msgstr "订购时的购买价格" -#: core/docs/drf/viewsets.py:270 +#: engine/core/docs/drf/viewsets.py:286 msgid "" "finalizes the order purchase. if `force_balance` is used, the purchase is " "completed using the user's balance; if `force_payment` is used, a " "transaction is initiated." msgstr "完成订单购买。如果使用 \"force_balance\",则使用用户的余额完成购买;如果使用 \"force_payment\",则启动交易。" -#: core/docs/drf/viewsets.py:282 core/graphene/mutations.py:335 +#: engine/core/docs/drf/viewsets.py:298 engine/core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "无需创建账户即可购买订单" -#: core/docs/drf/viewsets.py:283 +#: engine/core/docs/drf/viewsets.py:299 msgid "finalizes the order purchase for a non-registered user." msgstr "完成非注册用户的订单购买。" -#: core/docs/drf/viewsets.py:291 +#: engine/core/docs/drf/viewsets.py:307 msgid "add product to order" msgstr "在订单中添加产品" -#: core/docs/drf/viewsets.py:292 +#: engine/core/docs/drf/viewsets.py:308 msgid "" "adds a product to an order using the provided `product_uuid` and " "`attributes`." msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品添加到订单中。" -#: core/docs/drf/viewsets.py:297 +#: engine/core/docs/drf/viewsets.py:313 msgid "add a list of products to order, quantities will not count" msgstr "添加要订购的产品列表,不计算数量" -#: core/docs/drf/viewsets.py:298 +#: engine/core/docs/drf/viewsets.py:314 msgid "" "adds a list of products to an order using the provided `product_uuid` and " "`attributes`." msgstr "使用提供的 `product_uuid` 和 `attributes` 将产品列表添加到订单中。" -#: core/docs/drf/viewsets.py:303 +#: engine/core/docs/drf/viewsets.py:319 msgid "remove product from order" msgstr "从订单中删除产品" -#: core/docs/drf/viewsets.py:304 +#: engine/core/docs/drf/viewsets.py:320 msgid "" "removes a product from an order using the provided `product_uuid` and " "`attributes`." msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品。" -#: core/docs/drf/viewsets.py:309 +#: engine/core/docs/drf/viewsets.py:325 msgid "remove product from order, quantities will not count" msgstr "从订单中删除产品,不计算数量" -#: core/docs/drf/viewsets.py:310 +#: engine/core/docs/drf/viewsets.py:326 msgid "" "removes a list of products from an order using the provided `product_uuid` " "and `attributes`" msgstr "使用提供的 `product_uuid` 和 `attributes` 从订单中删除产品列表。" -#: core/docs/drf/viewsets.py:318 +#: engine/core/docs/drf/viewsets.py:334 msgid "list all wishlists (simple view)" msgstr "列出所有属性(简单视图)" -#: core/docs/drf/viewsets.py:319 +#: engine/core/docs/drf/viewsets.py:335 msgid "for non-staff users, only their own wishlists are returned." msgstr "对于非工作人员用户,只返回他们自己的愿望清单。" -#: core/docs/drf/viewsets.py:323 +#: engine/core/docs/drf/viewsets.py:339 msgid "retrieve a single wishlist (detailed view)" msgstr "检索单个属性(详细视图)" -#: core/docs/drf/viewsets.py:327 +#: engine/core/docs/drf/viewsets.py:343 msgid "create an wishlist" msgstr "创建属性" -#: core/docs/drf/viewsets.py:328 +#: engine/core/docs/drf/viewsets.py:344 msgid "Doesn't work for non-staff users." msgstr "不适用于非工作人员用户。" -#: core/docs/drf/viewsets.py:332 +#: engine/core/docs/drf/viewsets.py:348 msgid "delete an wishlist" msgstr "删除属性" -#: core/docs/drf/viewsets.py:336 +#: engine/core/docs/drf/viewsets.py:352 msgid "rewrite an existing wishlist saving non-editables" msgstr "重写现有属性,保存不可编辑属性" -#: core/docs/drf/viewsets.py:340 +#: engine/core/docs/drf/viewsets.py:356 msgid "rewrite some fields of an existing wishlist saving non-editables" msgstr "重写现有属性的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:344 +#: engine/core/docs/drf/viewsets.py:360 msgid "add product to wishlist" msgstr "在订单中添加产品" -#: core/docs/drf/viewsets.py:345 +#: engine/core/docs/drf/viewsets.py:361 msgid "adds a product to an wishlist using the provided `product_uuid`" msgstr "使用提供的 `product_uuid` 将产品添加到愿望清单中" -#: core/docs/drf/viewsets.py:350 +#: engine/core/docs/drf/viewsets.py:366 msgid "remove product from wishlist" msgstr "从愿望清单中删除产品" -#: core/docs/drf/viewsets.py:351 +#: engine/core/docs/drf/viewsets.py:367 msgid "removes a product from an wishlist using the provided `product_uuid`" msgstr "使用提供的 `product_uuid` 从愿望清单中删除产品" -#: core/docs/drf/viewsets.py:356 +#: engine/core/docs/drf/viewsets.py:372 msgid "add many products to wishlist" msgstr "将许多产品添加到愿望清单" -#: core/docs/drf/viewsets.py:357 +#: engine/core/docs/drf/viewsets.py:373 msgid "adds many products to an wishlist using the provided `product_uuids`" msgstr "使用提供的 `product_uuids` 将许多产品添加到愿望清单中" -#: core/docs/drf/viewsets.py:362 +#: engine/core/docs/drf/viewsets.py:378 msgid "remove many products from wishlist" msgstr "从订单中删除产品" -#: core/docs/drf/viewsets.py:363 +#: engine/core/docs/drf/viewsets.py:379 msgid "" "removes many products from an wishlist using the provided `product_uuids`" msgstr "使用提供的 `product_uuids` 从愿望清单中删除多个产品" -#: core/docs/drf/viewsets.py:370 +#: engine/core/docs/drf/viewsets.py:386 msgid "" "Filter by one or more attribute name/value pairs. \n" "• **Syntax**: `attr_name=method-value[;attr2=method2-value2]…` \n" @@ -552,15 +561,15 @@ msgstr "" "color=exact-red`、`size=gt-10`、`features=in-[\"wifi\"、\"bluetooth\"]`、\n" "`b64-description=icontains-aGVhdC1jb2xk`." -#: core/docs/drf/viewsets.py:386 core/docs/drf/viewsets.py:387 +#: engine/core/docs/drf/viewsets.py:402 engine/core/docs/drf/viewsets.py:403 msgid "list all products (simple view)" msgstr "列出所有产品(简单视图)" -#: core/docs/drf/viewsets.py:392 +#: engine/core/docs/drf/viewsets.py:408 msgid "(exact) Product UUID" msgstr "(产品 UUID" -#: core/docs/drf/viewsets.py:399 +#: engine/core/docs/drf/viewsets.py:415 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -568,857 +577,879 @@ msgstr "" "用逗号分隔的要排序的字段列表。前缀为 `-` 表示降序。 \n" "**允许:** uuid、评分、名称、标签、创建、修改、价格、随机" -#: core/docs/drf/viewsets.py:413 core/docs/drf/viewsets.py:414 +#: engine/core/docs/drf/viewsets.py:429 engine/core/docs/drf/viewsets.py:430 msgid "retrieve a single product (detailed view)" msgstr "检索单个产品(详细视图)" -#: core/docs/drf/viewsets.py:419 core/docs/drf/viewsets.py:443 -#: core/docs/drf/viewsets.py:459 core/docs/drf/viewsets.py:475 -#: core/docs/drf/viewsets.py:491 core/docs/drf/viewsets.py:507 +#: engine/core/docs/drf/viewsets.py:435 engine/core/docs/drf/viewsets.py:459 +#: engine/core/docs/drf/viewsets.py:475 engine/core/docs/drf/viewsets.py:491 +#: engine/core/docs/drf/viewsets.py:507 engine/core/docs/drf/viewsets.py:523 msgid "Product UUID or slug" msgstr "产品 UUID 或 Slug" -#: core/docs/drf/viewsets.py:429 core/docs/drf/viewsets.py:430 +#: engine/core/docs/drf/viewsets.py:445 engine/core/docs/drf/viewsets.py:446 msgid "create a product" msgstr "创建产品" -#: core/docs/drf/viewsets.py:437 core/docs/drf/viewsets.py:438 +#: engine/core/docs/drf/viewsets.py:453 engine/core/docs/drf/viewsets.py:454 msgid "rewrite an existing product, preserving non-editable fields" msgstr "重写现有产品,保留不可编辑字段" -#: core/docs/drf/viewsets.py:453 core/docs/drf/viewsets.py:454 +#: engine/core/docs/drf/viewsets.py:469 engine/core/docs/drf/viewsets.py:470 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "更新现有产品的某些字段,保留不可编辑的字段" -#: core/docs/drf/viewsets.py:469 core/docs/drf/viewsets.py:470 +#: engine/core/docs/drf/viewsets.py:485 engine/core/docs/drf/viewsets.py:486 msgid "delete a product" msgstr "删除产品" -#: core/docs/drf/viewsets.py:485 core/docs/drf/viewsets.py:486 +#: engine/core/docs/drf/viewsets.py:501 engine/core/docs/drf/viewsets.py:502 msgid "lists all permitted feedbacks for a product" msgstr "列出产品的所有允许反馈" -#: core/docs/drf/viewsets.py:502 +#: engine/core/docs/drf/viewsets.py:518 msgid "returns a snapshot of the product's SEO meta data" msgstr "返回产品的搜索引擎优化元数据快照" -#: core/docs/drf/viewsets.py:520 +#: engine/core/docs/drf/viewsets.py:536 msgid "list all addresses" msgstr "列出所有地址" -#: core/docs/drf/viewsets.py:527 +#: engine/core/docs/drf/viewsets.py:543 msgid "retrieve a single address" msgstr "检索单个地址" -#: core/docs/drf/viewsets.py:534 +#: engine/core/docs/drf/viewsets.py:550 msgid "create a new address" msgstr "创建新地址" -#: core/docs/drf/viewsets.py:542 +#: engine/core/docs/drf/viewsets.py:558 msgid "delete an address" msgstr "删除地址" -#: core/docs/drf/viewsets.py:549 +#: engine/core/docs/drf/viewsets.py:565 msgid "update an entire address" msgstr "更新整个地址" -#: core/docs/drf/viewsets.py:557 +#: engine/core/docs/drf/viewsets.py:573 msgid "partially update an address" msgstr "部分更新地址" -#: core/docs/drf/viewsets.py:565 +#: engine/core/docs/drf/viewsets.py:581 msgid "autocomplete address suggestions" msgstr "自动完成地址输入" -#: core/docs/drf/viewsets.py:570 +#: engine/core/docs/drf/viewsets.py:586 msgid "raw data query string, please append with data from geo-IP endpoint" msgstr "原始数据查询字符串,请附加来自地理 IP 端点的数据" -#: core/docs/drf/viewsets.py:576 +#: engine/core/docs/drf/viewsets.py:592 msgid "limit the results amount, 1 < limit < 10, default: 5" msgstr "限制结果数量,1 < limit < 10,默认:5" -#: core/docs/drf/viewsets.py:589 +#: engine/core/docs/drf/viewsets.py:605 msgid "list all feedbacks (simple view)" msgstr "列出所有反馈(简单视图)" -#: core/docs/drf/viewsets.py:593 +#: engine/core/docs/drf/viewsets.py:609 msgid "retrieve a single feedback (detailed view)" msgstr "检索单个反馈(详细视图)" -#: core/docs/drf/viewsets.py:597 +#: engine/core/docs/drf/viewsets.py:613 msgid "create a feedback" msgstr "创建反馈" -#: core/docs/drf/viewsets.py:601 +#: engine/core/docs/drf/viewsets.py:617 msgid "delete a feedback" msgstr "删除反馈" -#: core/docs/drf/viewsets.py:605 +#: engine/core/docs/drf/viewsets.py:621 msgid "rewrite an existing feedback saving non-editables" msgstr "重写现有的反馈,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:609 +#: engine/core/docs/drf/viewsets.py:625 msgid "rewrite some fields of an existing feedback saving non-editables" msgstr "重写现有反馈的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:616 +#: engine/core/docs/drf/viewsets.py:632 msgid "list all order–product relations (simple view)" msgstr "列出所有订单-产品关系(简单视图)" -#: core/docs/drf/viewsets.py:623 +#: engine/core/docs/drf/viewsets.py:639 msgid "retrieve a single order–product relation (detailed view)" msgstr "检索单一订单-产品关系(详细视图)" -#: core/docs/drf/viewsets.py:630 +#: engine/core/docs/drf/viewsets.py:646 msgid "create a new order–product relation" msgstr "创建新的订单-产品关系" -#: core/docs/drf/viewsets.py:637 +#: engine/core/docs/drf/viewsets.py:653 msgid "replace an existing order–product relation" msgstr "替换现有的订单-产品关系" -#: core/docs/drf/viewsets.py:644 +#: engine/core/docs/drf/viewsets.py:660 msgid "partially update an existing order–product relation" msgstr "部分更新现有的订单-产品关系" -#: core/docs/drf/viewsets.py:651 +#: engine/core/docs/drf/viewsets.py:667 msgid "delete an order–product relation" msgstr "删除订单-产品关系" -#: core/docs/drf/viewsets.py:658 +#: engine/core/docs/drf/viewsets.py:674 msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: core/docs/drf/viewsets.py:672 +#: engine/core/docs/drf/viewsets.py:688 msgid "list all brands (simple view)" msgstr "列出所有品牌(简单视图)" -#: core/docs/drf/viewsets.py:676 +#: engine/core/docs/drf/viewsets.py:692 msgid "retrieve a single brand (detailed view)" msgstr "检索单一品牌(详细视图)" -#: core/docs/drf/viewsets.py:680 +#: engine/core/docs/drf/viewsets.py:697 engine/core/docs/drf/viewsets.py:725 +msgid "Brand UUID or slug" +msgstr "品牌 UUID 或标签" + +#: engine/core/docs/drf/viewsets.py:704 msgid "create a brand" msgstr "创建品牌" -#: core/docs/drf/viewsets.py:684 +#: engine/core/docs/drf/viewsets.py:708 msgid "delete a brand" msgstr "删除品牌" -#: core/docs/drf/viewsets.py:688 +#: engine/core/docs/drf/viewsets.py:712 msgid "rewrite an existing brand saving non-editables" msgstr "重写现有品牌,节省非编辑材料" -#: core/docs/drf/viewsets.py:692 +#: engine/core/docs/drf/viewsets.py:716 msgid "rewrite some fields of an existing brand saving non-editables" msgstr "重写现有品牌的某些字段,保存不可编辑字段" -#: core/docs/drf/viewsets.py:696 +#: engine/core/docs/drf/viewsets.py:720 msgid "SEO Meta snapshot for brand" msgstr "品牌的搜索引擎优化元快照" -#: core/docs/drf/viewsets.py:703 +#: engine/core/docs/drf/viewsets.py:735 msgid "list all vendors (simple view)" msgstr "列出所有供应商(简单视图)" -#: core/docs/drf/viewsets.py:707 +#: engine/core/docs/drf/viewsets.py:739 msgid "retrieve a single vendor (detailed view)" msgstr "检索单个供应商(详细视图)" -#: core/docs/drf/viewsets.py:711 +#: engine/core/docs/drf/viewsets.py:743 msgid "create a vendor" msgstr "创建供应商" -#: core/docs/drf/viewsets.py:715 +#: engine/core/docs/drf/viewsets.py:747 msgid "delete a vendor" msgstr "删除供应商" -#: core/docs/drf/viewsets.py:719 +#: engine/core/docs/drf/viewsets.py:751 msgid "rewrite an existing vendor saving non-editables" msgstr "重写现有供应商,保存不可编辑内容" -#: core/docs/drf/viewsets.py:723 +#: engine/core/docs/drf/viewsets.py:755 msgid "rewrite some fields of an existing vendor saving non-editables" msgstr "重写现有供应商的某些字段,保存不可编辑字段" -#: core/docs/drf/viewsets.py:730 +#: engine/core/docs/drf/viewsets.py:762 msgid "list all product images (simple view)" msgstr "列出所有产品图片(简单视图)" -#: core/docs/drf/viewsets.py:734 +#: engine/core/docs/drf/viewsets.py:766 msgid "retrieve a single product image (detailed view)" msgstr "检索单个产品图片(详细视图)" -#: core/docs/drf/viewsets.py:738 +#: engine/core/docs/drf/viewsets.py:770 msgid "create a product image" msgstr "创建产品形象" -#: core/docs/drf/viewsets.py:742 +#: engine/core/docs/drf/viewsets.py:774 msgid "delete a product image" msgstr "删除产品图像" -#: core/docs/drf/viewsets.py:746 +#: engine/core/docs/drf/viewsets.py:778 msgid "rewrite an existing product image saving non-editables" msgstr "重写现有产品图像,保存不可编辑图像" -#: core/docs/drf/viewsets.py:750 +#: engine/core/docs/drf/viewsets.py:782 msgid "rewrite some fields of an existing product image saving non-editables" msgstr "重写现有产品图像的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:757 +#: engine/core/docs/drf/viewsets.py:789 msgid "list all promo codes (simple view)" msgstr "列出所有促销代码(简单视图)" -#: core/docs/drf/viewsets.py:761 +#: engine/core/docs/drf/viewsets.py:793 msgid "retrieve a single promo code (detailed view)" msgstr "检索单个促销代码(详细视图)" -#: core/docs/drf/viewsets.py:765 +#: engine/core/docs/drf/viewsets.py:797 msgid "create a promo code" msgstr "创建促销代码" -#: core/docs/drf/viewsets.py:769 +#: engine/core/docs/drf/viewsets.py:801 msgid "delete a promo code" msgstr "删除促销代码" -#: core/docs/drf/viewsets.py:773 +#: engine/core/docs/drf/viewsets.py:805 msgid "rewrite an existing promo code saving non-editables" msgstr "重写现有促销代码,保存不可编辑的代码" -#: core/docs/drf/viewsets.py:777 +#: engine/core/docs/drf/viewsets.py:809 msgid "rewrite some fields of an existing promo code saving non-editables" msgstr "重写现有促销代码的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:784 +#: engine/core/docs/drf/viewsets.py:816 msgid "list all promotions (simple view)" msgstr "列出所有促销活动(简单视图)" -#: core/docs/drf/viewsets.py:788 +#: engine/core/docs/drf/viewsets.py:820 msgid "retrieve a single promotion (detailed view)" msgstr "检索单个促销活动(详细视图)" -#: core/docs/drf/viewsets.py:792 +#: engine/core/docs/drf/viewsets.py:824 msgid "create a promotion" msgstr "创建促销活动" -#: core/docs/drf/viewsets.py:796 +#: engine/core/docs/drf/viewsets.py:828 msgid "delete a promotion" msgstr "删除促销" -#: core/docs/drf/viewsets.py:800 +#: engine/core/docs/drf/viewsets.py:832 msgid "rewrite an existing promotion saving non-editables" msgstr "重写现有促销活动,保存不可编辑内容" -#: core/docs/drf/viewsets.py:804 +#: engine/core/docs/drf/viewsets.py:836 msgid "rewrite some fields of an existing promotion saving non-editables" msgstr "重写现有促销活动的某些字段,保存不可编辑字段" -#: core/docs/drf/viewsets.py:811 +#: engine/core/docs/drf/viewsets.py:843 msgid "list all stocks (simple view)" msgstr "列出所有股票(简单视图)" -#: core/docs/drf/viewsets.py:815 +#: engine/core/docs/drf/viewsets.py:847 msgid "retrieve a single stock (detailed view)" msgstr "检索单个股票(详细视图)" -#: core/docs/drf/viewsets.py:819 +#: engine/core/docs/drf/viewsets.py:851 msgid "create a stock record" msgstr "创建库存记录" -#: core/docs/drf/viewsets.py:823 +#: engine/core/docs/drf/viewsets.py:855 msgid "delete a stock record" msgstr "删除库存记录" -#: core/docs/drf/viewsets.py:827 +#: engine/core/docs/drf/viewsets.py:859 msgid "rewrite an existing stock record saving non-editables" msgstr "重写现有库存记录,保存不可编辑数据" -#: core/docs/drf/viewsets.py:831 +#: engine/core/docs/drf/viewsets.py:863 msgid "rewrite some fields of an existing stock record saving non-editables" msgstr "重写现有库存记录的某些字段,保存不可编辑的内容" -#: core/docs/drf/viewsets.py:838 +#: engine/core/docs/drf/viewsets.py:870 msgid "list all product tags (simple view)" msgstr "列出所有产品标签(简单视图)" -#: core/docs/drf/viewsets.py:842 +#: engine/core/docs/drf/viewsets.py:874 msgid "retrieve a single product tag (detailed view)" msgstr "检索单个产品标签(详细视图)" -#: core/docs/drf/viewsets.py:846 +#: engine/core/docs/drf/viewsets.py:878 msgid "create a product tag" msgstr "创建产品标签" -#: core/docs/drf/viewsets.py:850 +#: engine/core/docs/drf/viewsets.py:882 msgid "delete a product tag" msgstr "删除产品标签" -#: core/docs/drf/viewsets.py:854 +#: engine/core/docs/drf/viewsets.py:886 msgid "rewrite an existing product tag saving non-editables" msgstr "重写现有产品标签,保存不可编辑内容" -#: core/docs/drf/viewsets.py:858 +#: engine/core/docs/drf/viewsets.py:890 msgid "rewrite some fields of an existing product tag saving non-editables" msgstr "重写现有产品标签的某些字段,保存不可编辑字段" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 +#: engine/core/elasticsearch/__init__.py:122 +#: engine/core/elasticsearch/__init__.py:570 msgid "no search term provided." msgstr "未提供搜索条件。" -#: core/filters.py:69 core/filters.py:412 core/filters.py:539 +#: engine/core/filters.py:69 engine/core/filters.py:426 +#: engine/core/filters.py:553 msgid "Search" msgstr "搜索" -#: core/filters.py:70 core/filters.py:569 core/filters.py:598 +#: engine/core/filters.py:70 engine/core/filters.py:583 +#: engine/core/filters.py:612 msgid "UUID" msgstr "UUID" -#: core/filters.py:71 core/filters.py:414 core/filters.py:541 +#: engine/core/filters.py:71 engine/core/filters.py:428 +#: engine/core/filters.py:555 msgid "Name" msgstr "名称" -#: core/filters.py:72 core/filters.py:543 +#: engine/core/filters.py:72 engine/core/filters.py:557 msgid "Categories" msgstr "类别" -#: core/filters.py:74 +#: engine/core/filters.py:74 msgid "Categories Slugs" msgstr "类别 蛞蝓" -#: core/filters.py:75 core/filters.py:422 +#: engine/core/filters.py:75 engine/core/filters.py:436 msgid "Tags" msgstr "标签" -#: core/filters.py:76 +#: engine/core/filters.py:76 msgid "Min Price" msgstr "最低价格" -#: core/filters.py:77 +#: engine/core/filters.py:77 msgid "Max Price" msgstr "最高价格" -#: core/filters.py:78 +#: engine/core/filters.py:78 msgid "Is Active" msgstr "处于活动状态" -#: core/filters.py:79 +#: engine/core/filters.py:79 msgid "Brand" msgstr "品牌" -#: core/filters.py:80 +#: engine/core/filters.py:80 msgid "Attributes" msgstr "属性" -#: core/filters.py:81 +#: engine/core/filters.py:81 msgid "Quantity" msgstr "数量" -#: core/filters.py:82 core/filters.py:416 core/filters.py:542 -#: core/models.py:322 core/models.py:483 core/models.py:637 +#: engine/core/filters.py:82 engine/core/filters.py:430 +#: engine/core/filters.py:556 engine/core/models.py:321 +#: engine/core/models.py:482 engine/core/models.py:637 msgid "Slug" msgstr "蛞蝓" -#: core/filters.py:83 +#: engine/core/filters.py:83 msgid "Is Digital" msgstr "是数字" -#: core/filters.py:84 +#: engine/core/filters.py:84 msgid "Include sub-categories" msgstr "包括子类别" -#: core/filters.py:87 +#: engine/core/filters.py:87 msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: core/filters.py:89 core/models.py:641 +#: engine/core/filters.py:89 engine/core/models.py:641 msgid "SKU" msgstr "商品编号" -#: core/filters.py:173 +#: engine/core/filters.py:184 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" -#: core/filters.py:339 +#: engine/core/filters.py:353 msgid "Search (ID, product name or part number)" msgstr "搜索(ID、产品名称或零件编号)" -#: core/filters.py:342 +#: engine/core/filters.py:356 msgid "Bought after (inclusive)" msgstr "之后购买(含)" -#: core/filters.py:343 +#: engine/core/filters.py:357 msgid "Bought before (inclusive)" msgstr "之前购买(含)" -#: core/filters.py:346 core/filters.py:393 core/filters.py:600 +#: engine/core/filters.py:360 engine/core/filters.py:407 +#: engine/core/filters.py:614 msgid "User email" msgstr "用户电子邮件" -#: core/filters.py:347 core/filters.py:394 core/filters.py:578 -#: core/filters.py:599 +#: engine/core/filters.py:361 engine/core/filters.py:408 +#: engine/core/filters.py:592 engine/core/filters.py:613 msgid "User UUID" msgstr "用户 UUID" -#: core/filters.py:348 +#: engine/core/filters.py:362 msgid "Status" msgstr "现状" -#: core/filters.py:352 +#: engine/core/filters.py:366 msgid "Human Readable ID" msgstr "人可读 ID" -#: core/filters.py:415 +#: engine/core/filters.py:429 msgid "Parent" msgstr "家长" -#: core/filters.py:419 +#: engine/core/filters.py:433 msgid "Whole category(has at least 1 product or not)" msgstr "整个类别(是否至少有 1 个产品)" -#: core/filters.py:423 +#: engine/core/filters.py:437 msgid "Level" msgstr "级别" -#: core/filters.py:573 +#: engine/core/filters.py:587 msgid "Product UUID" msgstr "产品 UUID" -#: core/graphene/mutations.py:41 +#: engine/core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "在缓存中查找或设置的关键字" -#: core/graphene/mutations.py:42 +#: engine/core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "缓存中要存储的数据" -#: core/graphene/mutations.py:45 +#: engine/core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "将数据设置为缓存的超时(以秒为单位" -#: core/graphene/mutations.py:48 +#: engine/core/graphene/mutations.py:48 msgid "cached data" msgstr "缓存数据" -#: core/graphene/mutations.py:63 +#: engine/core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: core/graphene/mutations.py:68 core/views.py:232 +#: engine/core/graphene/mutations.py:68 engine/core/views.py:231 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" -#: core/graphene/mutations.py:84 +#: engine/core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "在订单中添加产品" -#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 -#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 +#: engine/core/graphene/mutations.py:105 engine/core/graphene/mutations.py:132 +#: engine/core/graphene/mutations.py:240 engine/core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "未找到 {order_uuid} 订单!" -#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 +#: engine/core/graphene/mutations.py:111 engine/core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:138 +#: engine/core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "从订单中删除所有产品" -#: core/graphene/mutations.py:183 +#: engine/core/graphene/mutations.py:183 msgid "buy an order" msgstr "购买订单" -#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 +#: engine/core/graphene/mutations.py:212 engine/core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" -#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 -#: core/graphene/mutations.py:544 core/viewsets.py:704 +#: engine/core/graphene/mutations.py:237 engine/core/graphene/mutations.py:502 +#: engine/core/graphene/mutations.py:544 engine/core/viewsets.py:704 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" -#: core/graphene/mutations.py:246 +#: engine/core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "对订单中的产品列表执行操作" -#: core/graphene/mutations.py:251 +#: engine/core/graphene/mutations.py:251 msgid "remove/add" msgstr "删除/添加" -#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 +#: engine/core/graphene/mutations.py:283 engine/core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: core/graphene/mutations.py:294 +#: engine/core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "对愿望清单中的产品列表执行操作" -#: core/graphene/mutations.py:312 +#: engine/core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "请提供 `wishlist_uuid` 值。" -#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 -#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 -#: core/graphene/mutations.py:505 +#: engine/core/graphene/mutations.py:329 engine/core/graphene/mutations.py:405 +#: engine/core/graphene/mutations.py:433 engine/core/graphene/mutations.py:461 +#: engine/core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "未找到 Wishlist {wishlist_uuid}!" -#: core/graphene/mutations.py:383 +#: engine/core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "在订单中添加产品" -#: core/graphene/mutations.py:411 +#: engine/core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:439 +#: engine/core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:467 +#: engine/core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:511 +#: engine/core/graphene/mutations.py:511 msgid "buy a product" msgstr "购买订单" -#: core/graphene/mutations.py:517 +#: engine/core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" -#: core/graphene/mutations.py:550 +#: engine/core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "添加或删除订单产品的反馈信息" -#: core/graphene/mutations.py:574 +#: engine/core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: core/graphene/mutations.py:577 +#: engine/core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "未找到订购产品 {order_product_uuid}!" -#: core/graphene/mutations.py:644 +#: engine/core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: core/graphene/mutations.py:680 core/models.py:930 core/models.py:943 -#: core/models.py:1358 core/models.py:1387 core/models.py:1412 -#: core/viewsets.py:707 +#: engine/core/graphene/mutations.py:680 engine/core/models.py:941 +#: engine/core/models.py:954 engine/core/models.py:1369 +#: engine/core/models.py:1398 engine/core/models.py:1423 +#: engine/core/viewsets.py:707 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: core/graphene/mutations.py:694 +#: engine/core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "限值必须在 1 和 10 之间" -#: core/graphene/mutations.py:743 +#: engine/core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" -#: core/graphene/object_types.py:82 core/graphene/object_types.py:370 -#: core/graphene/object_types.py:417 core/models.py:754 core/models.py:1225 -#: core/models.py:1823 +#: engine/core/graphene/object_types.py:82 +#: engine/core/graphene/object_types.py:370 +#: engine/core/graphene/object_types.py:417 engine/core/models.py:765 +#: engine/core/models.py:1236 engine/core/models.py:1840 msgid "attributes" msgstr "属性" -#: core/graphene/object_types.py:95 +#: engine/core/graphene/object_types.py:95 msgid "grouped attributes" msgstr "分组属性" -#: core/graphene/object_types.py:102 +#: engine/core/graphene/object_types.py:102 msgid "groups of attributes" msgstr "属性组" -#: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:223 core/models.py:426 +#: engine/core/graphene/object_types.py:116 +#: engine/core/graphene/object_types.py:193 +#: engine/core/graphene/object_types.py:223 engine/core/models.py:425 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:124 core/models.py:497 +#: engine/core/graphene/object_types.py:124 engine/core/models.py:496 msgid "brands" msgstr "品牌" -#: core/graphene/object_types.py:195 +#: engine/core/graphene/object_types.py:195 msgid "category image url" msgstr "类别" -#: core/graphene/object_types.py:196 core/graphene/object_types.py:317 -#: core/models.py:284 +#: engine/core/graphene/object_types.py:196 +#: engine/core/graphene/object_types.py:317 engine/core/models.py:283 msgid "markup percentage" msgstr "加价百分比" -#: core/graphene/object_types.py:199 +#: engine/core/graphene/object_types.py:199 msgid "which attributes and values can be used for filtering this category." msgstr "哪些属性和值可用于筛选该类别。" -#: core/graphene/object_types.py:203 +#: engine/core/graphene/object_types.py:203 msgid "" "minimum and maximum prices for products in this category, if available." msgstr "该类别产品的最低和最高价格(如有)。" -#: core/graphene/object_types.py:205 +#: engine/core/graphene/object_types.py:205 msgid "tags for this category" msgstr "此类别的标签" -#: core/graphene/object_types.py:206 +#: engine/core/graphene/object_types.py:206 msgid "products in this category" msgstr "该类别中的产品" -#: core/graphene/object_types.py:324 core/models.py:189 +#: engine/core/graphene/object_types.py:324 engine/core/models.py:188 msgid "vendors" msgstr "供应商" -#: core/graphene/object_types.py:328 +#: engine/core/graphene/object_types.py:328 msgid "Latitude (Y coordinate)" msgstr "纬度(Y 坐标)" -#: core/graphene/object_types.py:329 +#: engine/core/graphene/object_types.py:329 msgid "Longitude (X coordinate)" msgstr "经度(X 坐标)" -#: core/graphene/object_types.py:358 +#: engine/core/graphene/object_types.py:358 msgid "comment" msgstr "如何" -#: core/graphene/object_types.py:359 core/graphene/object_types.py:483 +#: engine/core/graphene/object_types.py:359 +#: engine/core/graphene/object_types.py:483 msgid "rating value from 1 to 10, inclusive, or 0 if not set." msgstr "评级值从 1 到 10(包括 10),如果未设置,则为 0。" -#: core/graphene/object_types.py:366 +#: engine/core/graphene/object_types.py:366 msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" -#: core/graphene/object_types.py:371 core/graphene/object_types.py:418 -#: core/models.py:1219 +#: engine/core/graphene/object_types.py:371 +#: engine/core/graphene/object_types.py:418 engine/core/models.py:1230 msgid "notifications" msgstr "通知" -#: core/graphene/object_types.py:372 +#: engine/core/graphene/object_types.py:372 msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: core/graphene/object_types.py:373 core/models.py:1939 +#: engine/core/graphene/object_types.py:373 engine/core/models.py:1956 msgid "feedback" msgstr "反馈意见" -#: core/graphene/object_types.py:407 +#: engine/core/graphene/object_types.py:407 msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:409 core/models.py:1189 +#: engine/core/graphene/object_types.py:409 engine/core/models.py:1200 msgid "billing address" msgstr "账单地址" -#: core/graphene/object_types.py:412 +#: engine/core/graphene/object_types.py:412 msgid "" "shipping address for this order, leave blank if same as billing address or " "if not applicable" msgstr "此订单的送货地址,如果与账单地址相同或不适用,请留空" -#: core/graphene/object_types.py:414 +#: engine/core/graphene/object_types.py:414 msgid "total price of this order" msgstr "订单总价" -#: core/graphene/object_types.py:415 +#: engine/core/graphene/object_types.py:415 msgid "total quantity of products in order" msgstr "订单中产品的总数量" -#: core/graphene/object_types.py:416 +#: engine/core/graphene/object_types.py:416 msgid "are all products in the order digital" msgstr "订单中的所有产品都是数字产品吗?" -#: core/graphene/object_types.py:419 +#: engine/core/graphene/object_types.py:419 msgid "transactions for this order" msgstr "此订单的交易" -#: core/graphene/object_types.py:438 core/models.py:1253 +#: engine/core/graphene/object_types.py:438 engine/core/models.py:1264 msgid "orders" msgstr "订单" -#: core/graphene/object_types.py:459 +#: engine/core/graphene/object_types.py:459 msgid "image url" msgstr "图片 URL" -#: core/graphene/object_types.py:466 +#: engine/core/graphene/object_types.py:466 msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:473 core/models.py:425 core/models.py:579 +#: engine/core/graphene/object_types.py:473 engine/core/models.py:424 +#: engine/core/models.py:579 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:475 core/models.py:1940 +#: engine/core/graphene/object_types.py:475 engine/core/models.py:1957 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:476 core/models.py:496 core/models.py:588 +#: engine/core/graphene/object_types.py:476 engine/core/models.py:495 +#: engine/core/models.py:588 msgid "brand" msgstr "品牌" -#: core/graphene/object_types.py:477 core/models.py:107 +#: engine/core/graphene/object_types.py:477 engine/core/models.py:106 msgid "attribute groups" msgstr "属性组" -#: core/graphene/object_types.py:478 -#: core/templates/digital_order_created_email.html:111 -#: core/templates/digital_order_delivered_email.html:109 -#: core/templates/shipped_order_created_email.html:109 -#: core/templates/shipped_order_delivered_email.html:109 +#: engine/core/graphene/object_types.py:478 +#: engine/core/templates/digital_order_created_email.html:111 +#: engine/core/templates/digital_order_delivered_email.html:109 +#: engine/core/templates/shipped_order_created_email.html:109 +#: engine/core/templates/shipped_order_delivered_email.html:109 msgid "price" msgstr "价格" -#: core/graphene/object_types.py:479 -#: core/templates/digital_order_created_email.html:110 -#: core/templates/digital_order_delivered_email.html:108 -#: core/templates/shipped_order_created_email.html:108 -#: core/templates/shipped_order_delivered_email.html:108 +#: engine/core/graphene/object_types.py:479 +#: engine/core/templates/digital_order_created_email.html:110 +#: engine/core/templates/digital_order_delivered_email.html:108 +#: engine/core/templates/shipped_order_created_email.html:108 +#: engine/core/templates/shipped_order_delivered_email.html:108 msgid "quantity" msgstr "数量" -#: core/graphene/object_types.py:480 +#: engine/core/graphene/object_types.py:480 msgid "number of feedbacks" msgstr "反馈数量" -#: core/graphene/object_types.py:481 +#: engine/core/graphene/object_types.py:481 msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: core/graphene/object_types.py:507 core/models.py:651 +#: engine/core/graphene/object_types.py:484 +msgid "discount price" +msgstr "折扣价" + +#: engine/core/graphene/object_types.py:508 engine/core/models.py:651 msgid "products" msgstr "产品" -#: core/graphene/object_types.py:607 +#: engine/core/graphene/object_types.py:611 msgid "promocodes" msgstr "促销代码" -#: core/graphene/object_types.py:617 +#: engine/core/graphene/object_types.py:621 msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:624 core/models.py:879 +#: engine/core/graphene/object_types.py:628 engine/core/models.py:890 msgid "promotions" msgstr "促销活动" -#: core/graphene/object_types.py:628 core/models.py:188 +#: engine/core/graphene/object_types.py:632 engine/core/models.py:187 msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:629 core/models.py:650 -#: core/templates/digital_order_created_email.html:109 -#: core/templates/digital_order_delivered_email.html:107 -#: core/templates/shipped_order_created_email.html:107 -#: core/templates/shipped_order_delivered_email.html:107 +#: engine/core/graphene/object_types.py:633 engine/core/models.py:650 +#: engine/core/templates/digital_order_created_email.html:109 +#: engine/core/templates/digital_order_delivered_email.html:107 +#: engine/core/templates/shipped_order_created_email.html:107 +#: engine/core/templates/shipped_order_delivered_email.html:107 msgid "product" msgstr "产品" -#: core/graphene/object_types.py:640 core/models.py:902 +#: engine/core/graphene/object_types.py:644 engine/core/models.py:913 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:646 core/models.py:919 +#: engine/core/graphene/object_types.py:650 engine/core/models.py:930 msgid "wishlists" msgstr "愿望清单" -#: core/graphene/object_types.py:650 +#: engine/core/graphene/object_types.py:654 msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:657 core/models.py:225 core/models.py:594 +#: engine/core/graphene/object_types.py:661 engine/core/models.py:224 +#: engine/core/models.py:594 msgid "product tags" msgstr "产品标签" -#: core/graphene/object_types.py:661 +#: engine/core/graphene/object_types.py:665 msgid "tagged categories" msgstr "标签类别" -#: core/graphene/object_types.py:668 +#: engine/core/graphene/object_types.py:672 msgid "categories tags" msgstr "类别标签" -#: core/graphene/object_types.py:672 +#: engine/core/graphene/object_types.py:676 msgid "project name" msgstr "项目名称" -#: core/graphene/object_types.py:673 +#: engine/core/graphene/object_types.py:677 msgid "company email" msgstr "公司电子邮件" -#: core/graphene/object_types.py:674 +#: engine/core/graphene/object_types.py:678 msgid "company name" msgstr "公司名称" -#: core/graphene/object_types.py:675 +#: engine/core/graphene/object_types.py:679 msgid "company address" msgstr "公司地址" -#: core/graphene/object_types.py:676 +#: engine/core/graphene/object_types.py:680 msgid "company phone number" msgstr "公司电话号码" -#: core/graphene/object_types.py:677 +#: engine/core/graphene/object_types.py:681 msgid "email from, sometimes it must be used instead of host user value" msgstr "电子邮件来自\",有时必须使用它来代替主机用户值" -#: core/graphene/object_types.py:678 +#: engine/core/graphene/object_types.py:682 msgid "email host user" msgstr "电子邮件主机用户" -#: core/graphene/object_types.py:679 +#: engine/core/graphene/object_types.py:683 msgid "maximum amount for payment" msgstr "最高付款额" -#: core/graphene/object_types.py:680 +#: engine/core/graphene/object_types.py:684 msgid "minimum amount for payment" msgstr "最低付款额" -#: core/graphene/object_types.py:681 +#: engine/core/graphene/object_types.py:685 msgid "analytics data" msgstr "分析数据" -#: core/graphene/object_types.py:682 +#: engine/core/graphene/object_types.py:686 msgid "advertisement data" msgstr "广告数据" -#: core/graphene/object_types.py:685 +#: engine/core/graphene/object_types.py:689 msgid "company configuration" msgstr "配置" -#: core/graphene/object_types.py:689 +#: engine/core/graphene/object_types.py:693 msgid "language code" msgstr "语言代码" -#: core/graphene/object_types.py:690 +#: engine/core/graphene/object_types.py:694 msgid "language name" msgstr "语言名称" -#: core/graphene/object_types.py:691 +#: engine/core/graphene/object_types.py:695 msgid "language flag, if exists :)" msgstr "语言标志(如果有):)" -#: core/graphene/object_types.py:694 +#: engine/core/graphene/object_types.py:698 msgid "supported languages" msgstr "获取支持的语言列表" -#: core/graphene/object_types.py:725 core/graphene/object_types.py:726 -#: core/graphene/object_types.py:727 +#: engine/core/graphene/object_types.py:729 +#: engine/core/graphene/object_types.py:730 +#: engine/core/graphene/object_types.py:731 msgid "products search results" msgstr "产品搜索结果" -#: core/graphene/object_types.py:728 +#: engine/core/graphene/object_types.py:732 msgid "posts search results" msgstr "产品搜索结果" -#: core/models.py:76 +#: engine/core/models.py:75 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1427,23 +1458,23 @@ msgid "" msgstr "" "代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" -#: core/models.py:92 +#: engine/core/models.py:91 msgid "parent of this group" msgstr "本组家长" -#: core/models.py:93 +#: engine/core/models.py:92 msgid "parent attribute group" msgstr "父属性组" -#: core/models.py:97 core/models.py:98 +#: engine/core/models.py:96 engine/core/models.py:97 msgid "attribute group's name" msgstr "属性组名称" -#: core/models.py:106 core/models.py:716 +#: engine/core/models.py:105 engine/core/models.py:727 msgid "attribute group" msgstr "属性组" -#: core/models.py:112 +#: engine/core/models.py:111 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1455,47 +1486,47 @@ msgid "" msgstr "" "代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" -#: core/models.py:125 +#: engine/core/models.py:124 msgid "stores credentials and endpoints required for vendor communication" msgstr "存储供应商应用程序接口通信所需的凭证和端点" -#: core/models.py:126 +#: engine/core/models.py:125 msgid "authentication info" msgstr "认证信息" -#: core/models.py:131 +#: engine/core/models.py:130 msgid "define the markup for products retrieved from this vendor" msgstr "定义从该供应商获取的产品的标记" -#: core/models.py:132 +#: engine/core/models.py:131 msgid "vendor markup percentage" msgstr "供应商加价百分比" -#: core/models.py:136 +#: engine/core/models.py:135 msgid "name of this vendor" msgstr "供应商名称" -#: core/models.py:137 +#: engine/core/models.py:136 msgid "vendor name" msgstr "供应商名称" -#: core/models.py:148 +#: engine/core/models.py:147 msgid "response file" msgstr "回复文件" -#: core/models.py:149 +#: engine/core/models.py:148 msgid "vendor's last processing response" msgstr "供应商最后的处理回复" -#: core/models.py:155 +#: engine/core/models.py:154 msgid "vendor's integration file path" msgstr "供应商的集成文件路径" -#: core/models.py:156 +#: engine/core/models.py:155 msgid "integration path" msgstr "整合路径" -#: core/models.py:198 +#: engine/core/models.py:197 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1506,42 +1537,42 @@ msgstr "" "代表用于分类或识别产品的产品标签。ProductTag " "类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" -#: core/models.py:210 core/models.py:241 +#: engine/core/models.py:209 engine/core/models.py:240 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:211 core/models.py:242 +#: engine/core/models.py:210 engine/core/models.py:241 msgid "tag name" msgstr "标签名称" -#: core/models.py:215 core/models.py:246 +#: engine/core/models.py:214 engine/core/models.py:245 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:216 core/models.py:247 +#: engine/core/models.py:215 engine/core/models.py:246 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:224 +#: engine/core/models.py:223 msgid "product tag" msgstr "产品标签" -#: core/models.py:230 +#: engine/core/models.py:229 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。" -#: core/models.py:255 +#: engine/core/models.py:254 msgid "category tag" msgstr "类别标签" -#: core/models.py:256 core/models.py:328 +#: engine/core/models.py:255 engine/core/models.py:327 msgid "category tags" msgstr "类别标签" -#: core/models.py:261 +#: engine/core/models.py:260 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1555,51 +1586,51 @@ msgid "" msgstr "" "代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" -#: core/models.py:275 +#: engine/core/models.py:274 msgid "upload an image representing this category" msgstr "上传代表该类别的图片" -#: core/models.py:278 +#: engine/core/models.py:277 msgid "category image" msgstr "类别 图像" -#: core/models.py:283 +#: engine/core/models.py:282 msgid "define a markup percentage for products in this category" msgstr "定义该类别产品的加价百分比" -#: core/models.py:292 +#: engine/core/models.py:291 msgid "parent of this category to form a hierarchical structure" msgstr "该类别的父类别,形成等级结构" -#: core/models.py:293 +#: engine/core/models.py:292 msgid "parent category" msgstr "父类" -#: core/models.py:298 +#: engine/core/models.py:297 msgid "category name" msgstr "类别名称" -#: core/models.py:299 +#: engine/core/models.py:298 msgid "provide a name for this category" msgstr "提供该类别的名称" -#: core/models.py:306 +#: engine/core/models.py:305 msgid "add a detailed description for this category" msgstr "为该类别添加详细说明" -#: core/models.py:307 +#: engine/core/models.py:306 msgid "category description" msgstr "类别说明" -#: core/models.py:327 +#: engine/core/models.py:326 msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: core/models.py:334 core/models.py:489 +#: engine/core/models.py:333 engine/core/models.py:488 msgid "priority" msgstr "优先权" -#: core/models.py:432 +#: engine/core/models.py:431 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1609,47 +1640,47 @@ msgid "" msgstr "" "代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" -#: core/models.py:442 +#: engine/core/models.py:441 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:443 +#: engine/core/models.py:442 msgid "brand name" msgstr "品牌名称" -#: core/models.py:450 +#: engine/core/models.py:449 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:452 +#: engine/core/models.py:451 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:458 +#: engine/core/models.py:457 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:460 +#: engine/core/models.py:459 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:465 +#: engine/core/models.py:464 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:466 +#: engine/core/models.py:465 msgid "brand description" msgstr "品牌描述" -#: core/models.py:471 +#: engine/core/models.py:470 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:472 +#: engine/core/models.py:471 msgid "associated categories" msgstr "类别" -#: core/models.py:502 +#: engine/core/models.py:501 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1661,68 +1692,72 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: core/models.py:514 +#: engine/core/models.py:513 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:515 +#: engine/core/models.py:514 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:519 +#: engine/core/models.py:518 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:520 +#: engine/core/models.py:519 msgid "selling price" msgstr "销售价格" -#: core/models.py:525 +#: engine/core/models.py:524 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:526 core/models.py:779 core/models.py:825 -#: core/models.py:1718 +#: engine/core/models.py:525 engine/core/models.py:790 +#: engine/core/models.py:836 engine/core/models.py:1735 msgid "associated product" msgstr "相关产品" -#: core/models.py:533 +#: engine/core/models.py:532 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:534 +#: engine/core/models.py:533 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:538 +#: engine/core/models.py:537 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:539 +#: engine/core/models.py:538 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:543 +#: engine/core/models.py:542 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:544 +#: engine/core/models.py:543 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:550 +#: engine/core/models.py:549 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:551 +#: engine/core/models.py:550 msgid "digital file" msgstr "数字文件" -#: core/models.py:560 +#: engine/core/models.py:553 +msgid "system attributes" +msgstr "系统属性" + +#: engine/core/models.py:560 msgid "stock entries" msgstr "库存条目" -#: core/models.py:565 +#: engine/core/models.py:565 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1736,55 +1771,55 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: core/models.py:578 +#: engine/core/models.py:578 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:587 +#: engine/core/models.py:587 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:593 +#: engine/core/models.py:593 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:598 +#: engine/core/models.py:598 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:599 +#: engine/core/models.py:599 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:605 +#: engine/core/models.py:605 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:606 +#: engine/core/models.py:606 msgid "product name" msgstr "产品名称" -#: core/models.py:612 core/models.py:867 +#: engine/core/models.py:612 engine/core/models.py:878 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:613 +#: engine/core/models.py:613 msgid "product description" msgstr "产品说明" -#: core/models.py:620 +#: engine/core/models.py:620 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:621 +#: engine/core/models.py:621 msgid "part number" msgstr "部件编号" -#: core/models.py:640 +#: engine/core/models.py:640 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" -#: core/models.py:702 +#: engine/core/models.py:713 msgid "" "Represents an attribute in the system. This class is used to define and " "manage attributes, which are customizable pieces of data that can be " @@ -1795,83 +1830,83 @@ msgid "" msgstr "" "代表系统中的一个属性。该类用于定义和管理属性,属性是可与其他实体关联的自定义数据块。属性有相关的类别、组、值类型和名称。该模型支持多种类型的值,包括字符串、整数、浮点数、布尔值、数组和对象。这样就可以实现动态、灵活的数据结构。" -#: core/models.py:715 +#: engine/core/models.py:726 msgid "group of this attribute" msgstr "该属性的组" -#: core/models.py:721 +#: engine/core/models.py:732 msgid "string" msgstr "字符串" -#: core/models.py:722 +#: engine/core/models.py:733 msgid "integer" msgstr "整数" -#: core/models.py:723 +#: engine/core/models.py:734 msgid "float" msgstr "浮动" -#: core/models.py:724 +#: engine/core/models.py:735 msgid "boolean" msgstr "布尔型" -#: core/models.py:725 +#: engine/core/models.py:736 msgid "array" msgstr "阵列" -#: core/models.py:726 +#: engine/core/models.py:737 msgid "object" msgstr "对象" -#: core/models.py:728 +#: engine/core/models.py:739 msgid "type of the attribute's value" msgstr "属性值的类型" -#: core/models.py:729 +#: engine/core/models.py:740 msgid "value type" msgstr "价值类型" -#: core/models.py:734 +#: engine/core/models.py:745 msgid "name of this attribute" msgstr "该属性的名称" -#: core/models.py:735 +#: engine/core/models.py:746 msgid "attribute's name" msgstr "属性名称" -#: core/models.py:740 +#: engine/core/models.py:751 msgid "is filterable" msgstr "可过滤" -#: core/models.py:741 +#: engine/core/models.py:752 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" -#: core/models.py:753 core/models.py:771 -#: core/templates/digital_order_delivered_email.html:134 +#: engine/core/models.py:764 engine/core/models.py:782 +#: engine/core/templates/digital_order_delivered_email.html:134 msgid "attribute" msgstr "属性" -#: core/models.py:759 +#: engine/core/models.py:770 msgid "" "Represents a specific value for an attribute that is linked to a product. It" " links the 'attribute' to a unique 'value', allowing better organization and" " dynamic representation of product characteristics." msgstr "代表与产品相关联的属性的特定值。它将 \"属性 \"与唯一的 \"值 \"联系起来,从而更好地组织和动态呈现产品特征。" -#: core/models.py:770 +#: engine/core/models.py:781 msgid "attribute of this value" msgstr "该值的属性" -#: core/models.py:778 +#: engine/core/models.py:789 msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:784 +#: engine/core/models.py:795 msgid "the specific value for this attribute" msgstr "该属性的具体值" -#: core/models.py:797 +#: engine/core/models.py:808 msgid "" "Represents a product image associated with a product in the system. This " "class is designed to manage images for products, including functionality for" @@ -1881,39 +1916,39 @@ msgid "" msgstr "" "代表与系统中产品相关联的产品图片。该类用于管理产品图片,包括上传图片文件、将图片与特定产品关联以及确定图片显示顺序等功能。它还包括一个为图像提供替代文本的可访问性功能。" -#: core/models.py:808 +#: engine/core/models.py:819 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:809 +#: engine/core/models.py:820 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:812 +#: engine/core/models.py:823 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:813 core/models.py:837 +#: engine/core/models.py:824 engine/core/models.py:848 msgid "product image" msgstr "产品图片" -#: core/models.py:818 +#: engine/core/models.py:829 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:819 +#: engine/core/models.py:830 msgid "display priority" msgstr "显示优先级" -#: core/models.py:824 +#: engine/core/models.py:835 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:838 +#: engine/core/models.py:849 msgid "product images" msgstr "产品图片" -#: core/models.py:843 +#: engine/core/models.py:854 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1924,39 +1959,39 @@ msgid "" msgstr "" "代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" -#: core/models.py:855 +#: engine/core/models.py:866 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:856 +#: engine/core/models.py:867 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:861 +#: engine/core/models.py:872 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:862 +#: engine/core/models.py:873 msgid "promotion name" msgstr "推广名称" -#: core/models.py:868 +#: engine/core/models.py:879 msgid "promotion description" msgstr "促销说明" -#: core/models.py:873 +#: engine/core/models.py:884 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:874 +#: engine/core/models.py:885 msgid "included products" msgstr "包括产品" -#: core/models.py:878 +#: engine/core/models.py:889 msgid "promotion" msgstr "促销活动" -#: core/models.py:889 +#: engine/core/models.py:900 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1964,23 +1999,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" -#: core/models.py:901 +#: engine/core/models.py:912 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:909 +#: engine/core/models.py:920 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:910 +#: engine/core/models.py:921 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:918 +#: engine/core/models.py:929 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:960 +#: engine/core/models.py:971 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1991,19 +2026,19 @@ msgid "" msgstr "" "代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" -#: core/models.py:973 +#: engine/core/models.py:984 msgid "documentary" msgstr "纪录片" -#: core/models.py:974 +#: engine/core/models.py:985 msgid "documentaries" msgstr "纪录片" -#: core/models.py:984 +#: engine/core/models.py:995 msgid "unresolved" msgstr "未解决" -#: core/models.py:989 +#: engine/core/models.py:1000 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2017,59 +2052,59 @@ msgstr "" "代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" " API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" -#: core/models.py:1004 +#: engine/core/models.py:1015 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:1005 +#: engine/core/models.py:1016 msgid "address line" msgstr "地址栏" -#: core/models.py:1007 +#: engine/core/models.py:1018 msgid "street" msgstr "街道" -#: core/models.py:1008 +#: engine/core/models.py:1019 msgid "district" msgstr "地区" -#: core/models.py:1009 +#: engine/core/models.py:1020 msgid "city" msgstr "城市" -#: core/models.py:1010 +#: engine/core/models.py:1021 msgid "region" msgstr "地区" -#: core/models.py:1011 +#: engine/core/models.py:1022 msgid "postal code" msgstr "邮政编码" -#: core/models.py:1012 +#: engine/core/models.py:1023 msgid "country" msgstr "国家" -#: core/models.py:1019 +#: engine/core/models.py:1030 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:1022 +#: engine/core/models.py:1033 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:1027 +#: engine/core/models.py:1038 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:1035 +#: engine/core/models.py:1046 msgid "address" msgstr "地址" -#: core/models.py:1036 +#: engine/core/models.py:1047 msgid "addresses" msgstr "地址" -#: core/models.py:1048 +#: engine/core/models.py:1059 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2081,86 +2116,86 @@ msgstr "" "代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " "类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" -#: core/models.py:1062 +#: engine/core/models.py:1073 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:1063 +#: engine/core/models.py:1074 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:1070 +#: engine/core/models.py:1081 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:1071 +#: engine/core/models.py:1082 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:1077 +#: engine/core/models.py:1088 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:1078 +#: engine/core/models.py:1089 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:1083 +#: engine/core/models.py:1094 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:1084 +#: engine/core/models.py:1095 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:1089 +#: engine/core/models.py:1100 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:1090 +#: engine/core/models.py:1101 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1095 +#: engine/core/models.py:1106 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1096 +#: engine/core/models.py:1107 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1101 +#: engine/core/models.py:1112 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1102 +#: engine/core/models.py:1113 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1109 +#: engine/core/models.py:1120 msgid "promo code" msgstr "促销代码" -#: core/models.py:1110 +#: engine/core/models.py:1121 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1125 +#: engine/core/models.py:1136 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1146 +#: engine/core/models.py:1157 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1162 +#: engine/core/models.py:1173 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: core/models.py:1171 +#: engine/core/models.py:1182 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2171,144 +2206,145 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: core/models.py:1188 +#: engine/core/models.py:1199 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:1196 +#: engine/core/models.py:1207 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:1197 +#: engine/core/models.py:1208 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:1205 +#: engine/core/models.py:1216 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:1206 +#: engine/core/models.py:1217 msgid "shipping address" msgstr "送货地址" -#: core/models.py:1212 +#: engine/core/models.py:1223 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:1213 +#: engine/core/models.py:1224 msgid "order status" msgstr "订单状态" -#: core/models.py:1218 core/models.py:1695 +#: engine/core/models.py:1229 engine/core/models.py:1712 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:1224 +#: engine/core/models.py:1235 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:1230 +#: engine/core/models.py:1241 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:1231 +#: engine/core/models.py:1242 msgid "user" msgstr "用户" -#: core/models.py:1237 +#: engine/core/models.py:1248 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:1238 +#: engine/core/models.py:1249 msgid "buy time" msgstr "购买时间" -#: core/models.py:1245 +#: engine/core/models.py:1256 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:1246 +#: engine/core/models.py:1257 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:1252 +#: engine/core/models.py:1263 msgid "order" msgstr "订购" -#: core/models.py:1294 +#: engine/core/models.py:1305 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:1326 +#: engine/core/models.py:1337 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:1331 +#: engine/core/models.py:1342 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:1348 +#: engine/core/models.py:1359 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:1370 core/models.py:1395 core/models.py:1403 +#: engine/core/models.py:1381 engine/core/models.py:1406 +#: engine/core/models.py:1414 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:1391 +#: engine/core/models.py:1402 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: core/models.py:1423 +#: engine/core/models.py:1434 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:1429 +#: engine/core/models.py:1440 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:1448 +#: engine/core/models.py:1459 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:1469 core/models.py:1538 +#: engine/core/models.py:1480 engine/core/models.py:1549 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:1472 core/models.py:1534 +#: engine/core/models.py:1483 engine/core/models.py:1545 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:1478 core/models.py:1541 +#: engine/core/models.py:1489 engine/core/models.py:1552 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:1497 +#: engine/core/models.py:1508 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: core/models.py:1511 +#: engine/core/models.py:1522 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: core/models.py:1516 +#: engine/core/models.py:1527 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:1550 +#: engine/core/models.py:1561 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:1559 +#: engine/core/models.py:1570 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:1668 +#: engine/core/models.py:1685 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2324,108 +2360,108 @@ msgstr "" "模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" " URL。该模型与订单和产品模型集成,并存储对它们的引用。" -#: core/models.py:1683 +#: engine/core/models.py:1700 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:1684 +#: engine/core/models.py:1701 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:1689 +#: engine/core/models.py:1706 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:1690 +#: engine/core/models.py:1707 msgid "internal comments" msgstr "内部意见" -#: core/models.py:1696 +#: engine/core/models.py:1713 msgid "user notifications" msgstr "用户通知" -#: core/models.py:1701 +#: engine/core/models.py:1718 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:1702 +#: engine/core/models.py:1719 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:1707 +#: engine/core/models.py:1724 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:1708 +#: engine/core/models.py:1725 msgid "parent order" msgstr "父顺序" -#: core/models.py:1717 +#: engine/core/models.py:1734 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:1724 +#: engine/core/models.py:1741 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:1725 +#: engine/core/models.py:1742 msgid "product quantity" msgstr "产品数量" -#: core/models.py:1732 +#: engine/core/models.py:1749 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:1733 +#: engine/core/models.py:1750 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:1798 +#: engine/core/models.py:1815 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: core/models.py:1800 +#: engine/core/models.py:1817 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: core/models.py:1814 +#: engine/core/models.py:1831 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:1820 +#: engine/core/models.py:1837 msgid "name" msgstr "名称" -#: core/models.py:1821 +#: engine/core/models.py:1838 msgid "URL of the integration" msgstr "集成的 URL" -#: core/models.py:1822 +#: engine/core/models.py:1839 msgid "authentication credentials" msgstr "认证证书" -#: core/models.py:1844 +#: engine/core/models.py:1861 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: core/models.py:1854 +#: engine/core/models.py:1871 msgid "CRM" msgstr "客户关系管理" -#: core/models.py:1855 +#: engine/core/models.py:1872 msgid "CRMs" msgstr "客户关系管理" -#: core/models.py:1867 +#: engine/core/models.py:1884 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: core/models.py:1868 +#: engine/core/models.py:1885 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: core/models.py:1873 +#: engine/core/models.py:1890 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2438,15 +2474,15 @@ msgstr "" "类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" " URL 的方法。" -#: core/models.py:1887 +#: engine/core/models.py:1904 msgid "download" msgstr "下载" -#: core/models.py:1888 +#: engine/core/models.py:1905 msgid "downloads" msgstr "下载" -#: core/models.py:1902 +#: engine/core/models.py:1919 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2456,78 +2492,74 @@ msgid "" msgstr "" "管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" -#: core/models.py:1914 +#: engine/core/models.py:1931 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:1915 +#: engine/core/models.py:1932 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:1922 +#: engine/core/models.py:1939 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:1923 +#: engine/core/models.py:1940 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:1928 +#: engine/core/models.py:1945 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:1929 +#: engine/core/models.py:1946 msgid "product rating" msgstr "产品评级" -#: core/serializers/utility.py:89 +#: engine/core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" -#: core/signals.py:73 -msgid "error during promocode creation: {e!s}" -msgstr "创建促销代码时出错:{e!s}" - -#: core/sitemaps.py:25 +#: engine/core/sitemaps.py:25 msgid "Home" msgstr "首页" -#: core/sitemaps.py:30 +#: engine/core/sitemaps.py:30 msgid "Contact Us" msgstr "联系我们" -#: core/sitemaps.py:35 +#: engine/core/sitemaps.py:35 msgid "About Us" msgstr "关于我们" -#: core/templates/digital_order_created_email.html:7 -#: core/templates/digital_order_created_email.html:100 -#: core/templates/digital_order_delivered_email.html:6 -#: core/templates/shipped_order_created_email.html:7 -#: core/templates/shipped_order_created_email.html:99 -#: core/templates/shipped_order_delivered_email.html:7 -#: core/templates/shipped_order_delivered_email.html:99 +#: engine/core/templates/digital_order_created_email.html:7 +#: engine/core/templates/digital_order_created_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:6 +#: engine/core/templates/shipped_order_created_email.html:7 +#: engine/core/templates/shipped_order_created_email.html:99 +#: engine/core/templates/shipped_order_delivered_email.html:7 +#: engine/core/templates/shipped_order_delivered_email.html:99 msgid "order confirmation" msgstr "订单确认" -#: core/templates/digital_order_created_email.html:95 -#: core/templates/digital_order_delivered_email.html:94 -#: core/templates/promocode_granted_email.html:94 -#: core/templates/shipped_order_created_email.html:94 -#: core/templates/shipped_order_delivered_email.html:94 +#: engine/core/templates/digital_order_created_email.html:95 +#: engine/core/templates/digital_order_delivered_email.html:94 +#: engine/core/templates/promocode_granted_email.html:94 +#: engine/core/templates/shipped_order_created_email.html:94 +#: engine/core/templates/shipped_order_delivered_email.html:94 msgid "logo" msgstr "标志" -#: core/templates/digital_order_created_email.html:101 -#: core/templates/shipped_order_created_email.html:100 -#: core/templates/shipped_order_delivered_email.html:100 +#: engine/core/templates/digital_order_created_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:100 +#: engine/core/templates/shipped_order_delivered_email.html:100 #, python-format msgid "hello %(order.user.first_name)s," msgstr "你好%(order.user.first_name)s_、" -#: core/templates/digital_order_created_email.html:102 +#: engine/core/templates/digital_order_created_email.html:102 #, python-format msgid "" "thank you for your order #%(order.pk)s! we are pleased to inform you that\n" @@ -2535,58 +2567,58 @@ msgid "" " order:" msgstr "感谢您的订单 #%(order.pk)s!我们很高兴地通知您,我们已将您的订单付诸实施。以下是您的订单详情:" -#: core/templates/digital_order_created_email.html:112 -#: core/templates/digital_order_delivered_email.html:110 -#: core/templates/shipped_order_created_email.html:110 -#: core/templates/shipped_order_delivered_email.html:110 +#: engine/core/templates/digital_order_created_email.html:112 +#: engine/core/templates/digital_order_delivered_email.html:110 +#: engine/core/templates/shipped_order_created_email.html:110 +#: engine/core/templates/shipped_order_delivered_email.html:110 msgid "total" msgstr "总计" -#: core/templates/digital_order_created_email.html:125 -#: core/templates/digital_order_delivered_email.html:157 -#: core/templates/shipped_order_created_email.html:127 -#: core/templates/shipped_order_delivered_email.html:127 +#: engine/core/templates/digital_order_created_email.html:125 +#: engine/core/templates/digital_order_delivered_email.html:157 +#: engine/core/templates/shipped_order_created_email.html:127 +#: engine/core/templates/shipped_order_delivered_email.html:127 msgid "total price" msgstr "总价" -#: core/templates/digital_order_created_email.html:131 -#: core/templates/shipped_order_created_email.html:140 -#: core/templates/shipped_order_delivered_email.html:140 +#: engine/core/templates/digital_order_created_email.html:131 +#: engine/core/templates/shipped_order_created_email.html:140 +#: engine/core/templates/shipped_order_delivered_email.html:140 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(config.EMAIL_HOST_USER)s." msgstr "如果您有任何问题,请随时通过 %(config.EMAIL_HOST_USER)s 联系我们的支持人员。" -#: core/templates/digital_order_created_email.html:133 +#: engine/core/templates/digital_order_created_email.html:133 #, python-format msgid "best regards,
the %(config.PROJECT_NAME)s team" msgstr "致以最诚挚的问候,
%(config.PROJECT_NAME)s_团队" -#: core/templates/digital_order_created_email.html:139 -#: core/templates/digital_order_delivered_email.html:171 -#: core/templates/promocode_granted_email.html:114 +#: engine/core/templates/digital_order_created_email.html:139 +#: engine/core/templates/digital_order_delivered_email.html:171 +#: engine/core/templates/promocode_granted_email.html:114 msgid "all rights reserved" msgstr "保留所有权利" -#: core/templates/digital_order_delivered_email.html:99 +#: engine/core/templates/digital_order_delivered_email.html:99 msgid "order delivered" msgstr "订单已送达" -#: core/templates/digital_order_delivered_email.html:100 -#: core/templates/promocode_granted_email.html:100 +#: engine/core/templates/digital_order_delivered_email.html:100 +#: engine/core/templates/promocode_granted_email.html:100 #, python-format msgid "hello %(user_first_name)s," msgstr "你好%(user_first_name)s_、" -#: core/templates/digital_order_delivered_email.html:101 +#: engine/core/templates/digital_order_delivered_email.html:101 #, python-format msgid "" "we have successfully processed your order №%(order_uuid)s! below are the\n" " details of your order:" msgstr "我们已成功处理您的订单 №%(order_uuid)s_!以下是您的订单详情:" -#: core/templates/digital_order_delivered_email.html:128 +#: engine/core/templates/digital_order_delivered_email.html:128 msgid "" "additional\n" " information" @@ -2594,39 +2626,39 @@ msgstr "" "其他\n" " 附加信息" -#: core/templates/digital_order_delivered_email.html:137 -#: core/templates/json_table_widget.html:6 +#: engine/core/templates/digital_order_delivered_email.html:137 +#: engine/core/templates/json_table_widget.html:6 msgid "value" msgstr "价值" -#: core/templates/digital_order_delivered_email.html:163 -#: core/templates/promocode_granted_email.html:106 +#: engine/core/templates/digital_order_delivered_email.html:163 +#: engine/core/templates/promocode_granted_email.html:106 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "如果您有任何问题,请随时拨打 %(contact_email)s 联系我们的支持人员。" -#: core/templates/digital_order_delivered_email.html:165 -#: core/templates/promocode_granted_email.html:108 +#: engine/core/templates/digital_order_delivered_email.html:165 +#: engine/core/templates/promocode_granted_email.html:108 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "致以最诚挚的问候,
%(project_name)s_团队" -#: core/templates/json_table_widget.html:5 +#: engine/core/templates/json_table_widget.html:5 msgid "key" msgstr "钥匙" -#: core/templates/json_table_widget.html:40 +#: engine/core/templates/json_table_widget.html:40 msgid "Add Row" msgstr "添加行" -#: core/templates/promocode_granted_email.html:6 -#: core/templates/promocode_granted_email.html:99 +#: engine/core/templates/promocode_granted_email.html:6 +#: engine/core/templates/promocode_granted_email.html:99 msgid "promocode granted" msgstr "促销代码已授予" -#: core/templates/promocode_granted_email.html:101 +#: engine/core/templates/promocode_granted_email.html:101 msgid "" "Thank you for staying with us! We have granted you with a promocode\n" " for " @@ -2634,31 +2666,31 @@ msgstr "" "感谢您的光临!我们为您提供了一个促销代码\n" " 用于" -#: core/templates/shipped_order_created_email.html:101 -#: core/templates/shipped_order_delivered_email.html:101 +#: engine/core/templates/shipped_order_created_email.html:101 +#: engine/core/templates/shipped_order_delivered_email.html:101 msgid "" "thank you for your order! we are pleased to confirm your purchase. below are\n" " the details of your order:" msgstr "感谢您的订购!我们很高兴确认您的购买。以下是您的订单详情:" -#: core/templates/shipped_order_created_email.html:123 -#: core/templates/shipped_order_delivered_email.html:123 +#: engine/core/templates/shipped_order_created_email.html:123 +#: engine/core/templates/shipped_order_delivered_email.html:123 msgid "shipping price" msgstr "运输价格" -#: core/templates/shipped_order_created_email.html:133 -#: core/templates/shipped_order_delivered_email.html:133 +#: engine/core/templates/shipped_order_created_email.html:133 +#: engine/core/templates/shipped_order_delivered_email.html:133 msgid "your order will be delivered to the following address:" msgstr "您的订单将送至以下地址:" -#: core/templates/shipped_order_created_email.html:142 -#: core/templates/shipped_order_delivered_email.html:142 +#: engine/core/templates/shipped_order_created_email.html:142 +#: engine/core/templates/shipped_order_delivered_email.html:142 #, python-format msgid "best regards,
The %(config.PROJECT_NAME)s team" msgstr "致以最诚挚的问候,
%(config.PROJECT_NAME)s_团队" -#: core/templates/shipped_order_created_email.html:147 -#: core/templates/shipped_order_delivered_email.html:147 +#: engine/core/templates/shipped_order_created_email.html:147 +#: engine/core/templates/shipped_order_delivered_email.html:147 msgid "" "all rights\n" " reserved" @@ -2666,94 +2698,94 @@ msgstr "" "版权所有\n" " 保留所有权利" -#: core/utils/caching.py:44 +#: engine/core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "需要数据和超时" -#: core/utils/caching.py:46 +#: engine/core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "超时值无效,必须介于 0 和 216000 秒之间" -#: core/utils/emailing.py:27 +#: engine/core/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | contact us initiated" msgstr "{config.PROJECT_NAME}| 联系我们" -#: core/utils/emailing.py:73 +#: engine/core/utils/emailing.py:73 #, python-brace-format msgid "{config.PROJECT_NAME} | order confirmation" msgstr "{config.PROJECT_NAME}| 订单确认" -#: core/utils/emailing.py:105 +#: engine/core/utils/emailing.py:105 #, python-brace-format msgid "{config.PROJECT_NAME} | order delivered" msgstr "{config.PROJECT_NAME} | 订单已送达" -#: core/utils/emailing.py:188 +#: engine/core/utils/emailing.py:188 #, python-brace-format msgid "{config.PROJECT_NAME} | promocode granted" msgstr "{config.PROJECT_NAME} | 授予的促销代码" -#: core/utils/messages.py:3 +#: engine/core/utils/messages.py:3 msgid "you do not have permission to perform this action." msgstr "您没有执行此操作的权限。" -#: core/utils/nominatim.py:8 +#: engine/core/utils/nominatim.py:8 msgid "NOMINATIM_URL must be configured." msgstr "必须配置 NOMINATIM_URL 参数!" -#: core/validators.py:16 +#: engine/core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" -#: core/views.py:72 +#: engine/core/views.py:71 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" -#: core/views.py:87 +#: engine/core/views.py:86 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。" -#: core/views.py:116 +#: engine/core/views.py:115 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "返回支持语言及其相应信息的列表。" -#: core/views.py:148 +#: engine/core/views.py:147 msgid "Returns the parameters of the website as a JSON object." msgstr "以 JSON 对象形式返回网站参数。" -#: core/views.py:167 +#: engine/core/views.py:166 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" -#: core/views.py:194 +#: engine/core/views.py:193 msgid "Handles `contact us` form submissions." msgstr "处理 \"联系我们 \"表单提交。" -#: core/views.py:215 +#: engine/core/views.py:214 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" -#: core/views.py:255 +#: engine/core/views.py:254 msgid "Handles global search queries." msgstr "处理全局搜索查询。" -#: core/views.py:270 +#: engine/core/views.py:269 msgid "Handles the logic of buying as a business without registration." msgstr "处理未注册企业的购买逻辑。" -#: core/views.py:306 +#: engine/core/views.py:305 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2761,27 +2793,27 @@ msgstr "" "处理与订单相关的数字资产的下载。\n" "此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" -#: core/views.py:316 +#: engine/core/views.py:315 msgid "order_product_uuid is required" msgstr "order_product_uuid 为必填项" -#: core/views.py:322 +#: engine/core/views.py:321 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: core/views.py:325 +#: engine/core/views.py:324 msgid "the order must be paid before downloading the digital asset" msgstr "在下载数字资产前必须支付订单费用" -#: core/views.py:331 +#: engine/core/views.py:330 msgid "the order product does not have a product" msgstr "订单产品没有产品" -#: core/views.py:369 +#: engine/core/views.py:368 msgid "favicon not found" msgstr "未找到 favicon" -#: core/views.py:374 +#: engine/core/views.py:373 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2789,7 +2821,7 @@ msgstr "" "处理网站的 favicon 请求。\n" "该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" -#: core/views.py:386 +#: engine/core/views.py:385 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2798,11 +2830,11 @@ msgstr "" "将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " "`redirect` 函数来处理 HTTP 重定向。" -#: core/views.py:399 +#: engine/core/views.py:398 msgid "Returns current version of the eVibes. " msgstr "返回 eVibes 的当前版本。" -#: core/viewsets.py:137 +#: engine/core/viewsets.py:137 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2813,7 +2845,7 @@ msgstr "" "定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes " "实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。" -#: core/viewsets.py:157 +#: engine/core/viewsets.py:157 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2824,7 +2856,7 @@ msgstr "" "代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理" " AttributeGroup 数据的请求和响应提供了标准化方法。" -#: core/viewsets.py:176 +#: engine/core/viewsets.py:176 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2836,7 +2868,7 @@ msgstr "" "在应用程序中处理与属性对象相关的操作。提供一组 API " "端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。" -#: core/viewsets.py:195 +#: engine/core/viewsets.py:195 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2847,7 +2879,7 @@ msgstr "" "用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 " "Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" -#: core/viewsets.py:214 +#: engine/core/viewsets.py:214 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2858,7 +2890,7 @@ msgstr "" "管理类别相关操作的视图。CategoryViewSet " "类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。" -#: core/viewsets.py:326 +#: engine/core/viewsets.py:326 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2868,7 +2900,7 @@ msgstr "" "代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API " "端点的实现。" -#: core/viewsets.py:438 +#: engine/core/viewsets.py:438 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2882,7 +2914,7 @@ msgstr "" "`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " "操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" -#: core/viewsets.py:568 +#: engine/core/viewsets.py:568 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2893,7 +2925,7 @@ msgstr "" "代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " "数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" -#: core/viewsets.py:588 +#: engine/core/viewsets.py:588 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2905,7 +2937,7 @@ msgstr "" "处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" " `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" -#: core/viewsets.py:615 +#: engine/core/viewsets.py:615 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2919,7 +2951,7 @@ msgstr "" "ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" " 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" -#: core/viewsets.py:813 +#: engine/core/viewsets.py:813 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2931,25 +2963,25 @@ msgstr "" "模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " "实例的反馈信息" -#: core/viewsets.py:867 +#: engine/core/viewsets.py:867 msgid "Manages operations related to Product images in the application. " msgstr "管理应用程序中与产品图像相关的操作。" -#: core/viewsets.py:880 +#: engine/core/viewsets.py:880 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" -#: core/viewsets.py:902 +#: engine/core/viewsets.py:902 msgid "Represents a view set for managing promotions. " msgstr "代表用于管理促销活动的视图集。" -#: core/viewsets.py:915 +#: engine/core/viewsets.py:915 msgid "Handles operations related to Stock data in the system." msgstr "处理系统中与库存数据有关的操作。" -#: core/viewsets.py:929 +#: engine/core/viewsets.py:929 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2962,7 +2994,7 @@ msgstr "" "用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " "ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" -#: core/viewsets.py:1044 +#: engine/core/viewsets.py:1044 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2973,12 +3005,12 @@ msgstr "" "该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " "HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" -#: core/viewsets.py:1111 +#: engine/core/viewsets.py:1111 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" -#: core/viewsets.py:1119 +#: engine/core/viewsets.py:1119 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/payments/templates/__init__.py b/engine/core/management/__init__.py similarity index 100% rename from payments/templates/__init__.py rename to engine/core/management/__init__.py diff --git a/core/management/commands/__init__.py b/engine/core/management/commands/__init__.py similarity index 92% rename from core/management/commands/__init__.py rename to engine/core/management/commands/__init__.py index 21794264..12eac623 100644 --- a/core/management/commands/__init__.py +++ b/engine/core/management/commands/__init__.py @@ -39,4 +39,4 @@ DEEPL_TARGET_LANGUAGES_MAPPING = { "zh-hans": "ZH-HANS", } -TRANSLATABLE_APPS = ["core", "vibes_auth", "blog", "payments", "root"] +TRANSLATABLE_APPS = ["core", "authv", "blog", "payments", "root"] diff --git a/core/management/commands/await_services.py b/engine/core/management/commands/await_services.py similarity index 78% rename from core/management/commands/await_services.py rename to engine/core/management/commands/await_services.py index de564423..1686e034 100644 --- a/core/management/commands/await_services.py +++ b/engine/core/management/commands/await_services.py @@ -1,6 +1,6 @@ -import os import threading import time +from os import getenv from typing import Any import redis @@ -20,10 +20,10 @@ class Command(BaseCommand): while not db_up: try: conn = connect( - dbname=os.environ.get("POSTGRES_DB"), - user=os.environ.get("POSTGRES_USER"), - password=os.environ.get("POSTGRES_PASSWORD"), - host=os.environ.get("DB_HOST", "database"), + dbname=getenv("POSTGRES_DB"), + user=getenv("POSTGRES_USER"), + password=getenv("POSTGRES_PASSWORD"), + host=getenv("DB_HOST", "database"), ) conn.close() db_up = True @@ -37,10 +37,10 @@ class Command(BaseCommand): while not redis_up: try: connection = redis.StrictRedis( - host=os.environ.get("REDIS_HOST", "redis"), - port=int(os.environ.get("REDIS_PORT", 6379)), - db=int(os.environ.get("REDIS_DB", 0)), - password=os.environ.get("REDIS_PASSWORD", None), + host=getenv("REDIS_HOST", "redis"), + port=int(getenv("REDIS_PORT", 6379)), + db=int(getenv("REDIS_DB", 0)), + password=getenv("REDIS_PASSWORD", None), socket_timeout=5, retry_on_timeout=True, ) diff --git a/core/management/commands/check_translated.py b/engine/core/management/commands/check_translated.py similarity index 98% rename from core/management/commands/check_translated.py rename to engine/core/management/commands/check_translated.py index bfefc7b5..dee990dd 100644 --- a/core/management/commands/check_translated.py +++ b/engine/core/management/commands/check_translated.py @@ -10,7 +10,7 @@ from django.apps import apps from django.conf import settings from django.core.management.base import BaseCommand, CommandError -from core.management.commands import RootDirectory, TRANSLATABLE_APPS +from engine.core.management.commands import RootDirectory, TRANSLATABLE_APPS # Patterns to identify placeholders PLACEHOLDER_REGEXES = [ diff --git a/core/management/commands/clear_unwanted.py b/engine/core/management/commands/clear_unwanted.py similarity index 98% rename from core/management/commands/clear_unwanted.py rename to engine/core/management/commands/clear_unwanted.py index fbdad57e..c82c8ef4 100644 --- a/core/management/commands/clear_unwanted.py +++ b/engine/core/management/commands/clear_unwanted.py @@ -3,7 +3,7 @@ from typing import Any from django.core.management.base import BaseCommand -from core.models import Category, Product, Stock +from engine.core.models import Category, Product, Stock class Command(BaseCommand): diff --git a/core/management/commands/deepl_translate.py b/engine/core/management/commands/deepl_translate.py similarity index 98% rename from core/management/commands/deepl_translate.py rename to engine/core/management/commands/deepl_translate.py index 16dde6e6..345a1648 100644 --- a/core/management/commands/deepl_translate.py +++ b/engine/core/management/commands/deepl_translate.py @@ -1,6 +1,7 @@ import os import re from argparse import ArgumentParser +from os import getenv from tempfile import NamedTemporaryFile from typing import Any @@ -9,7 +10,7 @@ import requests from django.apps import apps from django.core.management.base import BaseCommand, CommandError -from core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS, RootDirectory +from engine.core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING, TRANSLATABLE_APPS, RootDirectory # Patterns to identify placeholders PLACEHOLDER_REGEXES = [ @@ -110,7 +111,7 @@ class Command(BaseCommand): for app_conf in list(apps.get_app_configs()) + [RootDirectory()] if app_conf.label in TRANSLATABLE_APPS } - auth_key = os.environ.get("DEEPL_AUTH_KEY") + auth_key = getenv("DEEPL_AUTH_KEY") if not auth_key: raise CommandError("DEEPL_AUTH_KEY not set") diff --git a/core/management/commands/delete_never_ordered_products.py b/engine/core/management/commands/delete_never_ordered_products.py similarity index 95% rename from core/management/commands/delete_never_ordered_products.py rename to engine/core/management/commands/delete_never_ordered_products.py index e3d63c6b..5f6fe6ce 100644 --- a/core/management/commands/delete_never_ordered_products.py +++ b/engine/core/management/commands/delete_never_ordered_products.py @@ -3,7 +3,7 @@ from typing import Any from django.core.management.base import BaseCommand -from core.models import AttributeValue, Product, ProductImage +from engine.core.models import AttributeValue, Product, ProductImage class Command(BaseCommand): diff --git a/core/management/commands/delete_products_by_description.py b/engine/core/management/commands/delete_products_by_description.py similarity index 95% rename from core/management/commands/delete_products_by_description.py rename to engine/core/management/commands/delete_products_by_description.py index 51ad1f5b..348e8781 100644 --- a/core/management/commands/delete_products_by_description.py +++ b/engine/core/management/commands/delete_products_by_description.py @@ -3,7 +3,7 @@ from typing import Any from django.core.management.base import BaseCommand -from core.models import AttributeValue, Product, ProductImage +from engine.core.models import AttributeValue, Product, ProductImage class Command(BaseCommand): diff --git a/core/management/commands/fetch_products.py b/engine/core/management/commands/fetch_products.py similarity index 90% rename from core/management/commands/fetch_products.py rename to engine/core/management/commands/fetch_products.py index 4df69765..5c2c736f 100644 --- a/core/management/commands/fetch_products.py +++ b/engine/core/management/commands/fetch_products.py @@ -2,7 +2,7 @@ from typing import Any from django.core.management.base import BaseCommand -from core.tasks import update_products_task +from engine.core.tasks import update_products_task class Command(BaseCommand): diff --git a/core/management/commands/fix_fuzzy.py b/engine/core/management/commands/fix_fuzzy.py similarity index 100% rename from core/management/commands/fix_fuzzy.py rename to engine/core/management/commands/fix_fuzzy.py diff --git a/core/management/commands/fix_prices.py b/engine/core/management/commands/fix_prices.py similarity index 91% rename from core/management/commands/fix_prices.py rename to engine/core/management/commands/fix_prices.py index be133619..01b9e206 100644 --- a/core/management/commands/fix_prices.py +++ b/engine/core/management/commands/fix_prices.py @@ -3,8 +3,8 @@ from typing import Any from django.core.management.base import BaseCommand -from core.models import Product -from core.vendors import AbstractVendor +from engine.core.models import Product +from engine.core.vendors import AbstractVendor logger = logging.getLogger(__name__) diff --git a/engine/core/management/commands/initialize.py b/engine/core/management/commands/initialize.py new file mode 100644 index 00000000..79006d29 --- /dev/null +++ b/engine/core/management/commands/initialize.py @@ -0,0 +1,25 @@ +import logging +from typing import Any + +from django.core.management.base import BaseCommand + +from engine.core.models import Vendor +from engine.authv.models import Group +from django.contrib.auth.models import Permission + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: + self.stdout.write(self.style.NOTICE("Initializing must-have instances...")) + + Vendor.objects.get_or_create(name="INNER") + Group.objects.all() + Permission.objects.all() + # TODO get_or_create a group "Product Listing Administrator" with corresponding permissions + # TODO get_or_create a group "Head Product Listing Administrator" with corresponding permissions + # TODO get_or_create a group "E-Commerce Administrator" with corresponding permissions + + # maybe use some .json file for future updates?.. Say, use the engine/core/fixtures/initialization.json + self.stdout.write(self.style.SUCCESS("Successfully initialized must-have instances!")) diff --git a/core/management/commands/rebuild_slugs.py b/engine/core/management/commands/rebuild_slugs.py similarity index 97% rename from core/management/commands/rebuild_slugs.py rename to engine/core/management/commands/rebuild_slugs.py index 5db3283c..ccc27f10 100644 --- a/core/management/commands/rebuild_slugs.py +++ b/engine/core/management/commands/rebuild_slugs.py @@ -5,7 +5,7 @@ from django.db import transaction from django.db.models import QuerySet from django.utils.crypto import get_random_string -from core.models import Brand, Category, Product +from engine.core.models import Brand, Category, Product # noinspection PyProtectedMember diff --git a/core/management/commands/set_default_caches.py b/engine/core/management/commands/set_default_caches.py similarity index 87% rename from core/management/commands/set_default_caches.py rename to engine/core/management/commands/set_default_caches.py index f1ea6850..87198223 100644 --- a/core/management/commands/set_default_caches.py +++ b/engine/core/management/commands/set_default_caches.py @@ -2,7 +2,7 @@ from typing import Any from django.core.management.base import BaseCommand -from core.utils.caching import set_default_cache +from engine.core.utils.caching import set_default_cache class Command(BaseCommand): diff --git a/core/management/commands/translate_fields.py b/engine/core/management/commands/translate_fields.py similarity index 96% rename from core/management/commands/translate_fields.py rename to engine/core/management/commands/translate_fields.py index 0d4dc1e8..2f3468bc 100644 --- a/core/management/commands/translate_fields.py +++ b/engine/core/management/commands/translate_fields.py @@ -1,12 +1,12 @@ import importlib -import os from argparse import ArgumentParser +from os import getenv import requests from django.core.management.base import BaseCommand, CommandError from django.db import transaction -from core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING +from engine.core.management.commands import DEEPL_TARGET_LANGUAGES_MAPPING DEEPL_API_URL = "https://api.deepl.com/v2/translate" @@ -63,7 +63,7 @@ class Command(BaseCommand): "Did you run makemigrations/migrate after setting up modeltranslation?" ) - auth_key = os.environ.get("DEEPL_AUTH_KEY") + auth_key = getenv("DEEPL_AUTH_KEY") if not auth_key: raise CommandError("Environment variable DEEPL_AUTH_KEY is not set.") diff --git a/core/managers.py b/engine/core/managers.py similarity index 100% rename from core/managers.py rename to engine/core/managers.py diff --git a/core/migrations/0001_initial.py b/engine/core/migrations/0001_initial.py similarity index 99% rename from core/migrations/0001_initial.py rename to engine/core/migrations/0001_initial.py index ddfced4c..bfb70c57 100644 --- a/core/migrations/0001_initial.py +++ b/engine/core/migrations/0001_initial.py @@ -8,8 +8,8 @@ import django_extensions.db.fields import mptt.fields from django.db import migrations, models -import core.utils -import core.validators +import engine.core.utils +import engine.core.validators class Migration(migrations.Migration): @@ -624,7 +624,7 @@ class Migration(migrations.Migration): "image", models.ImageField( help_text="upload the image file for this product", - upload_to=core.utils.get_product_uuid_as_path, + upload_to=engine.core.utils.get_product_uuid_as_path, verbose_name="product image", ), ), @@ -901,7 +901,7 @@ class Migration(migrations.Migration): ( "code", models.CharField( - default=core.utils.get_random_code, + default=engine.core.utils.get_random_code, help_text="unique code used by a user to redeem a discount", max_length=20, unique=True, @@ -2177,7 +2177,7 @@ class Migration(migrations.Migration): help_text="upload an image representing this category", null=True, upload_to="categories/", - validators=[core.validators.validate_category_image_dimensions], + validators=[engine.core.validators.validate_category_image_dimensions], verbose_name="category image", ), ), diff --git a/core/migrations/0002_initial.py b/engine/core/migrations/0002_initial.py similarity index 100% rename from core/migrations/0002_initial.py rename to engine/core/migrations/0002_initial.py diff --git a/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py similarity index 100% rename from core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py rename to engine/core/migrations/0003_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py diff --git a/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py b/engine/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py similarity index 100% rename from core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py rename to engine/core/migrations/0004_alter_product_name_alter_product_name_ar_ar_and_more.py diff --git a/core/migrations/0005_remove_brand_category_brand_categories.py b/engine/core/migrations/0005_remove_brand_category_brand_categories.py similarity index 100% rename from core/migrations/0005_remove_brand_category_brand_categories.py rename to engine/core/migrations/0005_remove_brand_category_brand_categories.py diff --git a/core/migrations/0006_alter_order_status.py b/engine/core/migrations/0006_alter_order_status.py similarity index 100% rename from core/migrations/0006_alter_order_status.py rename to engine/core/migrations/0006_alter_order_status.py diff --git a/core/migrations/0007_alter_category_image.py b/engine/core/migrations/0007_alter_category_image.py similarity index 83% rename from core/migrations/0007_alter_category_image.py rename to engine/core/migrations/0007_alter_category_image.py index 77939b03..9441998f 100644 --- a/core/migrations/0007_alter_category_image.py +++ b/engine/core/migrations/0007_alter_category_image.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import core.validators +import engine.core.validators class Migration(migrations.Migration): @@ -19,7 +19,7 @@ class Migration(migrations.Migration): help_text="upload an image representing this category", null=True, upload_to="categories/", - validators=[core.validators.validate_category_image_dimensions], + validators=[engine.core.validators.validate_category_image_dimensions], verbose_name="category image", ), ), diff --git a/core/migrations/0008_digitalassetdownload.py b/engine/core/migrations/0008_digitalassetdownload.py similarity index 100% rename from core/migrations/0008_digitalassetdownload.py rename to engine/core/migrations/0008_digitalassetdownload.py diff --git a/core/migrations/0009_documentary.py b/engine/core/migrations/0009_documentary.py similarity index 94% rename from core/migrations/0009_documentary.py rename to engine/core/migrations/0009_documentary.py index 8beb86b4..0f16956d 100644 --- a/core/migrations/0009_documentary.py +++ b/engine/core/migrations/0009_documentary.py @@ -6,7 +6,7 @@ import django.db.models.deletion import django_extensions.db.fields from django.db import migrations, models -import core.utils +import engine.core.utils class Migration(migrations.Migration): @@ -51,7 +51,7 @@ class Migration(migrations.Migration): auto_now=True, help_text="when the object was last modified", verbose_name="modified" ), ), - ("document", models.FileField(upload_to=core.utils.get_product_uuid_as_path)), + ("document", models.FileField(upload_to=engine.core.utils.get_product_uuid_as_path)), ( "product", models.ForeignKey( diff --git a/core/migrations/0010_product_partnumber.py b/engine/core/migrations/0010_product_partnumber.py similarity index 100% rename from core/migrations/0010_product_partnumber.py rename to engine/core/migrations/0010_product_partnumber.py diff --git a/core/migrations/0011_brand_big_logo_brand_description_and_more.py b/engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py similarity index 97% rename from core/migrations/0011_brand_big_logo_brand_description_and_more.py rename to engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py index 8dbb4df0..ae1355cf 100644 --- a/core/migrations/0011_brand_big_logo_brand_description_and_more.py +++ b/engine/core/migrations/0011_brand_big_logo_brand_description_and_more.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import core.validators +import engine.core.validators class Migration(migrations.Migration): @@ -19,7 +19,7 @@ class Migration(migrations.Migration): help_text="upload a big logo representing this brand", null=True, upload_to="brands/", - validators=[core.validators.validate_category_image_dimensions], + validators=[engine.core.validators.validate_category_image_dimensions], verbose_name="brand big image", ), ), @@ -221,7 +221,7 @@ class Migration(migrations.Migration): help_text="upload a logo representing this brand", null=True, upload_to="brands/", - validators=[core.validators.validate_category_image_dimensions], + validators=[engine.core.validators.validate_category_image_dimensions], verbose_name="brand small image", ), ), diff --git a/core/migrations/0012_alter_order_user.py b/engine/core/migrations/0012_alter_order_user.py similarity index 100% rename from core/migrations/0012_alter_order_user.py rename to engine/core/migrations/0012_alter_order_user.py diff --git a/core/migrations/0013_product_slug.py b/engine/core/migrations/0013_product_slug.py similarity index 100% rename from core/migrations/0013_product_slug.py rename to engine/core/migrations/0013_product_slug.py diff --git a/core/migrations/0014_alter_product_slug.py b/engine/core/migrations/0014_alter_product_slug.py similarity index 100% rename from core/migrations/0014_alter_product_slug.py rename to engine/core/migrations/0014_alter_product_slug.py diff --git a/core/migrations/0015_alter_product_slug.py b/engine/core/migrations/0015_alter_product_slug.py similarity index 100% rename from core/migrations/0015_alter_product_slug.py rename to engine/core/migrations/0015_alter_product_slug.py diff --git a/core/migrations/0016_alter_product_slug.py b/engine/core/migrations/0016_alter_product_slug.py similarity index 100% rename from core/migrations/0016_alter_product_slug.py rename to engine/core/migrations/0016_alter_product_slug.py diff --git a/core/migrations/0017_order_human_readable_id.py b/engine/core/migrations/0017_order_human_readable_id.py similarity index 85% rename from core/migrations/0017_order_human_readable_id.py rename to engine/core/migrations/0017_order_human_readable_id.py index 36572585..ff60dd02 100644 --- a/core/migrations/0017_order_human_readable_id.py +++ b/engine/core/migrations/0017_order_human_readable_id.py @@ -2,7 +2,7 @@ from django.db import migrations, models -import core.utils +import engine.core.utils class Migration(migrations.Migration): @@ -15,7 +15,7 @@ class Migration(migrations.Migration): model_name="order", name="human_readable_id", field=models.CharField( - default=core.utils.generate_human_readable_id, + default=engine.core.utils.generate_human_readable_id, help_text="a human-readable identifier for the order", max_length=8, verbose_name="human readable id", diff --git a/core/migrations/0018_alter_order_human_readable_id.py b/engine/core/migrations/0018_alter_order_human_readable_id.py similarity index 89% rename from core/migrations/0018_alter_order_human_readable_id.py rename to engine/core/migrations/0018_alter_order_human_readable_id.py index 5fe3e70a..e608c7e8 100644 --- a/core/migrations/0018_alter_order_human_readable_id.py +++ b/engine/core/migrations/0018_alter_order_human_readable_id.py @@ -1,7 +1,7 @@ from django.db import migrations, models from django.db.models import Count -import core.utils +import engine.core.utils def fix_duplicates(apps, schema_editor): @@ -15,7 +15,7 @@ def fix_duplicates(apps, schema_editor): for order in orders[1:]: new_id = order.human_readable_id while Order.objects.filter(human_readable_id=new_id).exists(): - from core.utils import generate_human_readable_id + from engine.core.utils import generate_human_readable_id new_id = generate_human_readable_id() order.human_readable_id = new_id @@ -41,7 +41,7 @@ class Migration(migrations.Migration): model_name="order", name="human_readable_id", field=models.CharField( - default=core.utils.generate_human_readable_id, + default=engine.core.utils.generate_human_readable_id, help_text="a human-readable identifier for the order", max_length=8, unique=True, diff --git a/core/migrations/0019_address.py b/engine/core/migrations/0019_address.py similarity index 100% rename from core/migrations/0019_address.py rename to engine/core/migrations/0019_address.py diff --git a/core/migrations/0020_order_billing_address_order_shipping_address.py b/engine/core/migrations/0020_order_billing_address_order_shipping_address.py similarity index 100% rename from core/migrations/0020_order_billing_address_order_shipping_address.py rename to engine/core/migrations/0020_order_billing_address_order_shipping_address.py diff --git a/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py similarity index 100% rename from core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py rename to engine/core/migrations/0021_rename_name_ar_ar_attribute_name_ar_ar_and_more.py diff --git a/core/migrations/0022_category_slug.py b/engine/core/migrations/0022_category_slug.py similarity index 100% rename from core/migrations/0022_category_slug.py rename to engine/core/migrations/0022_category_slug.py diff --git a/core/migrations/0023_address_address_line.py b/engine/core/migrations/0023_address_address_line.py similarity index 100% rename from core/migrations/0023_address_address_line.py rename to engine/core/migrations/0023_address_address_line.py diff --git a/core/migrations/0024_categorytag_category_tags.py b/engine/core/migrations/0024_categorytag_category_tags.py similarity index 100% rename from core/migrations/0024_categorytag_category_tags.py rename to engine/core/migrations/0024_categorytag_category_tags.py diff --git a/core/migrations/0025_alter_product_category.py b/engine/core/migrations/0025_alter_product_category.py similarity index 100% rename from core/migrations/0025_alter_product_category.py rename to engine/core/migrations/0025_alter_product_category.py diff --git a/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py b/engine/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py similarity index 100% rename from core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py rename to engine/core/migrations/0026_brand_slug_alter_category_slug_alter_product_slug.py diff --git a/core/migrations/0027_brand_priority_alter_brand_slug.py b/engine/core/migrations/0027_brand_priority_alter_brand_slug.py similarity index 100% rename from core/migrations/0027_brand_priority_alter_brand_slug.py rename to engine/core/migrations/0027_brand_priority_alter_brand_slug.py diff --git a/core/migrations/0028_alter_category_slug_alter_product_slug.py b/engine/core/migrations/0028_alter_category_slug_alter_product_slug.py similarity index 100% rename from core/migrations/0028_alter_category_slug_alter_product_slug.py rename to engine/core/migrations/0028_alter_category_slug_alter_product_slug.py diff --git a/core/migrations/0029_alter_category_slug.py b/engine/core/migrations/0029_alter_category_slug.py similarity index 100% rename from core/migrations/0029_alter_category_slug.py rename to engine/core/migrations/0029_alter_category_slug.py diff --git a/core/migrations/0030_alter_category_slug.py b/engine/core/migrations/0030_alter_category_slug.py similarity index 100% rename from core/migrations/0030_alter_category_slug.py rename to engine/core/migrations/0030_alter_category_slug.py diff --git a/core/migrations/0031_alter_product_slug.py b/engine/core/migrations/0031_alter_product_slug.py similarity index 100% rename from core/migrations/0031_alter_product_slug.py rename to engine/core/migrations/0031_alter_product_slug.py diff --git a/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py b/engine/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py similarity index 100% rename from core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py rename to engine/core/migrations/0032_alter_brand_slug_alter_category_slug_and_more.py diff --git a/core/migrations/0033_alter_category_slug.py b/engine/core/migrations/0033_alter_category_slug.py similarity index 87% rename from core/migrations/0033_alter_category_slug.py rename to engine/core/migrations/0033_alter_category_slug.py index a022aba5..935076eb 100644 --- a/core/migrations/0033_alter_category_slug.py +++ b/engine/core/migrations/0033_alter_category_slug.py @@ -2,7 +2,7 @@ from django.db import migrations -import core.utils.db +import engine.core.utils.db class Migration(migrations.Migration): @@ -14,7 +14,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="category", name="slug", - field=core.utils.db.TweakedAutoSlugField( + field=engine.core.utils.db.TweakedAutoSlugField( allow_unicode=True, blank=True, editable=False, diff --git a/core/migrations/0034_category_priority_alter_brand_priority.py b/engine/core/migrations/0034_category_priority_alter_brand_priority.py similarity index 100% rename from core/migrations/0034_category_priority_alter_brand_priority.py rename to engine/core/migrations/0034_category_priority_alter_brand_priority.py diff --git a/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py b/engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py similarity index 94% rename from core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py rename to engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py index 16a5702d..7708849b 100644 --- a/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py +++ b/engine/core/migrations/0035_alter_brand_slug_alter_category_slug_and_more.py @@ -1,6 +1,6 @@ # Generated by Django 5.2 on 2025-06-29 13:09 -import core.utils.db +import engine.core.utils.db import django_extensions.db.fields from django.db import migrations @@ -29,7 +29,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="category", name="slug", - field=core.utils.db.TweakedAutoSlugField( + field=engine.core.utils.db.TweakedAutoSlugField( allow_unicode=True, blank=True, editable=False, diff --git a/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py b/engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py similarity index 89% rename from core/migrations/0036_vendor_b2b_auth_token_vendor_users.py rename to engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py index 0d2c74a2..01ded0d4 100644 --- a/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py +++ b/engine/core/migrations/0036_vendor_b2b_auth_token_vendor_users.py @@ -1,6 +1,6 @@ # Generated by Django 5.2 on 2025-07-28 08:55 -import core.utils +import engine.core.utils from django.conf import settings from django.db import migrations, models @@ -17,7 +17,7 @@ class Migration(migrations.Migration): name="b2b_auth_token", field=models.CharField( blank=True, - default=core.utils.generate_human_readable_token, + default=engine.core.utils.generate_human_readable_token, max_length=20, null=True, ), diff --git a/core/migrations/0037_product_sku.py b/engine/core/migrations/0037_product_sku.py similarity index 100% rename from core/migrations/0037_product_sku.py rename to engine/core/migrations/0037_product_sku.py diff --git a/core/migrations/0038_backfill_product_sku.py b/engine/core/migrations/0038_backfill_product_sku.py similarity index 93% rename from core/migrations/0038_backfill_product_sku.py rename to engine/core/migrations/0038_backfill_product_sku.py index b10511d3..be467a8b 100644 --- a/core/migrations/0038_backfill_product_sku.py +++ b/engine/core/migrations/0038_backfill_product_sku.py @@ -12,7 +12,7 @@ def generate_unique_sku(make_candidate, taken): # noinspection PyUnusedLocal def backfill_sku(apps, schema_editor): Product = apps.get_model("core", "Product") - from core.utils import generate_human_readable_id as make_candidate + from engine.core.utils import generate_human_readable_id as make_candidate taken = set(Product.objects.exclude(sku__isnull=True).values_list("sku", flat=True)) diff --git a/core/migrations/0039_alter_product_sku.py b/engine/core/migrations/0039_alter_product_sku.py similarity index 85% rename from core/migrations/0039_alter_product_sku.py rename to engine/core/migrations/0039_alter_product_sku.py index f7363647..64afae40 100644 --- a/core/migrations/0039_alter_product_sku.py +++ b/engine/core/migrations/0039_alter_product_sku.py @@ -1,6 +1,6 @@ # Generated by Django 5.2 on 2025-09-01 17:36 -import core.utils +import engine.core.utils from django.db import migrations, models @@ -14,7 +14,7 @@ class Migration(migrations.Migration): model_name="product", name="sku", field=models.CharField( - default=core.utils.generate_human_readable_id, + default=engine.core.utils.generate_human_readable_id, help_text="stock keeping unit for this product", max_length=8, unique=True, diff --git a/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py b/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py similarity index 100% rename from core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py rename to engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py diff --git a/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py b/engine/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py similarity index 100% rename from core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py rename to engine/core/migrations/0041_alter_customerrelationshipmanagementprovider_options.py diff --git a/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py b/engine/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py similarity index 100% rename from core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py rename to engine/core/migrations/0042_attribute_name_fa_ir_attribute_name_he_il_and_more.py diff --git a/core/migrations/0043_attribute_is_filterable_and_more.py b/engine/core/migrations/0043_attribute_is_filterable_and_more.py similarity index 100% rename from core/migrations/0043_attribute_is_filterable_and_more.py rename to engine/core/migrations/0043_attribute_is_filterable_and_more.py diff --git a/core/migrations/0044_vendor_last_processing_response.py b/engine/core/migrations/0044_vendor_last_processing_response.py similarity index 85% rename from core/migrations/0044_vendor_last_processing_response.py rename to engine/core/migrations/0044_vendor_last_processing_response.py index 0dd24216..168b2a9c 100644 --- a/core/migrations/0044_vendor_last_processing_response.py +++ b/engine/core/migrations/0044_vendor_last_processing_response.py @@ -1,6 +1,6 @@ # Generated by Django 5.2 on 2025-10-13 12:15 -import core.utils +import engine.core.utils from django.db import migrations, models @@ -17,7 +17,7 @@ class Migration(migrations.Migration): blank=True, help_text="vendor's last processing response", null=True, - upload_to=core.utils.get_vendor_name_as_path, + upload_to=engine.core.utils.get_vendor_name_as_path, verbose_name="response file", ), ), diff --git a/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py b/engine/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py similarity index 100% rename from core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py rename to engine/core/migrations/0045_alter_product_name_alter_product_name_ar_ar_and_more.py diff --git a/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py b/engine/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py similarity index 100% rename from core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py rename to engine/core/migrations/0046_alter_attribute_name_alter_attribute_name_ar_ar_and_more.py diff --git a/core/migrations/0047_alter_attribute_unique_together.py b/engine/core/migrations/0047_alter_attribute_unique_together.py similarity index 100% rename from core/migrations/0047_alter_attribute_unique_together.py rename to engine/core/migrations/0047_alter_attribute_unique_together.py diff --git a/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py b/engine/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py similarity index 100% rename from core/migrations/0048_vendor_integration_path_alter_productimage_priority.py rename to engine/core/migrations/0048_vendor_integration_path_alter_productimage_priority.py diff --git a/core/migrations/0049_alter_attribute_unique_together.py b/engine/core/migrations/0049_alter_attribute_unique_together.py similarity index 100% rename from core/migrations/0049_alter_attribute_unique_together.py rename to engine/core/migrations/0049_alter_attribute_unique_together.py diff --git a/core/migrations/0050_remove_attribute_categories.py b/engine/core/migrations/0050_remove_attribute_categories.py similarity index 100% rename from core/migrations/0050_remove_attribute_categories.py rename to engine/core/migrations/0050_remove_attribute_categories.py diff --git a/core/migrations/0051_stock_system_attributes.py b/engine/core/migrations/0051_stock_system_attributes.py similarity index 100% rename from core/migrations/0051_stock_system_attributes.py rename to engine/core/migrations/0051_stock_system_attributes.py diff --git a/core/migrations/0052_alter_stock_system_attributes.py b/engine/core/migrations/0052_alter_stock_system_attributes.py similarity index 100% rename from core/migrations/0052_alter_stock_system_attributes.py rename to engine/core/migrations/0052_alter_stock_system_attributes.py diff --git a/vibes_auth/__init__.py b/engine/core/migrations/__init__.py similarity index 100% rename from vibes_auth/__init__.py rename to engine/core/migrations/__init__.py diff --git a/core/mixins.py b/engine/core/mixins.py similarity index 100% rename from core/mixins.py rename to engine/core/mixins.py diff --git a/core/models.py b/engine/core/models.py similarity index 98% rename from core/models.py rename to engine/core/models.py index 6e6e45fb..44894521 100644 --- a/core/models.py +++ b/engine/core/models.py @@ -5,6 +5,7 @@ from contextlib import suppress from typing import Any, Optional, Self, Iterable from constance import config +from django.conf import settings from django.contrib.gis.db.models import PointField from django.contrib.postgres.indexes import GinIndex from django.core.cache import cache @@ -48,24 +49,23 @@ from django_prometheus.models import ExportModelOperationsMixin from mptt.fields import TreeForeignKey from mptt.models import MPTTModel -from core.abstract import NiceModel -from core.choices import ORDER_PRODUCT_STATUS_CHOICES, ORDER_STATUS_CHOICES -from core.errors import DisabledCommerceError, NotEnoughMoneyError -from core.managers import AddressManager, ProductManager -from core.typing import FilterableAttribute -from core.utils import ( +from engine.core.abstract import NiceModel +from engine.core.choices import ORDER_PRODUCT_STATUS_CHOICES, ORDER_STATUS_CHOICES +from engine.core.errors import DisabledCommerceError, NotEnoughMoneyError +from engine.core.managers import AddressManager, ProductManager +from engine.core.typing import FilterableAttribute +from engine.core.utils import ( generate_human_readable_id, generate_human_readable_token, get_product_uuid_as_path, get_random_code, get_vendor_name_as_path, ) -from core.utils.db import TweakedAutoSlugField, unicode_slugify_function -from core.utils.lists import FAILED_STATUSES -from core.validators import validate_category_image_dimensions -from evibes.settings import CURRENCY_CODE +from engine.core.utils.db import TweakedAutoSlugField, unicode_slugify_function +from engine.core.utils.lists import FAILED_STATUSES +from engine.core.validators import validate_category_image_dimensions from evibes.utils.misc import create_object -from payments.models import Transaction +from engine.payments.models import Transaction logger = logging.getLogger(__name__) @@ -138,7 +138,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): # type: ignore [ null=False, unique=True, ) - users = ManyToManyField(to="vibes_auth.User", related_name="vendors", blank=True) + users = ManyToManyField(to=settings.AUTH_USER_MODEL, related_name="vendors", blank=True) b2b_auth_token = CharField(default=generate_human_readable_token, max_length=20, null=True, blank=True) last_processing_response = FileField( upload_to=get_vendor_name_as_path, @@ -369,7 +369,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # .distinct() ) - per_cat: dict[int, dict[int, dict]] = {} + per_cat: dict[int, dict[int, dict[str, Any]]] = {} for cat_id, attr_id, attr_name, value_type, value in rows: cat_bucket = per_cat.get(cat_id) if cat_bucket is None: @@ -913,7 +913,7 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): # type: igno verbose_name=_("wishlisted products"), ) user = OneToOneField( - "vibes_auth.User", + "authv.User", on_delete=CASCADE, blank=True, null=True, @@ -977,7 +977,7 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): # is_publicly_visible = True - product = ForeignKey(to=Product, on_delete=CASCADE, related_name="documentaries") + product = ForeignKey(to="core.Product", on_delete=CASCADE, related_name="documentaries") document = FileField(upload_to=get_product_uuid_as_path) class Meta: @@ -1038,7 +1038,7 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): # type: ignore help_text=_("stored JSON response from the geocoding service"), ) - user = ForeignKey(to="vibes_auth.User", on_delete=CASCADE, blank=True, null=True) + user = ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=CASCADE, blank=True, null=True) objects = AddressManager() @@ -1107,7 +1107,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): # type: ig verbose_name=_("usage timestamp"), ) user = ForeignKey( - "vibes_auth.User", + "authv.User", on_delete=CASCADE, help_text=_("user assigned to this promocode if applicable"), verbose_name=_("assigned user"), @@ -1236,7 +1236,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi verbose_name=_("attributes"), ) user = ForeignKey( - "vibes_auth.User", + "authv.User", on_delete=CASCADE, help_text=_("the user who placed the order"), verbose_name=_("user"), @@ -1538,7 +1538,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi return Transaction.objects.create( balance=order.user.payments_balance, amount=amount, - currency=CURRENCY_CODE, + currency=settings.CURRENCY_CODE, order=order, ) case _: @@ -1597,7 +1597,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi return Transaction.objects.create( amount=amount, - currency=CURRENCY_CODE, + currency=settings.CURRENCY_CODE, order=self, payment_method=kwargs.get("payment_method"), ) diff --git a/core/permissions.py b/engine/core/permissions.py similarity index 100% rename from core/permissions.py rename to engine/core/permissions.py diff --git a/core/serializers/__init__.py b/engine/core/serializers/__init__.py similarity index 100% rename from core/serializers/__init__.py rename to engine/core/serializers/__init__.py diff --git a/core/serializers/detail.py b/engine/core/serializers/detail.py similarity index 94% rename from core/serializers/detail.py rename to engine/core/serializers/detail.py index 3afe0476..e63c9307 100644 --- a/core/serializers/detail.py +++ b/engine/core/serializers/detail.py @@ -1,12 +1,13 @@ import logging from contextlib import suppress -from typing import Collection, Any +from typing import Any +from drf_spectacular.utils import extend_schema_field from rest_framework.fields import JSONField, SerializerMethodField -from rest_framework.serializers import ModelSerializer, ListSerializer +from rest_framework.serializers import ListSerializer, ModelSerializer from rest_framework_recursive.fields import RecursiveField -from core.models import ( +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, @@ -24,9 +25,9 @@ from core.models import ( Vendor, Wishlist, ) -from core.serializers.simple import CategorySimpleSerializer, ProductSimpleSerializer -from core.typing import FilterableAttribute -from core.serializers.utility import AddressSerializer +from engine.core.serializers.simple import CategorySimpleSerializer, ProductSimpleSerializer +from engine.core.serializers.utility import AddressSerializer +from engine.core.typing import FilterableAttribute logger = logging.getLogger(__name__) @@ -82,14 +83,15 @@ class CategoryDetailSerializer(ModelSerializer): def get_filterable_attributes(self, obj: Category) -> list[FilterableAttribute]: return obj.filterable_attributes - def get_children(self, obj) -> Collection[Any]: + @extend_schema_field(CategorySimpleSerializer(many=True)) + def get_children(self, obj: Category) -> list[dict[str, Any]]: request = self.context.get("request") if request is not None and request.user.has_perm("view_category"): children = obj.children.all() else: children = obj.children.filter(is_active=True) - return CategoryDetailSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] + return CategorySimpleSerializer(children, many=True, context=self.context).data if obj.children.exists() else [] class BrandDetailSerializer(ModelSerializer): diff --git a/core/serializers/seo.py b/engine/core/serializers/seo.py similarity index 100% rename from core/serializers/seo.py rename to engine/core/serializers/seo.py diff --git a/core/serializers/simple.py b/engine/core/serializers/simple.py similarity index 97% rename from core/serializers/simple.py rename to engine/core/serializers/simple.py index ae1e4144..88bb0bcc 100644 --- a/core/serializers/simple.py +++ b/engine/core/serializers/simple.py @@ -1,11 +1,11 @@ from contextlib import suppress -from typing import Collection, Any +from typing import Any from rest_framework.fields import JSONField, SerializerMethodField from rest_framework.relations import PrimaryKeyRelatedField from rest_framework.serializers import ModelSerializer -from core.models import ( +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, @@ -23,7 +23,7 @@ from core.models import ( Vendor, Wishlist, ) -from core.serializers.utility import AddressSerializer +from engine.core.serializers.utility import AddressSerializer class AttributeGroupSimpleSerializer(ModelSerializer): # type: ignore [type-arg] @@ -59,7 +59,7 @@ class CategorySimpleSerializer(ModelSerializer): # type: ignore [type-arg] return str(obj.image.url) return None - def get_children(self, obj: Category) -> Collection[Any]: + def get_children(self, obj: Category) -> dict[str, Any]: request = self.context.get("request") if request is not None and request.user.has_perm("view_category"): children = obj.children.all() diff --git a/core/serializers/utility.py b/engine/core/serializers/utility.py similarity index 99% rename from core/serializers/utility.py rename to engine/core/serializers/utility.py index 09f4ac20..94dcb8d5 100644 --- a/core/serializers/utility.py +++ b/engine/core/serializers/utility.py @@ -15,7 +15,7 @@ from rest_framework.fields import ( ) from rest_framework.serializers import ListSerializer, ModelSerializer, Serializer -from core.models import Address +from engine.core.models import Address class AddressAutocompleteInputSerializer(Serializer): # type: ignore [type-arg] diff --git a/core/signals.py b/engine/core/signals.py similarity index 94% rename from core/signals.py rename to engine/core/signals.py index 091df75b..676dbac9 100644 --- a/core/signals.py +++ b/engine/core/signals.py @@ -11,16 +11,16 @@ from django.utils.http import urlsafe_base64_decode from django.utils.timezone import now from sentry_sdk import capture_exception -from core.crm import any_crm_integrations -from core.crm.exceptions import CRMException -from core.models import Category, DigitalAssetDownload, Order, Product, PromoCode, Wishlist -from core.utils import ( +from engine.core.crm import any_crm_integrations +from engine.core.crm.exceptions import CRMException +from engine.core.models import Category, DigitalAssetDownload, Order, Product, PromoCode, Wishlist +from engine.core.utils import ( generate_human_readable_id, resolve_translations_for_elasticsearch, ) -from core.utils.emailing import send_order_created_email, send_order_finished_email, send_promocode_created_email +from engine.core.utils.emailing import send_order_created_email, send_order_finished_email, send_promocode_created_email from evibes.utils.misc import create_object -from vibes_auth.models import User +from engine.authv.models import User logger = logging.getLogger(__name__) diff --git a/core/sitemaps.py b/engine/core/sitemaps.py similarity index 97% rename from core/sitemaps.py rename to engine/core/sitemaps.py index 62f49c17..2af42a70 100644 --- a/core/sitemaps.py +++ b/engine/core/sitemaps.py @@ -2,8 +2,8 @@ from django.conf import settings from django.contrib.sitemaps import Sitemap from django.utils.translation import gettext_lazy as _ -from blog.models import Post -from core.models import Brand, Category, Product +from engine.blog.models import Post +from engine.core.models import Brand, Category, Product class SitemapLanguageMixin: diff --git a/core/static/Source Code Pro ExtraLight_Regular.json b/engine/core/static/Source Code Pro ExtraLight_Regular.json similarity index 100% rename from core/static/Source Code Pro ExtraLight_Regular.json rename to engine/core/static/Source Code Pro ExtraLight_Regular.json diff --git a/core/static/css/constance.css b/engine/core/static/css/constance.css similarity index 100% rename from core/static/css/constance.css rename to engine/core/static/css/constance.css diff --git a/core/static/favicon.ico b/engine/core/static/favicon.ico similarity index 100% rename from core/static/favicon.ico rename to engine/core/static/favicon.ico diff --git a/core/static/favicon.png b/engine/core/static/favicon.png similarity index 100% rename from core/static/favicon.png rename to engine/core/static/favicon.png diff --git a/core/static/flags/ar-ar.png b/engine/core/static/flags/ar-ar.png similarity index 100% rename from core/static/flags/ar-ar.png rename to engine/core/static/flags/ar-ar.png diff --git a/core/static/flags/cs-cz.png b/engine/core/static/flags/cs-cz.png similarity index 100% rename from core/static/flags/cs-cz.png rename to engine/core/static/flags/cs-cz.png diff --git a/core/static/flags/da-dk.png b/engine/core/static/flags/da-dk.png similarity index 100% rename from core/static/flags/da-dk.png rename to engine/core/static/flags/da-dk.png diff --git a/core/static/flags/de-de.png b/engine/core/static/flags/de-de.png similarity index 100% rename from core/static/flags/de-de.png rename to engine/core/static/flags/de-de.png diff --git a/core/static/flags/en-gb.png b/engine/core/static/flags/en-gb.png similarity index 100% rename from core/static/flags/en-gb.png rename to engine/core/static/flags/en-gb.png diff --git a/core/static/flags/en-us.png b/engine/core/static/flags/en-us.png similarity index 100% rename from core/static/flags/en-us.png rename to engine/core/static/flags/en-us.png diff --git a/core/static/flags/es-es.png b/engine/core/static/flags/es-es.png similarity index 100% rename from core/static/flags/es-es.png rename to engine/core/static/flags/es-es.png diff --git a/core/static/flags/fa-ir.png b/engine/core/static/flags/fa-ir.png similarity index 100% rename from core/static/flags/fa-ir.png rename to engine/core/static/flags/fa-ir.png diff --git a/core/static/flags/fr-fr.png b/engine/core/static/flags/fr-fr.png similarity index 100% rename from core/static/flags/fr-fr.png rename to engine/core/static/flags/fr-fr.png diff --git a/core/static/flags/he-il.png b/engine/core/static/flags/he-il.png similarity index 100% rename from core/static/flags/he-il.png rename to engine/core/static/flags/he-il.png diff --git a/core/static/flags/hi-in.png b/engine/core/static/flags/hi-in.png similarity index 100% rename from core/static/flags/hi-in.png rename to engine/core/static/flags/hi-in.png diff --git a/core/static/flags/hr-hr.png b/engine/core/static/flags/hr-hr.png similarity index 100% rename from core/static/flags/hr-hr.png rename to engine/core/static/flags/hr-hr.png diff --git a/core/static/flags/id-id.png b/engine/core/static/flags/id-id.png similarity index 100% rename from core/static/flags/id-id.png rename to engine/core/static/flags/id-id.png diff --git a/core/static/flags/it-it.png b/engine/core/static/flags/it-it.png similarity index 100% rename from core/static/flags/it-it.png rename to engine/core/static/flags/it-it.png diff --git a/core/static/flags/ja-jp.png b/engine/core/static/flags/ja-jp.png similarity index 100% rename from core/static/flags/ja-jp.png rename to engine/core/static/flags/ja-jp.png diff --git a/core/static/flags/kk-kz.png b/engine/core/static/flags/kk-kz.png similarity index 100% rename from core/static/flags/kk-kz.png rename to engine/core/static/flags/kk-kz.png diff --git a/core/static/flags/ko-kr.png b/engine/core/static/flags/ko-kr.png similarity index 100% rename from core/static/flags/ko-kr.png rename to engine/core/static/flags/ko-kr.png diff --git a/core/static/flags/nl-nl.png b/engine/core/static/flags/nl-nl.png similarity index 100% rename from core/static/flags/nl-nl.png rename to engine/core/static/flags/nl-nl.png diff --git a/core/static/flags/no-no.png b/engine/core/static/flags/no-no.png similarity index 100% rename from core/static/flags/no-no.png rename to engine/core/static/flags/no-no.png diff --git a/core/static/flags/pl-pl.png b/engine/core/static/flags/pl-pl.png similarity index 100% rename from core/static/flags/pl-pl.png rename to engine/core/static/flags/pl-pl.png diff --git a/core/static/flags/pt-br.png b/engine/core/static/flags/pt-br.png similarity index 100% rename from core/static/flags/pt-br.png rename to engine/core/static/flags/pt-br.png diff --git a/core/static/flags/ro-ro.png b/engine/core/static/flags/ro-ro.png similarity index 100% rename from core/static/flags/ro-ro.png rename to engine/core/static/flags/ro-ro.png diff --git a/core/static/flags/ru-ru.png b/engine/core/static/flags/ru-ru.png similarity index 100% rename from core/static/flags/ru-ru.png rename to engine/core/static/flags/ru-ru.png diff --git a/core/static/flags/sv-se.png b/engine/core/static/flags/sv-se.png similarity index 100% rename from core/static/flags/sv-se.png rename to engine/core/static/flags/sv-se.png diff --git a/core/static/flags/th-th.png b/engine/core/static/flags/th-th.png similarity index 100% rename from core/static/flags/th-th.png rename to engine/core/static/flags/th-th.png diff --git a/core/static/flags/tr-tr.png b/engine/core/static/flags/tr-tr.png similarity index 100% rename from core/static/flags/tr-tr.png rename to engine/core/static/flags/tr-tr.png diff --git a/core/static/flags/vi-vn.png b/engine/core/static/flags/vi-vn.png similarity index 100% rename from core/static/flags/vi-vn.png rename to engine/core/static/flags/vi-vn.png diff --git a/core/static/flags/zh-hans.png b/engine/core/static/flags/zh-hans.png similarity index 100% rename from core/static/flags/zh-hans.png rename to engine/core/static/flags/zh-hans.png diff --git a/core/static/logo.png b/engine/core/static/logo.png similarity index 100% rename from core/static/logo.png rename to engine/core/static/logo.png diff --git a/core/static/maintenance.html b/engine/core/static/maintenance.html similarity index 100% rename from core/static/maintenance.html rename to engine/core/static/maintenance.html diff --git a/core/static/robots_backend.txt b/engine/core/static/robots_backend.txt similarity index 100% rename from core/static/robots_backend.txt rename to engine/core/static/robots_backend.txt diff --git a/core/static/robots_frontend.txt b/engine/core/static/robots_frontend.txt similarity index 100% rename from core/static/robots_frontend.txt rename to engine/core/static/robots_frontend.txt diff --git a/core/tasks.py b/engine/core/tasks.py similarity index 95% rename from core/tasks.py rename to engine/core/tasks.py index 7430977b..6b0c1e0d 100644 --- a/core/tasks.py +++ b/engine/core/tasks.py @@ -10,13 +10,13 @@ from typing import Any, Type import requests from celery.app import shared_task from constance import config +from django.conf import settings from django.core.cache import cache -from core.models import Product, Promotion -from core.utils.caching import set_default_cache -from core.utils.vendors import get_vendors_integrations -from core.vendors import AbstractVendor, VendorInactiveError, delete_stale -from evibes.settings import MEDIA_ROOT +from engine.core.models import Product, Promotion +from engine.core.utils.caching import set_default_cache +from engine.core.utils.vendors import get_vendors_integrations +from engine.core.vendors import AbstractVendor, VendorInactiveError, delete_stale logger = logging.getLogger(__name__) @@ -111,7 +111,7 @@ def remove_stale_product_images() -> tuple[bool, str]: :return: None """ - products_dir = os.path.join(MEDIA_ROOT, "products") + products_dir = os.path.join(settings.MEDIA_ROOT, "products") if not os.path.isdir(products_dir): logger.info("The products directory does not exist: %s", products_dir) return True, "The products directory does not exist." diff --git a/vibes_auth/docs/__init__.py b/engine/core/templates/__init__.py similarity index 100% rename from vibes_auth/docs/__init__.py rename to engine/core/templates/__init__.py diff --git a/core/templates/contact_us_email.html b/engine/core/templates/contact_us_email.html similarity index 100% rename from core/templates/contact_us_email.html rename to engine/core/templates/contact_us_email.html diff --git a/core/templates/digital_order_created_email.html b/engine/core/templates/digital_order_created_email.html similarity index 100% rename from core/templates/digital_order_created_email.html rename to engine/core/templates/digital_order_created_email.html diff --git a/core/templates/digital_order_delivered_email.html b/engine/core/templates/digital_order_delivered_email.html similarity index 100% rename from core/templates/digital_order_delivered_email.html rename to engine/core/templates/digital_order_delivered_email.html diff --git a/core/templates/json_table_widget.html b/engine/core/templates/json_table_widget.html similarity index 100% rename from core/templates/json_table_widget.html rename to engine/core/templates/json_table_widget.html diff --git a/core/templates/promocode_granted_email.html b/engine/core/templates/promocode_granted_email.html similarity index 100% rename from core/templates/promocode_granted_email.html rename to engine/core/templates/promocode_granted_email.html diff --git a/core/templates/shipped_order_created_email.html b/engine/core/templates/shipped_order_created_email.html similarity index 100% rename from core/templates/shipped_order_created_email.html rename to engine/core/templates/shipped_order_created_email.html diff --git a/core/templates/shipped_order_delivered_email.html b/engine/core/templates/shipped_order_delivered_email.html similarity index 100% rename from core/templates/shipped_order_delivered_email.html rename to engine/core/templates/shipped_order_delivered_email.html diff --git a/vibes_auth/docs/drf/__init__.py b/engine/core/templatetags/__init__.py similarity index 100% rename from vibes_auth/docs/drf/__init__.py rename to engine/core/templatetags/__init__.py diff --git a/core/templatetags/conditions.py b/engine/core/templatetags/conditions.py similarity index 100% rename from core/templatetags/conditions.py rename to engine/core/templatetags/conditions.py diff --git a/core/templatetags/filters.py b/engine/core/templatetags/filters.py similarity index 100% rename from core/templatetags/filters.py rename to engine/core/templatetags/filters.py diff --git a/payments/tests.py b/engine/core/tests.py similarity index 100% rename from payments/tests.py rename to engine/core/tests.py diff --git a/core/translation.py b/engine/core/translation.py similarity index 97% rename from core/translation.py rename to engine/core/translation.py index 67a6743f..3aee6628 100644 --- a/core/translation.py +++ b/engine/core/translation.py @@ -1,7 +1,7 @@ from modeltranslation.decorators import register from modeltranslation.translator import TranslationOptions -from core.models import ( +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, diff --git a/core/typing/__init__.py b/engine/core/typing/__init__.py similarity index 100% rename from core/typing/__init__.py rename to engine/core/typing/__init__.py diff --git a/core/typing/models.py b/engine/core/typing/models.py similarity index 100% rename from core/typing/models.py rename to engine/core/typing/models.py diff --git a/engine/core/urls.py b/engine/core/urls.py new file mode 100644 index 00000000..3e4828f2 --- /dev/null +++ b/engine/core/urls.py @@ -0,0 +1,180 @@ +from django.urls import include, path +from rest_framework.routers import DefaultRouter + +from engine.core.sitemaps import BrandSitemap, CategorySitemap, ProductSitemap, StaticPagesSitemap +from engine.core.views import ( + CacheOperatorView, + ContactUsView, + DownloadDigitalAssetView, + GlobalSearchView, + RequestCursedURLView, + SupportedLanguagesView, + WebsiteParametersView, + sitemap_detail, + sitemap_index, + version, +) +from engine.core.viewsets import ( + AddressViewSet, + AttributeGroupViewSet, + BrandViewSet, + CategoryViewSet, + FeedbackViewSet, + OrderProductViewSet, + OrderViewSet, + ProductTagViewSet, + ProductViewSet, + PromoCodeViewSet, + PromotionViewSet, + StockViewSet, + VendorViewSet, + WishlistViewSet, +) + +app_name = "core" + +core_router = DefaultRouter() +core_router.register( + r"products", + ProductViewSet, + basename="products", +) +core_router.register( + r"orders", + OrderViewSet, + basename="orders", +) +core_router.register( + r"wishlists", + WishlistViewSet, + basename="wishlists", +) +core_router.register( + r"attribute_groups", + AttributeGroupViewSet, + basename="attribute_groups", +) +core_router.register( + r"brands", + BrandViewSet, + basename="brands", +) +core_router.register( + r"categories", + CategoryViewSet, + basename="categories", +) +core_router.register( + r"vendors", + VendorViewSet, + basename="vendors", +) +core_router.register( + r"feedbacks", + FeedbackViewSet, + basename="feedbacks", +) +core_router.register( + r"stocks", + StockViewSet, + basename="stocks", +) +core_router.register( + r"promo_codes", + PromoCodeViewSet, + basename="promo_codes", +) +core_router.register( + r"promotions", + PromotionViewSet, + basename="promotions", +) +core_router.register( + r"addresses", + AddressViewSet, + basename="addresses", +) +core_router.register( + r"product_tags", + ProductTagViewSet, + basename="product_tags", +) +core_router.register( + r"order_products", + OrderProductViewSet, + basename="order_products", +) + +sitemaps = { + "static": StaticPagesSitemap, + "products": ProductSitemap, + "categories": CategorySitemap, + "brands": BrandSitemap, +} + +urlpatterns = [ + path( + "core/", + include(core_router.urls), + ), + path( + r"version/", + version, + ), + path( + "sitemap.xml", + sitemap_index, + { + "sitemaps": sitemaps, + "sitemap_url_name": "core:sitemap-detail", + }, + name="sitemap-index", + ), + path( + "sitemap-

.xml", + sitemap_detail, + {"sitemaps": sitemaps}, + name="sitemap-detail", + ), + path( + "sitemap-
-.xml", + sitemap_detail, + {"sitemaps": sitemaps}, + name="sitemap-detail", + ), + path( + "download//", + DownloadDigitalAssetView.as_view(), + name="download_digital_asset", + ), + path( + "search/", + GlobalSearchView.as_view(), + name="global_search", + ), + path( + "app/cache/", + CacheOperatorView.as_view(), + name="cache_operator", + ), + path( + "app/languages/", + SupportedLanguagesView.as_view(), + name="supported_languages", + ), + path( + "app/parameters/", + WebsiteParametersView.as_view(), + name="parameters", + ), + path( + "app/contact_us/", + ContactUsView.as_view(), + name="contact_us", + ), + path( + "app/request_cursed_url/", + RequestCursedURLView.as_view(), + name="request_cursed_url", + ), +] diff --git a/core/utils/__init__.py b/engine/core/utils/__init__.py similarity index 96% rename from core/utils/__init__.py rename to engine/core/utils/__init__.py index debb76ea..e12de6af 100644 --- a/core/utils/__init__.py +++ b/engine/core/utils/__init__.py @@ -15,7 +15,6 @@ from django.utils.translation import get_language from graphene import Context from rest_framework.request import Request -from evibes.settings import DEBUG, EXPOSABLE_KEYS, LANGUAGE_CODE logger = logging.getLogger(__name__) @@ -91,7 +90,7 @@ def atomic_if_not_debug() -> Generator[None, None, None]: an exception. If the DEBUG setting is enabled, no transaction is enforced, allowing for easier debugging. """ - if not DEBUG: + if not settings.DEBUG: with transaction.atomic(): yield else: @@ -142,7 +141,7 @@ def get_project_parameters() -> Any: parameters = cache.get("parameters", {}) if not parameters: - for key in EXPOSABLE_KEYS: + for key in settings.EXPOSABLE_KEYS: if not getattr(config, key): continue parameters[key.lower()] = getattr(config, key) @@ -158,10 +157,10 @@ def resolve_translations_for_elasticsearch(instance, field_name: str) -> None: format. It checks if the localized version of the field contains data, and if not, sets it to the value of the default field. """ - field = getattr(instance, f"{field_name}_{LANGUAGE_CODE}", "") + field = getattr(instance, f"{field_name}_{settings.LANGUAGE_CODE}", "") filled_field = getattr(instance, field_name, "") if not field: - setattr(instance, f"{field_name}_{LANGUAGE_CODE}", filled_field) + setattr(instance, f"{field_name}_{settings.LANGUAGE_CODE}", filled_field) CROCKFORD = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789" diff --git a/core/utils/caching.py b/engine/core/utils/caching.py similarity index 93% rename from core/utils/caching.py rename to engine/core/utils/caching.py index 0e2696cd..f551fe03 100644 --- a/core/utils/caching.py +++ b/engine/core/utils/caching.py @@ -3,20 +3,20 @@ import logging from pathlib import Path from typing import Any, Type +from django.conf import settings from django.core.cache import cache from django.core.exceptions import BadRequest from django.utils.translation import gettext_lazy as _ from graphene import Context from rest_framework.request import Request -from evibes.settings import UNSAFE_CACHE_KEYS -from vibes_auth.models import User +from engine.authv.models import User logger = logging.getLogger(__name__) def is_safe_cache_key(key: str) -> bool: - return key not in UNSAFE_CACHE_KEYS + return key not in settings.UNSAFE_CACHE_KEYS def get_cached_value(user: Type[User], key: str, default: Any = None) -> Any: diff --git a/core/utils/db.py b/engine/core/utils/db.py similarity index 100% rename from core/utils/db.py rename to engine/core/utils/db.py diff --git a/core/utils/emailing.py b/engine/core/utils/emailing.py similarity index 95% rename from core/utils/emailing.py rename to engine/core/utils/emailing.py index 64192495..ae1f6eb5 100644 --- a/core/utils/emailing.py +++ b/engine/core/utils/emailing.py @@ -9,8 +9,8 @@ from django.template.loader import render_to_string from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ -from core.models import Order, OrderProduct, PromoCode -from core.utils import get_dynamic_email_connection +from engine.core.models import Order, OrderProduct, PromoCode +from engine.core.utils import get_dynamic_email_connection logger = logging.getLogger(__name__) @@ -26,7 +26,7 @@ def contact_us_email(contact_info) -> tuple[bool, str]: email = EmailMessage( _(f"{config.PROJECT_NAME} | contact us initiated"), render_to_string( - "contact_us_email.html", + "../templates/contact_us_email.html", { "email": contact_info.get("email"), "name": contact_info.get("name"), @@ -104,7 +104,7 @@ def send_order_finished_email(order_pk: str) -> tuple[bool, str]: email = EmailMessage( _(f"{config.PROJECT_NAME} | order delivered"), render_to_string( - template_name="digital_order_delivered_email.html", + template_name="../templates/digital_order_delivered_email.html", context={ "order_uuid": order.human_readable_id, "user_first_name": "" or order.user.first_name, @@ -187,7 +187,7 @@ def send_promocode_created_email(promocode_pk: str) -> tuple[bool, str]: email = EmailMessage( _(f"{config.PROJECT_NAME} | promocode granted"), render_to_string( - template_name="promocode_granted_email.html", + template_name="../templates/promocode_granted_email.html", context={ "promocode": promocode, "user_first_name": "" or promocode.user.first_name, diff --git a/core/utils/languages.py b/engine/core/utils/languages.py similarity index 100% rename from core/utils/languages.py rename to engine/core/utils/languages.py diff --git a/core/utils/lists.py b/engine/core/utils/lists.py similarity index 100% rename from core/utils/lists.py rename to engine/core/utils/lists.py diff --git a/core/utils/messages.py b/engine/core/utils/messages.py similarity index 100% rename from core/utils/messages.py rename to engine/core/utils/messages.py diff --git a/core/utils/nominatim.py b/engine/core/utils/nominatim.py similarity index 100% rename from core/utils/nominatim.py rename to engine/core/utils/nominatim.py diff --git a/core/utils/security.py b/engine/core/utils/security.py similarity index 59% rename from core/utils/security.py rename to engine/core/utils/security.py index 10113518..4878667e 100644 --- a/core/utils/security.py +++ b/engine/core/utils/security.py @@ -1,4 +1,4 @@ -from core.utils.lists import BAD_KEYS_TO_LISTEN +from engine.core.utils.lists import BAD_KEYS_TO_LISTEN def is_safe_key(attr: str) -> bool: diff --git a/core/utils/seo_builders.py b/engine/core/utils/seo_builders.py similarity index 98% rename from core/utils/seo_builders.py rename to engine/core/utils/seo_builders.py index 50e9c035..b76fd322 100644 --- a/core/utils/seo_builders.py +++ b/engine/core/utils/seo_builders.py @@ -1,7 +1,7 @@ from constance import config from django.conf import settings -from core.models import Product +from engine.core.models import Product def org_schema(): diff --git a/core/utils/vendors.py b/engine/core/utils/vendors.py similarity index 89% rename from core/utils/vendors.py rename to engine/core/utils/vendors.py index 61774fc5..103301eb 100644 --- a/core/utils/vendors.py +++ b/engine/core/utils/vendors.py @@ -1,8 +1,8 @@ import logging from typing import Type -from core.models import Vendor -from core.vendors import AbstractVendor +from engine.core.models import Vendor +from engine.core.vendors import AbstractVendor from evibes.utils.misc import create_object logger = logging.getLogger(__name__) diff --git a/core/validators.py b/engine/core/validators.py similarity index 100% rename from core/validators.py rename to engine/core/validators.py diff --git a/core/vendors/__init__.py b/engine/core/vendors/__init__.py similarity index 98% rename from core/vendors/__init__.py rename to engine/core/vendors/__init__.py index 0bd9f1f3..dcb241bf 100644 --- a/core/vendors/__init__.py +++ b/engine/core/vendors/__init__.py @@ -16,8 +16,8 @@ from django.db import IntegrityError, transaction from django.db.models import QuerySet from django.db.utils import OperationalError -from core.elasticsearch import process_system_query -from core.models import ( +from engine.core.elasticsearch import process_system_query +from engine.core.models import ( Attribute, AttributeGroup, AttributeValue, @@ -29,8 +29,8 @@ from core.models import ( Vendor, ) from evibes.utils.misc import LoggingError, LogLevel -from payments.errors import RatesError -from payments.utils import get_rates +from engine.payments.errors import RatesError +from engine.payments.utils import get_rates logger = logging.getLogger(__name__) @@ -93,10 +93,6 @@ class AbstractVendor: specific markup percentages, retrieving vendor instances, fetching queryset data for products and stocks, and performing bulk operations like updates or deletions on inactive objects. - - Attributes: - vendor_name (str | None): Name of the vendor associated with this class - instance. """ def __init__(self, vendor_name: str | None = None, currency: str = "USD") -> None: @@ -105,7 +101,8 @@ class AbstractVendor: self.blocked_attributes: list[Any] = [] def __str__(self) -> str: - return self.get_vendor_instance(safe=True).name if self.get_vendor_instance() else self.vendor_name + vendor = self.get_vendor_instance(safe=True) + return str(vendor.name) if vendor else self.vendor_name def log(self, level: LogLevel, message: str) -> None: match level: diff --git a/core/views.py b/engine/core/views.py similarity index 96% rename from core/views.py rename to engine/core/views.py index 34a74ce5..5e4513a0 100644 --- a/core/views.py +++ b/engine/core/views.py @@ -4,6 +4,7 @@ import os import traceback import requests +from django.conf import settings from django.contrib.sitemaps.views import index as _sitemap_index_view from django.contrib.sitemaps.views import sitemap as _sitemap_detail_view from django.core.cache import cache @@ -31,7 +32,7 @@ from rest_framework_xml.renderers import XMLRenderer from rest_framework_yaml.renderers import YAMLRenderer from sentry_sdk import capture_exception -from core.docs.drf.views import ( +from engine.core.docs.drf.views import ( BUY_AS_BUSINESS_SCHEMA, CACHE_SCHEMA, CONTACT_US_SCHEMA, @@ -40,21 +41,19 @@ from core.docs.drf.views import ( REQUEST_CURSED_URL_SCHEMA, SEARCH_SCHEMA, ) -from core.elasticsearch import process_query -from core.models import DigitalAssetDownload, Order -from core.serializers import ( +from engine.core.elasticsearch import process_query +from engine.core.models import DigitalAssetDownload, Order +from engine.core.serializers import ( BuyAsBusinessOrderSerializer, CacheOperatorSerializer, ContactUsSerializer, LanguageSerializer, ) -from core.utils import get_project_parameters, is_url_safe -from core.utils.caching import web_cache -from core.utils.emailing import contact_us_email -from core.utils.languages import get_flag_by_language -from evibes import settings -from evibes.settings import LANGUAGES -from payments.serializers import TransactionProcessSerializer +from engine.core.utils import get_project_parameters, is_url_safe +from engine.core.utils.caching import web_cache +from engine.core.utils.emailing import contact_us_email +from engine.core.utils.languages import get_flag_by_language +from engine.payments.serializers import TransactionProcessSerializer logger = logging.getLogger(__name__) @@ -135,7 +134,7 @@ class SupportedLanguagesView(APIView): "name": lang[1], "flag": get_flag_by_language(lang[0]), } - for lang in LANGUAGES + for lang in settings.LANGUAGES ], many=True, ).data, diff --git a/core/viewsets.py b/engine/core/viewsets.py similarity index 98% rename from core/viewsets.py rename to engine/core/viewsets.py index ce8adc6b..5106923d 100644 --- a/core/viewsets.py +++ b/engine/core/viewsets.py @@ -26,7 +26,7 @@ from rest_framework.viewsets import ModelViewSet from rest_framework_xml.renderers import XMLRenderer from rest_framework_yaml.renderers import YAMLRenderer -from core.docs.drf.viewsets import ( +from engine.core.docs.drf.viewsets import ( ADDRESS_SCHEMA, ATTRIBUTE_GROUP_SCHEMA, ATTRIBUTE_SCHEMA, @@ -45,8 +45,8 @@ from core.docs.drf.viewsets import ( VENDOR_SCHEMA, WISHLIST_SCHEMA, ) -from core.filters import AddressFilter, BrandFilter, CategoryFilter, FeedbackFilter, OrderFilter, ProductFilter -from core.models import ( +from engine.core.filters import AddressFilter, BrandFilter, CategoryFilter, FeedbackFilter, OrderFilter, ProductFilter +from engine.core.models import ( Address, Attribute, AttributeGroup, @@ -65,8 +65,8 @@ from core.models import ( Vendor, Wishlist, ) -from core.permissions import EvibesPermission -from core.serializers import ( +from engine.core.permissions import EvibesPermission +from engine.core.serializers import ( AddOrderProductSerializer, AddressAutocompleteInputSerializer, AddressCreateSerializer, @@ -114,11 +114,11 @@ from core.serializers import ( WishlistDetailSerializer, WishlistSimpleSerializer, ) -from core.serializers.seo import SeoSnapshotSerializer -from core.utils import format_attributes -from core.utils.messages import permission_denied_message -from core.utils.nominatim import fetch_address_suggestions -from core.utils.seo_builders import ( +from engine.core.serializers.seo import SeoSnapshotSerializer +from engine.core.utils import format_attributes +from engine.core.utils.messages import permission_denied_message +from engine.core.utils.nominatim import fetch_address_suggestions +from engine.core.utils.seo_builders import ( brand_schema, breadcrumb_schema, category_schema, @@ -127,7 +127,7 @@ from core.utils.seo_builders import ( product_schema, website_schema, ) -from payments.serializers import TransactionProcessSerializer +from engine.payments.serializers import TransactionProcessSerializer logger = logging.getLogger(__name__) diff --git a/core/widgets.py b/engine/core/widgets.py similarity index 100% rename from core/widgets.py rename to engine/core/widgets.py diff --git a/vibes_auth/graphene/__init__.py b/engine/payments/__init__.py similarity index 100% rename from vibes_auth/graphene/__init__.py rename to engine/payments/__init__.py diff --git a/payments/admin.py b/engine/payments/admin.py similarity index 87% rename from payments/admin.py rename to engine/payments/admin.py index 77e5bf2c..78d54b63 100644 --- a/payments/admin.py +++ b/engine/payments/admin.py @@ -4,9 +4,9 @@ from django.db.models import QuerySet from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ -from core.admin import ActivationActionsMixin -from payments.forms import GatewayForm, TransactionForm -from payments.models import Balance, Transaction, Gateway +from engine.core.admin import ActivationActionsMixin +from engine.payments.forms import GatewayForm, TransactionForm +from engine.payments.models import Balance, Transaction, Gateway class TransactionInline(admin.TabularInline): # type: ignore [type-arg] @@ -44,7 +44,7 @@ class TransactionAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [mis @register(Gateway) -class GatewayAdmin(ActivationActionsMixin, ModelAdmin): +class GatewayAdmin(ActivationActionsMixin, ModelAdmin): # type: ignore [misc] list_display = ( "name", "can_be_used", diff --git a/payments/apps.py b/engine/payments/apps.py similarity index 79% rename from payments/apps.py rename to engine/payments/apps.py index 459bcbc8..6651a136 100644 --- a/payments/apps.py +++ b/engine/payments/apps.py @@ -4,11 +4,11 @@ from django.utils.translation import gettext_lazy as _ class PaymentsConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" - name = "payments" + name = "engine.payments" verbose_name = _("payments") icon = "fa fa-solid fa-wallet" priority = 87 hide = False def ready(self) -> None: - import payments.signals # noqa: F401 + import engine.payments.signals # noqa: F401 diff --git a/payments/choices.py b/engine/payments/choices.py similarity index 100% rename from payments/choices.py rename to engine/payments/choices.py diff --git a/vibes_auth/messaging/__init__.py b/engine/payments/docs/__init__.py similarity index 100% rename from vibes_auth/messaging/__init__.py rename to engine/payments/docs/__init__.py diff --git a/vibes_auth/migrations/__init__.py b/engine/payments/docs/drf/__init__.py similarity index 100% rename from vibes_auth/migrations/__init__.py rename to engine/payments/docs/drf/__init__.py diff --git a/payments/docs/drf/views.py b/engine/payments/docs/drf/views.py similarity index 80% rename from payments/docs/drf/views.py rename to engine/payments/docs/drf/views.py index 92ab96ef..543ab301 100644 --- a/payments/docs/drf/views.py +++ b/engine/payments/docs/drf/views.py @@ -2,8 +2,8 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema from rest_framework import status -from core.docs.drf import error -from payments.serializers import DepositSerializer, TransactionProcessSerializer +from engine.core.docs.drf import error +from engine.payments.serializers import DepositSerializer, TransactionProcessSerializer DEPOSIT_SCHEMA = { "post": extend_schema( diff --git a/payments/docs/drf/viewsets.py b/engine/payments/docs/drf/viewsets.py similarity index 51% rename from payments/docs/drf/viewsets.py rename to engine/payments/docs/drf/viewsets.py index ef24c2cd..db47eace 100644 --- a/payments/docs/drf/viewsets.py +++ b/engine/payments/docs/drf/viewsets.py @@ -1,9 +1,10 @@ from django.utils.translation import gettext_lazy as _ -from drf_spectacular.utils import extend_schema +from drf_spectacular.utils import extend_schema, OpenApiParameter +from drf_spectacular.types import OpenApiTypes from rest_framework import status -from core.docs.drf import BASE_ERRORS -from payments.serializers import TransactionSerializer +from engine.core.docs.drf import BASE_ERRORS +from engine.payments.serializers import TransactionSerializer TRANSACTION_SCHEMA = { "list": extend_schema( @@ -12,6 +13,14 @@ TRANSACTION_SCHEMA = { ), "retrieve": extend_schema( summary=_("retrieve a single transaction (read-only)"), + parameters=[ + OpenApiParameter( + name="uuid", + location="path", + description=_("Transaction UUID"), + type=OpenApiTypes.UUID, + ), + ], responses={status.HTTP_200_OK: TransactionSerializer(), **BASE_ERRORS}, ), } diff --git a/payments/errors.py b/engine/payments/errors.py similarity index 100% rename from payments/errors.py rename to engine/payments/errors.py diff --git a/payments/forms.py b/engine/payments/forms.py similarity index 81% rename from payments/forms.py rename to engine/payments/forms.py index b752d00b..cfa3d522 100644 --- a/payments/forms.py +++ b/engine/payments/forms.py @@ -1,7 +1,7 @@ from django import forms -from core.widgets import JSONTableWidget -from payments.models import Gateway, Transaction +from engine.core.widgets import JSONTableWidget +from engine.payments.models import Gateway, Transaction class TransactionForm(forms.ModelForm): # type: ignore [type-arg] diff --git a/payments/gateways/__init__.py b/engine/payments/gateways/__init__.py similarity index 100% rename from payments/gateways/__init__.py rename to engine/payments/gateways/__init__.py diff --git a/vibes_auth/templates/__init__.py b/engine/payments/graphene/__init__.py similarity index 100% rename from vibes_auth/templates/__init__.py rename to engine/payments/graphene/__init__.py diff --git a/payments/graphene/mutations.py b/engine/payments/graphene/mutations.py similarity index 73% rename from payments/graphene/mutations.py rename to engine/payments/graphene/mutations.py index aa162a04..23c540ce 100644 --- a/payments/graphene/mutations.py +++ b/engine/payments/graphene/mutations.py @@ -1,10 +1,10 @@ import graphene from rest_framework.exceptions import PermissionDenied -from core.graphene import BaseMutation -from core.utils.messages import permission_denied_message -from payments.graphene.object_types import TransactionType -from payments.models import Transaction +from engine.core.graphene import BaseMutation +from engine.core.utils.messages import permission_denied_message +from engine.payments.graphene.object_types import TransactionType +from engine.payments.models import Transaction class Deposit(BaseMutation): diff --git a/payments/graphene/object_types.py b/engine/payments/graphene/object_types.py similarity index 94% rename from payments/graphene/object_types.py rename to engine/payments/graphene/object_types.py index 13fd2748..c33e7405 100644 --- a/payments/graphene/object_types.py +++ b/engine/payments/graphene/object_types.py @@ -4,7 +4,7 @@ from graphene import relay from graphene.types.generic import GenericScalar from graphene_django import DjangoObjectType -from payments.models import Balance, Transaction +from engine.payments.models import Balance, Transaction class TransactionType(DjangoObjectType): diff --git a/engine/payments/locale/ar_AR/LC_MESSAGES/django.mo b/engine/payments/locale/ar_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a2b19e18ec5c9bb1c6b121e488b32f3897753b0f GIT binary patch literal 5322 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "المعاملات" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "المعاملات" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "يمكن استخدامها" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "المدفوعات" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "الإيداع" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "سحب" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "الإيداع في الرصيد" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "إيداع بعض الأموال لتحقيق التوازن" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "سرد جميع المعاملات (للقراءة فقط)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "استرداد معاملة واحدة (للقراءة فقط)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "معرّف المعاملة UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "طلب المعالجة بعد الدفع" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "تفاصيل المعالجة" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "يجب أن يتناسب مبلغ المعاملة مع " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "الرصيد" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "الموازين" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "الاسم" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "العملة الافتراضية" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "العملات" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "الحد الأدنى لمبلغ المعاملة" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "الحد الأقصى لمبلغ المعاملة" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "الحد اليومي" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "الحد الشهري" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "الأولوية" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "متغيرات التكامل" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "بوابة الدفع" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "بوابات الدفع" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "لم يتم تعيين مسار تكامل البوابة" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "مسار تكامل غير صالح: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "إيداع الرصيد" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "الشعار" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "مرحباً %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "لقد نجحنا في إيداع رصيد حسابك في %(amount)s. رصيدك الحالي\n" " رصيدك الحالي هو %(balance)s__." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "إذا كان لديك أي أسئلة، فلا تتردد في الاتصال بدعمنا على\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "مع أطيب تحياتي،
فريق %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "جميع الحقوق محفوظة" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "مطلوب مزود للحصول على الأسعار من" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "تعذر العثور على مزود {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | إيداع الرصيد" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4988cb9927be4a4d075d1b4770dcdbd0b1bf562 GIT binary patch literal 4667 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transakce" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transakce" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Lze použít" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Platby" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Vklad" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Stáhnout" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Vklad do zůstatku" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Vložte nějaké peníze na účet" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Seznam všech transakcí (pouze pro čtení)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Získání jedné transakce (pouze pro čtení)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID transakce" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Objednávka ke zpracování po zaplacení" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Podrobnosti o zpracování" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Částka transakce se musí vejít do rozmezí " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Bilance" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Váhy" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "název" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "výchozí měna" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "měny" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "seznam měn podporovaných touto bránou oddělený čárkou," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimální částka transakce" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maximální částka transakce" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "denní limit" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "měsíční limit" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priorita" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integrační proměnné" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "platební brána" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "platební brány" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "cesta integrace brány není nastavena" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "neplatná cesta integrace: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Zůstatková záloha" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Ahoj %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "Na váš účet jsme úspěšně připsali %(amount)s. Váš aktuální\n" " je %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "Pokud máte jakékoli dotazy, neváhejte kontaktovat naši podporu na adrese\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "S pozdravem,
tým %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Všechna práva vyhrazena" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Je třeba mít poskytovatele, od kterého lze získat sazby" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Nepodařilo se najít poskytovatele {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Zůstatek vkladu" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/da_DK/LC_MESSAGES/django.mo b/engine/payments/locale/da_DK/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2214c974123dec5f5283ad978a801fd8795f0435 GIT binary patch literal 4651 zcmbuCU2I%O6~~7VzDy|)pnMi4&=9-zZk)8JmGdF&*l|q!C3|hCkTA1*XLoP*?!DWY zd+jVu5E3A@uSiuNkl-od4I!R_)E8ul55Y^t3#tGKsXXw;6G8$Be&>E<*G?M*z4Gk; z&fJ+Z=lsu^bH;x|_Q8LE9|7Ae`Yd=8lzn~(9tVF8%KTrH_-F8a^#28304Gpd<}HDr z1Xn<@rwfWcH$eW>izR*!6n(xAPJurL#m?V@P4IQ_A#mwE=mIuChSaOzY49~LfX`!) z@Im?=7We26LGi_3SSzFWfl#A<3O)k90*XGr1BG9i+yx#2F-c`$ z1b!RjPyLObN$?oXfzEs{u~VKYn&^H?Iy}c{GFP6@(}Y*C`QtQsgb#@Yc}~(kLlYYw zr-@G0gQ@u=`iqWoE~@9#t5AG_mnC zjboU{*JEJ*G@OaOX{BKj>+S931+^2}{Vkj7cH(r`#6c9s9qp_MYDpXobuzHd$ZW4! zk#?;fm(WiF8`X8A8+zS}jQ4urlD#mnUYju?VVqjmHZ7a)lJ`UfHrfxK@t(L`B*t)BV_e{;FErgHQQ*`h zlwY^4bT>AAJB3!(^p$AYv|>`AT1mfew6_Bz$^<$J5tFoaD|61qtq}cuHW(yMJ~oG# zg{B>*?wjGXW_cC`@o6F?gyYh`PCsA0-BKe#Dlj3WMqwYli+7*(i@t0*&emyd`bie2 zzOH8=oUqh!QZ2P@lSOHz;!sswl&F2ux4NIi7IhO{F;{&Z8!GM45_Fv+lJ&q4bl4at zIN7GEYojQENC|-5cIbS?<+KXhdYEJ!j6F+;4fS&wJ}3gAZEb{OEisVjRuZR#v`#Wt zk*Q5Op&#&^nk*OX+CHpJ5kBKe?ipge8ClQh9zh@6XTq%b9#f{g%3UfkHBPXeymySJ zRFrfQ)i*c7KK>Y+RXRcS!}v`Miy|%uiFI-+czFC6~X_uY?c~P3wjf)%d3kc!_L-cCN2}`gkr5R9H4V*Z=`1ikqP7Ty45v~ zym4{6ai#XmXr8Fvwyw4qw~~Oco7K-W!*pUJ%AAR6R}$CvvpOE+U4QZ1d0o6-oQ(C! zi~8);`3aSqZ+dx#sU0fMX&CA5!RU2z9o1?%O$WEjV_rzh zD|KY!x?ZqxY;{knwbdOYIBnx2!Z?8L;7;sqJ2D8C&5Np?3nN^bYEWmPYu?q&o=z7VB~t?V=c9HzI2 zk-U^eyVuLL7VRU%PwO59u?;6C=nycuMa6l~EwV1Qb+sT=xLk04zrda>Xbwdz3dm}b z4${c_M$JW}6%tKK6^H!%M$)w11TDOpFH8BBiGqZ(*(5Q^#Y*iQ-07rNtwP|Qjia!m zyCf_d7v-D?=E`uiqSw_mspi70S3N1_c`b*&lyd1)SQIBxB(l_qt)fj9^Xt=tyMzXp zu{ML^_NuI_YngOI;YsQ`SB28jQC+XAol+#Fyd%1nK~Z%n0p&H`@L5UNO1ZFck13Q^%W>d)S)jHK?xd7u$=CzS0-}y92gG|J(#A5e;xhMPKCViu zYGd`&Q>NJuCUP5*!vHQz)m3}_jcff?l9Udl*h?54+;tt_Ke!!Dix7tQY$W6(w2b4P z)chXw? zmA|?E7Kg}}?pE_h1~_-+h;`Nd0Ef?yB j7yQ6JFdXv}Bq4t2de9*K_t+rMlugR(o8A-dOL6}JLkDXo literal 0 HcmV?d00001 diff --git a/payments/locale/da_DK/LC_MESSAGES/django.po b/engine/payments/locale/da_DK/LC_MESSAGES/django.po similarity index 70% rename from payments/locale/da_DK/LC_MESSAGES/django.po rename to engine/payments/locale/da_DK/LC_MESSAGES/django.po index d65007da..c47fad23 100644 --- a/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/payments/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transaktioner" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kan bruges" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Betalinger" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Indskud" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Træk dig tilbage" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Indbetaling til saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Sæt nogle penge ind på saldoen" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Liste over alle transaktioner (skrivebeskyttet)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Hent en enkelt transaktion (skrivebeskyttet)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Transaktions-UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ordre til behandling efter betaling" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Behandling af detaljer" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,95 +74,95 @@ msgstr "" "Transaktionsbeløbet skal passe ind i " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Vægte" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "Navn" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "Standardvaluta" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "Valutaer" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "kommasepareret liste over valutaer, der understøttes af denne gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "mindste transaktionsbeløb" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maksimalt transaktionsbeløb" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daglig grænse" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "månedlig grænse" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioritet" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "Integrationsvariabler" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "betalingsgateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "Betalingsgateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "gateway-integrationsstien er ikke indstillet" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Ugyldig integrationssti: %(path)s." -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldoindbetaling" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -167,7 +171,7 @@ msgstr "" "Vi har krediteret din konto med %(amount)s. Din nuværende\n" " saldo er %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -176,30 +180,30 @@ msgstr "" "Hvis du har spørgsmål, er du velkommen til at kontakte vores support på\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med venlig hilsen,
teamet %(project_name)s." -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Alle rettigheder forbeholdes" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Der er brug for en udbyder at få priser fra" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Kunne ikke finde udbyder {provider}." -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldoindbetaling" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/de_DE/LC_MESSAGES/django.mo b/engine/payments/locale/de_DE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..16da6d7d58e37d05e8d64fb1869b4186455bb268 GIT binary patch literal 4829 zcmb`KOKc=Z8OMtd0+@G52(Lheu&hly#@QrF!NBw>hoMZejDCZTR?E4+?Uhwy31-3WIN_ze(KsS*@TaCyUGRQT#;<~t;LkwJS#bpySJxE3!i^L4P~8T~TDe4~JGkXckzX#6U$`Kb*y!`z zqJ!{S;$?hcis}-%MMjB>@%6dUgV+XZ0{M)3wzp)ks9(puIE>bZp3! zm}qA7a@1vDlN-+4vOYCgdSHFEQ5X$nBP7=x+nAAW>)qNs)zVoPN?+}3BKn}8DdV8< zY?;W3K1}PqL7{VtMZ(Z_(_Y%um>^F>5FzK^At{o%l42zJ)@i?fC4Qy!p#wTI=@s58& z1UNB?$-ia0@v<|yokA*WawSrBtf-WzZjt9k2Rk$(Oro=tZHk`mmfl;}O_48@!(rj& zWoI9?khIUzJ+nWp`Mk^$cM^uA*m&e$ub&$~J+F>8Qi(}1YL@26T|b91ug7v^(^@CB z$&1p(Fr#NNIJDHR7=LPerp)44#C$!uVD7t$whQDIJek1A6^RW21yH4UsM zkHUCLWktVGxw(?&_@l9Ek|McqOTKn?Se0%ZI{L`0Lm)Dk8w^yHU-E_hHQ`Lgz5kc+Q znpdH$(n+t(FmjjdkV+szJ1>bwLZnWUCnoEFfhqOdI__@GvQcOV-A_!820}GSyoon^ z>PY6z^{*|SZC_rSUtN4&UmeHPQ5M>$vrKC_X zj3;lL*>0b2J$AfKMDJPOT6Enafp&BHu}&H%HnP&2taZNdd6?5~SPjFOQ>S(PcxKY+ z`_AYGr%q3(N`15QHr4s?n%7Bc^#uyuz;sI3zDq$~D}8H)0@7L^*J(?6Dtl;^k1BPw zTc|2ErTQG{-s&f%R$JXkZKOuo)L9+618>t#-|}#HEgnRxx4HwD#uy^`kt zWAQ7&Na1OBVEr`3o|^0=YD)M6;VczRFIZPbItJeJrIgS#&#QTFyMvhaITZQmPY$o4 zrkk$K$J&N7Sa4AGu}_buox|6hLlh-icC0&mja_65%;@yItE|d-9h+8ekY#fA2H#_J zPV(@zvCq7icT=RnYK8CEfyvNST{5gw3w2w7QR;S}nssUw%Ts+YS0?&9z2pzC9lneL z(ivcjw{!+ogs3Nta}D3@S+cQHJJKW2uh0L0UpBtA=V^u z`qJSm1MwUutFiKp?m+Jp)s_w^$?LX<#7H|j_xNMg=KN514)O4nex+5=TV+l`sHTq@ zxPYK6sU^J5P0~wrY+_5{^$s3E73oE`B5_0Cv^Nq~EvD|k3^L?yJXYE+*(|}^xt=cr zr30~>E9%&Cddp-hN3Vhzx9Y~N_R0U+ZZxGHw;N7vyFQU1l=iy0LiB3192IG= zv%Lh4G$M#K`Ic-lrB;qQ5Rq1QXs6N&D? zs^i)J8&B4xL76XmA`c|+qz^+trV*lOXK=xS9rNaynm?g6Vu8AGB8+DUu#LK1IeaCm zb9I+eZBHpZ+Fxi!dVrWV\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transaktionen" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kann verwendet werden" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Zahlungen" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Einzahlung" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Zurückziehen" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Einzahlung auf den Saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Einzahlung von Geld zum Ausgleich" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Alle Transaktionen auflisten (schreibgeschützt)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Eine einzelne Transaktion abrufen (schreibgeschützt)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Transaktion UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Auftrag zur Bearbeitung nach Bezahlung" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Details zur Verarbeitung" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,98 +74,98 @@ msgstr "" "Der Transaktionsbetrag muss zwischen " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} liegen" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Waage" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Waagen" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "Name" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "Standardwährung" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "Währungen" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "kommagetrennte Liste der von diesem Gateway unterstützten Währungen," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "Mindesttransaktionsbetrag" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maximaler Transaktionsbetrag" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "Tageslimit" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "tägliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " "Limit" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "monatliche Obergrenze" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "monatliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " "Limit" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "Priorität" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "Integrationsvariablen" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "Zahlungs-Gateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "Zahlungs-Gateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "Gateway-Integrationspfad ist nicht festgelegt" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Ungültiger Integrationspfad: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Balance Deposit" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -170,7 +174,7 @@ msgstr "" "Wir haben Ihrem Konto erfolgreich %(amount)s gutgeschrieben. Ihr aktuelles\n" " Saldo beträgt %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -179,30 +183,30 @@ msgstr "" "Wenn Sie Fragen haben, wenden Sie sich bitte an unseren Support unter\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Alle Rechte vorbehalten" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Sie benötigen einen Anbieter, bei dem Sie die Preise erfragen können." -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Anbieter {provider} konnte nicht gefunden werden" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo Einzahlung" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.mo b/engine/payments/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f79a96bbacc7b61eeda635adc1dca1168e3c3c3 GIT binary patch literal 4521 zcmeH}ON!AD}^nTr<^Jox|m0S&l71QSfGY|XE$yB^>7 zudnLcU)QeukfHRWZa_VG7h`+CpI6`q<-5BXdl>v4oWQqpU>WV+dl-8ZoCfa$J#Y=^ zgZG0c!RNtu!3V+5!F}LY;AZe5SOPcRn|?2Y6|{GOw4MfO-Z#OG;AwCz_$jyr{1SW$ z`~?ia3*cj56N8=wPlB}08E_@|HAwxx&G;L*8tp&9ybB0f7&3~a~#AU zdoSY$AldT~*av>p+@kD@gh}Agy}@90om*{QejueZR@Rp9M+ZpFmn~{X^-zy&&nk z9VCD1AnE%mNP4{k2H+Wx^j!@jNZ&0Wt#be*-P$1a4>Fzxu@w6RBz?aCso!~!^!)?G zA6o-s$evC3A-@JQz66pzqhKF62a=y}fTZvHAnAJ^Bz-S}H2(M_slIQ4kTdax^rJ%a zknKIxKv{uGT2pxr6(Pi)Kz$OG3i(U6QXyYAp^^`zdp~Mk$PX%{H`z%0mX~L;hYcY4 z!?X5!kn|#ra1;^^fMhR-+fW}zMVKUhL4LLl6>cT*gJYQZzZFbM!-&udH&Qy}b91%* z?2wX6vohjMZFpORp0C0dH&S?x4*f3I9ccvhwj3j(w&cYb0_{nEfH&I8a@QBu@{ZAq z%9ECh!Xzq;q-hFQCaWYZG64%Msi@7Pf=!-?!~m~FJhqtRs`X~2QNmZROOs4wvnEXh z%Q==UyrHq_Yz;i6*2&PuCYe`6@CW{hIBIKyDLq=z*nYm$);y3<#CD{sn#$#nAW+tl z2>sj@As4PI;VZ3Bu-y(Yk^66WqD1G&BpZa>HH*!RL-M2LdM+5Q@S zB7Zu?E>FZfp&+WS0@$5C+c-$uv}94OUM>P1hmjrNgAg2H$wQqFl}!=*QEp!=L z#=%&W2(d0d7Gn?6Kxj(oV`C*^Kyz1z5ki{l*yLhz5taCLN>4c(G%o|F)`##Z8o4MC z>kGcLc)N(8_pWiFLVFKa`YcPflwztVFfU&^#(m7!EzJUPTm{&VLa%HSSfIjXKf$;5 zrCo*SN$Vf&D}^Z2#=`-IXo#TX9Em2b2keUSSVwdN8Af^dUEQ|%3p^Nwa~pN>kjz4t zfF~m;X_=9cQIfWdTfFzLIHp&~Qc!{wo-ZhD#JB%DjIuw_%Y)PhZW#i;JX~sT8c5yo>I*156Ll+Glk@TAE zDW?Ypk&=E*&)xN-EIS$$?mgwKL7_$$uV=&(yJYjs)GO7o#{A?+y?TnD%+J)NTWC7H zWt^Jl9Kt<`Gf?5xL$%TBEFT&idSPH!X$JR|iJZD^DbE>=Th?jl3NKAhIWuxm(FkWh zZk0;X-x=KD>>T8SJ1avkZW}}?O$Zw~4N3*Rh_u1%<5M#nb#!iW>JZ;MHZ|E88Ed?J zU~Z<0H?^68v8nn#3=3PaXi2Amd#}PrXKIbw>_J|g9G@WGXxKF)O7&X3dfCMt1B0b8 zggk=MX>>cVK9a|y?HymJa1VFe!r%rOo@*R%c3VZNhpPl+W${GX@W|4yDBxtzyvuCJ4)NB$;Hk7ju~ zBj2Cp>8x$p=*{QpvD=lW+1Q4VFs>DqrIO;6B&Ue`_2 z6L(IUp1PGZJ)P$9LYhYYpk!Z6(=#`nrVF>>6*ps=5N~^$E-Yu+;af=4M=6QlN}4`= KqcnZ>CG;0%(I8R) literal 0 HcmV?d00001 diff --git a/payments/locale/en_GB/LC_MESSAGES/django.po b/engine/payments/locale/en_GB/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/en_GB/LC_MESSAGES/django.po rename to engine/payments/locale/en_GB/LC_MESSAGES/django.po index 1d4f1c0c..919d5600 100644 --- a/payments/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_GB/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,55 +17,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transactions" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Can be used" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Payments" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Deposit" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Withdraw" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Deposit to balance" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Deposit some money to balance" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "List all transactions (read-only)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Retrieve a single transaction (read-only)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Transaction UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Order to process after paid" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Processing details" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -74,94 +78,94 @@ msgstr "" "Transaction amount must fit into " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Balances" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "name" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "default currency" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "currencies" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "comma separated list of currencies supported by this gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimum transaction amount" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maximum transaction amount" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daily limit" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daily sum limit of transactions' amounts. 0 means no limit" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "monthly limit" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "monthly sum limit of transactions' amounts. 0 means no limit" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priority" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integration variables" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "payment gateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "payment gateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "gateway integration path is not set" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Balance Deposit" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -170,7 +174,7 @@ msgstr "" "We have successfully credited your account with %(amount)s. Your current\n" " balance is %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -179,30 +183,30 @@ msgstr "" "If you have any questions, feel free to contact our support at\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "All rights reserved" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "A provider to get rates from is required" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/en_US/LC_MESSAGES/django.mo b/engine/payments/locale/en_US/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9a494098a0c2793119dce2e8061adbbd1331d5a9 GIT binary patch literal 4509 zcmeH}ON<=F8OI9)AsHYcc6ix1d1j+>JW2oDA2yq1b+YbDod~&A{4}gCL=ke_#SVw#R-9qdF zm%w|#0Q?CUfg8RUKfHiRM5AyGIuz~hrkk>OH&-*I47knMu z3BC(H3H|}x4Sohj;J4s|U=M?y0JlM2=WXyV@J}H3|G3~6;QeU-6FdsmU^Mre1NVUQ zAp0`_*`6&Bf8vdTZ-Q*k@4<2KJ&^tUE4U8+9lQ^m`w?sbyC7bPPr?1*MKFM#J0Jqj z-^XCqcMGhe{SgMUzF&hdQS5-RY)=h@t713E`tAdH-Fa{tJOi@dzXe&}4~p*}f~@af zKwhu*<9yydAnW@i$o@1z*0&3?URz)Uz6G+rcfbhN_hFFNX@IQTuR-oF3vPp0O8gFF zecu7O-8Wi4}Y5L zn}U!t^M&=}!t=20W86U5fy!EQ`2{NL`UvWys9e}zwv`L}`Zy~4z`9SMmWBP`!g{lf zyl-XsdGYWV$o^2#eh6f}SR)*TOama>3+B_P52GSXGQS|d_!%nP%HjvdF!TQ@Fe_av zV<-JYo0wKt+sDNztu|LwLOo+?Ambp^ai6S`foI}yL}sY0O8#+*qWMvW^C(8Duud-FL7Mp;DHgz(fq+(Mb6FEukgi?n|u3B$JSuI2T zva;Dku4wW^u$-`LNRm@S$;Jc}YD{B#T{q=uf-pP{gLpq8 zL__0Ze=VIapDu{Y6Nx}-h#Kk$cIVG7jq)}xSygL4$;hN};wEVdf+H*`Hsw&&lWCZg zCXPg@ML}{VQWTk3!CXV7a^=^`tHKZBpzG(6OhbvFgO9PnCaXjYR2Uiv$pNs|)7F(* zP6*wjkx6kdHWWf^MCVfMK^_P_r9y11LJS!4O`IU4$)vUvlVnn(>y)v2F=$OiP;DIH zQ#Eo!BG%VKrta6MpGbRdRu6sb5V!|&?0D_`KjYMk3- zgokVvz61i5KuIU8N~~7AW#sTayyBQ%AxlLGQF$&@p(w>s>FI>EH*_8w*3NpPHd_?u3Va3C%rU;$Ubfd%?A--XZfPx zBa&Z}WA*&NAX4(L`MJA(lodyV!+oq?G&t1w;tj0a6qjsXUVO1N+g)2|c3Kx`yF62u zZlR_8mhswwcMA6;&On1&r`j{E6*@R|@Y%`3wPoB_Ht{;HuLEx;?K`h)8dO_a^p@3z z<`Ld;+$xQ%zc+QjJ2XX8hZ+Z;e|id~HZNV`bvYG;GBFmj&n+$!>dflG;wd^hySUJ8 z&USxwVs*KNH|^!g*~QK=42%1z>?^N}d#^z=%k6G^k7@xgVR}Q`T$6z6lU^4SHc+ zC$*(8wKDWh7#q0;#lx)WrVk#W{BgP-)4pjsFn**aGWWmF&V&C=c5YtIUO3Iy$|BtJ7uk8mmwZXj+ZTh~p^^S4iGUc8mmyp-qeN@_;V-~?Yy&C55Pnk#qV758GE1i$mtTv^VE)3=bC S&vN3vmDGItMydJgE9hU%0UJ92 literal 0 HcmV?d00001 diff --git a/payments/locale/en_US/LC_MESSAGES/django.po b/engine/payments/locale/en_US/LC_MESSAGES/django.po similarity index 70% rename from payments/locale/en_US/LC_MESSAGES/django.po rename to engine/payments/locale/en_US/LC_MESSAGES/django.po index 45632b92..07db47c2 100644 --- a/payments/locale/en_US/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transactions" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Can be used" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Payments" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Deposit" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Withdraw" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Deposit to balance" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Deposit some money to balance" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "List all transactions (read-only)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Retrieve a single transaction (read-only)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Transaction UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Order to process after paid" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Processing details" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Transaction amount must fit into " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Scales" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "name" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "default currency" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "currencies" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "comma separated list of currencies supported by this gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimum transaction amount" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maximum transaction amount" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daily limit" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daily sum limit of transactions' amounts. 0 means no limit" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "monthly limit" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "monthly sum limit of transactions' amounts. 0 means no limit" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priority" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integration variables" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "payment gateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "payment gateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "gateway integration path is not set" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "invalid integration path: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Balance Deposit" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "We have successfully credited your account with %(amount)s. Your current\n" " balance is %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "If you have any questions, feel free to contact our support at\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Best regards,
the %(project_name)s team" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "All rights reserved" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "A provider to get rates from is required" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Couldn't find provider {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Balance Deposit" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.mo b/engine/payments/locale/es_ES/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fa86e3e926f48e530e06280fb1f6e91513cc239b GIT binary patch literal 4797 zcmbW4OKc=Z8OMu|1Tch02#)|EwSZYW@eJMvO5}YA@9ylbkzcaMo8*92Yn z)orggyMhZ+K;#lB7dS+FK|&}9X-^<7ktGD&xS>FhkPtT{jvzSj`>LnyS$ngHZMo;) zRb5@*_xXYCq z_yI5mKL#e?2f>@*GvIf@4}(7k&w{@KkAVLMC%~s3t=~_9bBs@dA}?K3 zE`nmu02F<$gZ!!Qjqr6)^!X7u4gL%iJO2P~f`0`+0$%zMx`17fDfN5sDEJN-!{N?is;-ZF^F%7C)Yfui3J!3*F|K{?BRfU@qXk1EBV zn&jsN@FXbv`~XA+^(LsnpN!^z2g>=s3qA=x2??)(CqNm$4Nil91l!;v2p79ff=`2I zM))m|CF&OVBKR7}5vjk8-v1r^1mnl}5qz2-vGW)xdOZg|0nUTRz$>8e`6@UB-vBXD zJ&G|E_yj2SejgOSdmV(%;43mOm*_3NF)0Hsaq+3}q|{eI(eJa|Vy9fIGqF4wc%;upe&@XK)o zJ}^7@4`CSi_zD=VZecQSqSED=-q={UpsqN(y>3h0%L_d)S)916uM2D9R-Pq0Iv?7? z$ZD_oq8wN~zC)VFHfihbz)pCM)!Nz2S4G&@l-PrPrYZ+{ z!IrT|Ec}e#9^^W;FyeX4a)phRNfKSS{-BgO2SL za|g4~w9nFQvooXlyh`HiC?4YAcyzvnex-T3rS>;cv2l=^xD>tXXJ4iDSVWGqbyS-) zud>p&^(=(rmO9IuPi@asN!h5lqZ%$osC}MVo#vTE-CQ@!HE+kJMs{d%x_<4+dT4Mu zY|L^F*_LWxlO%^oae%8mSNMj@8RdFO?lZ3BmciFI6YH7X!s+8fCd|p%W6HEw;Yh`&#tGI_ zdtp4SlDwa*)LeHd=P|ZwbOs=SB^U`WG*LL8YM>48&m zu^O74)MjPleh0_Cnc$&t#BI65L)b-^WDx1^DkXpT3B9K+E}{Pdd~&(FNOuy6S; zs?E6Y_5J!CHYDGMdd_}3$Q&E)ZQa(3jkeT1la;b1S-3G5;gv@r#{;!oO1X)1>a?th zs+1$k*qQ`GhLbm=YA#ELm5oQ$Tr!e@cFJenjMTig)wIyHy)w)UITwSok-8*cV2cpAN$48X^u%MC+BC;gh z*t*aoOFD<4R4G&#EB9&@BPjGW*|=q>1x>k+X-LqO4gkx7UjdF_WN2cFw2OI?C6qPR z8gB}lm>IR4QyC#B&haFvQw3*)7W?*()&J3sD%pLDE$O}XnQ4Pe`Hu}d-(epp+c=RO=wF9+JYh@AtU4^ZWANMxW}(5 z0^BHEx2P~5wMG>qeE=r(Bx5ACb&W`p)=_-(4LUka`>X?VmytTG;9*x|8Hxt*G?R?Qr**Z zRNUIVP1j+@x{O8SLu{Fg(;PZ5J#|+GnpTUn93?)hM(3>4-P`mZ!Ir%!lkB$t{wJzraoTONlknC_nh*+h zANVx3`~zUF(ZNWy!koQI|G@3bo^+`>>atCR>a0(GBe_Y+BH@*^coa@zqUlz|xqUSX lwzgicw3n23Uk?sdhNKq=y{mCqv!#\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transacción" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transacciones" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Puede utilizarse" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Pagos" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Depósito" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Retirar" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Depósito a cuenta" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Depositar dinero para equilibrar" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Listar todas las transacciones (sólo lectura)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Recuperar una única transacción (sólo lectura)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID de la transacción" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Orden a tramitar una vez pagada" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Detalles del proceso" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,98 +74,98 @@ msgstr "" "El importe de la transacción debe ajustarse a " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Saldo" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Escalas" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nombre" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "moneda por defecto" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "divisas" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "lista separada por comas de las divisas admitidas por esta pasarela," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "importe mínimo de transacción" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "importe máximo de transacción" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "límite diario" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "límite de la suma diaria de los importes de las transacciones. 0 significa " "sin límite" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "límite mensual" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "límite de la suma mensual de los importes de las transacciones. 0 significa " "sin límite" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioridad" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variables de integración" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "pasarela de pagos" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "pasarelas de pago" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "la ruta de integración de la pasarela no está configurada" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "ruta de integración no válida: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Depósito de saldo" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logotipo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hola %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -170,7 +174,7 @@ msgstr "" "Hemos ingresado correctamente %(amount)s en su cuenta. Su saldo\n" " actual es de %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -179,30 +183,30 @@ msgstr "" "Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro servicio de asistencia en\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saludos cordiales,
el equipo %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Todos los derechos reservados" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Se necesita un proveedor del que obtener tarifas" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "No se pudo encontrar el proveedor {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.mo b/engine/payments/locale/fa_IR/LC_MESSAGES/django.mo similarity index 100% rename from vibes_auth/locale/fa_IR/LC_MESSAGES/django.mo rename to engine/payments/locale/fa_IR/LC_MESSAGES/django.mo diff --git a/payments/locale/fa_IR/LC_MESSAGES/django.po b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po similarity index 62% rename from payments/locale/fa_IR/LC_MESSAGES/django.po rename to engine/payments/locale/fa_IR/LC_MESSAGES/django.po index fab68752..f0e921ed 100644 --- a/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,186 +16,190 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/fr_FR/LC_MESSAGES/django.mo b/engine/payments/locale/fr_FR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f7745baafef3cd1fe41500f3f46e774af15f8d9f GIT binary patch literal 4894 zcmbW4TWBRo8OO_Uy~X?Lx?Xm*R-H}a=43N7yY7;?V3NsXkK{&jGP)>)&gnYm)Y_-} zOjY;EWG*U*u=*sciw|C(Wa5MPporj$91wjJL3B|;5QOnf5Cwhk_w^;|naqqhO*;Rs z>guZR``7>b>N|gW@PU^V*A(|7+}B>E)M@Y!$N0zf%U3J)Ht<*AGVfjiCuonqMyYpz z>)`9a5PT~bfv*Rzfgb_C2)+^gA$Sh_8Tc6ZZ*UBJ^tHwN32>J7Q=qJufHLpr!AHRt z!3V+bfgb{Y3ceToBiIN31wI6J_~?V+HBi?14)_50b5O?rqQpOgZ>Iep@C-PH(K2oc zd>^RZqa0WaDei{_sz5)v0 zFPHcekU#Z%{yhiY1d)z9_4Z=_o&m+bPk|4E4ulf*k*&g*y zZrslGBV3CAALh=lmJ4DZv{ReJdTXnBUR|_ichjW0lQ`WA;xMvtS347gjU?A-xjmAcq*(jvCmvSZ;;{-{smdu zOB_>%vZC`-dbgM8zJU=xFm2nhZ4Cu|>%EXLrQ1QQgLd2CtE^D7-A}8a^55w+(Oo8i zJl5;Dq_5$~nM;{c}!p($VeAITN=n_W5iu zNSwUf*~2X??J{&X*qhRPo<(6ijzTOPm;3AV)#~ZGI-E#_frZq__OZKo_F2DZ%aV1r z#&yt7vN-kAdIrLgrH+&8Q_~5uD6LG~Qxz8_YM=Ct?kBOq+(cK*Rc~uur5{>E*DaK+ z2LYnP$2eh=O{#h(iV}zv0c>}y^A(p<%69Z#k`Wj~gT(gqrHnl&gwQc2Vq*;&NOU`i zQzWgE%vEISARW{9xQGt?xv}(>p};;Sm>RW$$ri(yM$+MN@Tx z^~6CKPpT;CCaND?wte=aHmckN)wl6oU*TKtU{@hMZ{63vibPf7LIN1lP*5I6L5K9f zuGmlwg1x?p(@K7~w|&*YgR{hKy2nF4izI>2q%i4~GpVyiwoH5aqg%rC7FuddsM>SM zitcBGO2?+ceWI_jVIA9@UY~n@WpTB&y)@Ta{KVYz+bhl0=E~N}^~PNX%zZK+P+!8U zT~p}FXL&m5WDz8{$qrTm5!pFOG!i03nmj&H1Pn?k-WG9pZ)ju(sNoTWEdk!q&zjJ8P=v6be^;-O&MRO6O*UMl$^*guA`tHqX%d7Ks3=E?K{GS%)sHyb9p+On67rp@kUO|kUS?HJtWC+ zbOU78n!u;^f=SczSd?Qqb1^c{Vw0zt;;=q4WxjrKe0MGC9GZ4+N0`L%Xdi=)m_Dr+ zBNoq6ONzp;Tgr#c!{a=k+2f6z@1$YP(HV~R>pkLdwa{(mb0P+Div6VL+vGMnX;VU>2N%YOM*Q+L!y&iOm+|#97?H_lIlBNwUP`EU1Fsuz)q?H{;T=2 zEGSW*FUx|m?bV90aGcjQK8Uik5X6+03LzRF?c?p>Xq}+eO_u7>_fyO*h#KwZ=Ligr z_Nf)vP;zo%;n2D+nvxBcn`j2fzyhd50-{@tZs)QZPzoByv1+DNvk%YSa+C=zsY@U< zS7sr)f|FV`!2uHo6eSo#6=C!XqD@pWy5Wo>Fv{*rS(4h&ni$E7RdOyNg2Kd_()04d z+iuL3av)@F(ReY3DwitU9PLwcr0P7*kA74j`VjwhG%o(3f-fn zrJ5)@d?tFWRCmyE-{OjszFLsdJ7!hb#x6FA1Tt`=8$=Hpmr_U7RKdVIbc>`9``63w z4k{qR7R}~`j}EhPnSACAGEyc-1gnbbYs}D=1a~KDTZg~K)N)>A=M)~Hj$};6EfRqcTOvr$yZV7vYZ1kpKVy literal 0 HcmV?d00001 diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.po b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po similarity index 72% rename from payments/locale/fr_FR/LC_MESSAGES/django.po rename to engine/payments/locale/fr_FR/LC_MESSAGES/django.po index 54f06e3d..e22779ec 100644 --- a/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transactions" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Peut être utilisé" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Paiements" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Dépôt" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Se retirer" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Dépôt au solde" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Déposer de l'argent sur le compte" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Liste de toutes les transactions (en lecture seule)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Récupérer une transaction unique (en lecture seule)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID de la transaction" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Commande à traiter après paiement" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Détails du traitement" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,99 +74,99 @@ msgstr "" "Le montant de la transaction doit être compris entre " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Balances" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nom" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "monnaie par défaut" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "monnaies" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "liste séparée par des virgules des devises prises en charge par cette " "passerelle," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "montant minimum de la transaction" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "montant maximum de la transaction" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "limite journalière" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "la limite quotidienne des montants des transactions. 0 signifie aucune " "limite" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "limite mensuelle" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite mensuelle des montants des transactions. 0 signifie aucune limite" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priorité" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variables d'intégration" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "passerelle de paiement" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "passerelles de paiement" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "le chemin d'intégration de la passerelle n'est pas défini" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "chemin d'intégration non valide : %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Balance Deposit" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Bonjour %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -171,7 +175,7 @@ msgstr "" "Nous avons crédité votre compte de %(amount)s. Votre solde\n" " est de %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -180,31 +184,31 @@ msgstr "" "Si vous avez des questions, n'hésitez pas à contacter notre service d'assistance à l'adresse suivante\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Meilleures salutations,
l'équipe %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Tous droits réservés" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "" "Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Impossible de trouver le fournisseur {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Dépôt de solde" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/he_IL/LC_MESSAGES/django.mo b/engine/payments/locale/he_IL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..485059624fdc935483e618900e187bba5897bdab GIT binary patch literal 5037 zcmbW3No*Wh8OI+XY-SHI49ma^U}Dd>jgt&BgR^LyjFT~n7uoH=TrlPC*WHDxt2$NH zcFZI!2c!WmiQS&ila7;^D7J%yfEx&ekPrfHh(n4v0$1 z|F?e2|NFn!_4|E$R~63y@B4W#yh^Df;BWWvhv(<7R_blwFTgX*-39yTA9#&Y?*OO3 z*MUXwt)K_K9=rfP4t@oEBlsQgIQT3knJO#ewx`~{%c{Sx>X_!77e zybXRB{66?z@ONMp{3rM>u*9YhffqpWa~<3Z{sffuKWpP3!8gfIeZmRelpsf1` zcn;i)5y@u(6#HKWq0?%G65FSrzoL!aw5#@j!l67L8T)CbxP;ha!yO=aj2UeP1vQyc}WF~D*xC^<+ykcrJ(xDlNQ zXQCgDq0L`7w@*HF{KzT9Zs6B(3)P@#yg{9>xREY+P88`{7%aF&6KN-7#PwqnmYjmIUTjZ7z|o=`S9F|- zsp!PcpdO2LJ;KO6{$@<*I-dJ^6Iw%2yDNr>T;nz~B70M7d0J_7#*gZuwd=&>Lw-&@ zt^^?_i{dei2J~Vj&{YE?QOy+Gl3UPFP<5k7NEpxs$Jb7wV8~TGWMYp7mD9;T)N!E8 z7=b+emBOH^;V3lc>TYO?%JDoMy5&kNWB6TQY~Jx4zhF8@I<+8j<4!+P^CrTeDLY{? z8aO&19+v=m`=I=DrV!8hPSx}im2s*{qMSF9Qc)FxYSqz^sW}o%QF|_Cf|4%O!_fEz zm-wQ3trmnbIln|&L|SI)qO&xh*bu-1=!vOz95Xno!@5u*!;zIa~>!%}-v z>5r5xsc0%ou-P^KO-TWLC9{psKFF>lC?Fx>bdA+xx%jDiT#eSmXdh z8Va)K$SH9>P!+eRYR*#C_;E*m_x7XC0FBV)+{Q~ZtQENgiYA81NQEX2T_Yva5#!#D zW4eQu3==BTZnL7Rb&g8OjfML_zevGKZh3HOuqQ1~MQ{7u=D!pZLW5wKA?n%zTupT`- zc4Bl!9~wIJ@xdp1rn#@eI5!@Z-D2)Uy&UE8!LaU`n#@g`1y^?Dp5s;-w(E042Xlvq z^w8nqLr*_3#M5)eiQ-&dehNG%4nnM-o}AXaCuS!m&+4NmCnxeFC-cvqnw=hHWNdoy zx#*_UeEa0_~>?G2M33GP9k)q zn9DEKh&eXr3qcXt4eMv--MDAUtA~!4 zI~9c0XjuC-+l`JLI-=9&u|8k#Kc)}%AL&u@i>#Baq@|NavYy;bHj+m77dmMr-$A=*Wz7~#v0QrJM0Z=2Cvu+EPXjymHthvZHS#U{%s{2 zyBTaHw=uYxyrS{cOl}a-Can#Io8oyrxuzMt!=f8WGm`~g8xo#)*ka!PCBU@e=?BTo z_Rl-vbsgPg-->wEgt>yhJ7Rg2h?{g)CD_b(o4jre$u;Xblkyt02$5GL;4MsGU^}R$ zWFV|MKC7RN%j&B1FRRkN(M07N|q&EX{6<}n+6r^NG4n9 zb{oJNW9)!761<)kfI@0|>nu$jTvK9MLVB6TYU)z5NF&C-qIro~u|v4Z#l1& ziA>L~J^8C7juaJBvg+D{zk{$00ZkEXOAh}Q1NP=Y?zBXtLi|mczD04Y&|0>fO%apq zXvw%7`3HRYz=}wSs%~E_%kX8d713Hdna-utowHeMDCHhVnwd``;<=qHw;5}nnamN? zeZ+JBmD#UsTFc3*y1(vZ(IC(bW<=txq`CVdxf{ESGLn-(SIBjT=ukyhWZeapvd#o5 z73Y}*\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "עסקה" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "עסקאות" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "ניתן להשתמש" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "תשלומים" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "הפקדה" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "למשוך" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "הפקדה לאיזון" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "הפקד סכום כסף כדי לאזן את החשבון" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "הצג את כל העסקאות (לקריאה בלבד)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "איתור עסקה בודדת (לקריאה בלבד)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID של העסקה" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "הזמנה לעיבוד לאחר תשלום" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "פרטי העיבוד" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "סכום העסקה חייב להתאים " "ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "מאזניים" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "מאזניים" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "שם" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "מטבע ברירת מחדל" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "מטבעות" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "רשימה מופרדת בפסיקים של המטבעות הנתמכים על ידי שער זה," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "סכום העסקה המינימלי" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "סכום העסקה המקסימלי" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "מגבלה יומית" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "הגבלה יומית על סכום העסקאות. 0 פירושו ללא הגבלה." -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "מגבלה חודשית" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "הגבלת סכום חודשי של סכומי העסקאות. 0 פירושו ללא הגבלת סכום." -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "עדיפות" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "משתני אינטגרציה" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "שער תשלום" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "שערי תשלום" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "נתיב שילוב השער אינו מוגדר" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "נתיב אינטגרציה לא חוקי: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "פיקדונות מאזניים" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "לוגו" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "שלום %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -165,37 +169,37 @@ msgid "" msgstr "" "הזכרנו בהצלחה את חשבונך עם %(amount)s. היתרה הנוכחית שלך היא %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "אם יש לך שאלות, אל תהסס לפנות לתמיכה שלנו ב-%(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "בברכה,
צוות %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "כל הזכויות שמורות" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "נדרש ספק ממנו ניתן לקבל תעריפים" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "לא ניתן למצוא את הספק {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | הפקדת יתרה" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/hi_IN/LC_MESSAGES/django.mo b/engine/payments/locale/hi_IN/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7640ce0078328b8d3c57147021d7d1b23f128abd GIT binary patch literal 359 zcmaiv&rX9t5XNit#L=^dJ$Tc>rLhfN|3peDAt}%xa9?4?HFcLPTcZ!+>-j7W9_-OC z`DK!sZzkV-pPqb8P)Eoaa*iA$m&hm|0UR!{j-EeljeZr4g`|aAm_cgANK_}w=#fn6 zbmm?=h3K`hkPe+}VY%-HC^aL_HitsI%W(r%+zR&V2Ra9DPN>gjiwo*e>TLL6p)_0# zJ8reX>v3KXWLaf-O>VSqq\n" "Language-Team: LANGUAGE \n" @@ -16,186 +16,190 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.mo b/engine/payments/locale/hr_HR/LC_MESSAGES/django.mo similarity index 100% rename from vibes_auth/locale/hr_HR/LC_MESSAGES/django.mo rename to engine/payments/locale/hr_HR/LC_MESSAGES/django.mo diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.po b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po similarity index 62% rename from payments/locale/hr_HR/LC_MESSAGES/django.po rename to engine/payments/locale/hr_HR/LC_MESSAGES/django.po index fab68752..f0e921ed 100644 --- a/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,186 +16,190 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/id_ID/LC_MESSAGES/django.mo b/engine/payments/locale/id_ID/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c4334591c8587c51c93da7b223a19feb194ba29c GIT binary patch literal 4671 zcmbW3%Wqs)9mg*rQL~tIeV>_u6zhsXC6-d^Zxo2ih<~}C( z+-qmjMCt}n7Hp8H5G+{14#Wx-i480eERk5Cs(>ose*nsY&+puO$K$*ZJ@WN;&inWH z{(k58m&cEOFQ7H}KFxRgT|sabeDetZXuo@R5PTT?J-Eu;8{jnk6ORPJN5M_-y@4|oooLTFic8T=Hu3W`2` zP~^D@@)vx&!ta72&kw;F@Moat`6sXq{vCW2y!?J-0b3wL!5_dA;2U6wJ&$0757F z(eqIbmG#F!%;{wmJ*A0V#AY%t?FgUfD(zW5DCA`qJ){YrgbUJyOP}Qv9Yp^IU)@mE zH<4dBAaPN*&s0AownSf5^*;^@AH_zG@S&D(!gXollPCE^N8t_T51!x?n+SghL$B}W zLEl=LPMq%KHciyd&dO47&6@pfldEo;slHCa$R<6N867s$BpRu7XfiFUonlAcH)`^P zI1NoSt6F{QR43BTsbQAx+0ZzpCl0YmZnCcK7=MfJi3nV@Z}Yy&Cu9nBu4mOst_sH? zcip#bGOHtd%Vho_S9RqeBv)KJF(P}*(^~v0r89{uGJmel(Fgr>k@wS#BSX0{a}BlM zPgQKNh#Q)Y?b?pQ1hI8ajL=XWohaSu7<82zCS-TBfv)w>RGz9HhhRMJ>t<=Juu*1i z6gD$qprc4-w%5;PjC=POYwJiS9aAIf3{z+Gy6=LvaU5uRItyLnTsylU0vw;l>6_ zIJ8trT5mO7T|{{;;wY$XQK52aY*d^k260nWTdtm+7^?J8Lb_hbWHr=~4jq#eC!0Lz zn#q!3`YYcp5dvJu#>8l?q+v1g#zNZly#K}m$JF%gb6a3EEkG|8c~N{g&ErqcP8 zdPqAyU2WPmF;<&_K9fT3X}I2wjAL{U(uen`FfYDGl^GX!mkOsQ4XmceVLTH=X)g_8 zebdJHV`5e1gdn!b1E)Ws+zlM9MUIe7X!6m{QJ`arbbRRiPntKR#V`gldv_!%Xi7W0|)$t}HLM zcGnlymhY(Bbxe)3&}Nxsnk!-R8hMf!m{-f!RxU1Yt5b8QzBK#%)E4j zqUV~ebY4wuZZx;do|PTVC9=xAU*DWN**ra`=1$L_`toygw5e6?@@7k(f=K6S#_5+g zwiMsRo%M}t>fGYSdTU{^^}?l{tz|}5wq_SM)-JFu=@q(Xnl19)yt=rx(puSmQ7x}u zUKRXb+vXL*+Hh)ZWo`LDv6HiNQ;QHCDmGiAAu{LYX8y%tq-}Cmb^1CZZ=Bz0U22{= zSSO-)P1amaI%x>)=GB?D&8Ie_BGXaxQkunXUL`}{b>~l=Rprm~(}{ZeygE5^b}En; zxq4s+&W_(^C{PT@kqNr$#Fme;v+`b#bhE8HygNG7Bt)L$gZ;DWs^L+FyjC`kV3r=p z^F^-8;$omD4=C?w^MJ}@t+^i8%XR({tx^V~cOBa66^TF8d#)@jwhx}^TJlH_xGy2y z`WM`3IbP1LpX_Qx9{)+9V@P3TV_Wz4D|va36MwB5VGo|UY~Nd^QTAhlu0`J}d&^R> z7@jrES51bRj48(Gp`jE4zVr~af+fp4A9*Rcz#B_Nnk%@yRwMEIMIJ0@yTP`J3z2G| zI(C?A6i#XDCRVO?uXXTm4S31iry2(vKS-+o$sg^%1U;bdJ zDt^|)6_^X=ROfm%#|{})W<}DmT?a-vZ`$jcV5{Fv1gVRG@_Na$xgN^S7xjY*fGe<1 zE#ON?6XV^1m2xnbz|%=XUH2ZP%Ig&eBix+)Gx z3wNvKom%STD}{-|V5#JX^E@4sT}>Zkj+tOpN`rfx7E21CSh&wjSt?ZCZWmOo5B7aE zeShbdbs|N94mOSRk>+zrXnE8nJjt?Tus&vM6Ny>SGnvE?E+Cc|;NIG&6GNK^vsIO# z9fXqFKz910*$K6JI&L%QbY2{!g2UD+^BT4YuH1*$g~;d%Jx-S6=ky)d2nQEl6~>eX zAaMHR%*dy%fv*uHHp!|<$<8W}Cu;44n`cM^ro L>;ub(!#VE1H}hIT literal 0 HcmV?d00001 diff --git a/payments/locale/id_ID/LC_MESSAGES/django.po b/engine/payments/locale/id_ID/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/id_ID/LC_MESSAGES/django.po rename to engine/payments/locale/id_ID/LC_MESSAGES/django.po index 63014a98..0a7ac853 100644 --- a/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/payments/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaksi" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transaksi" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Dapat digunakan" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Pembayaran" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Deposit" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Menarik diri" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Setoran ke saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Menyetor sejumlah uang untuk menyeimbangkan" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Daftar semua transaksi (hanya-baca)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Mengambil satu transaksi (hanya-baca)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID Transaksi" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Pesanan akan diproses setelah dibayar" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Detail pemrosesan" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,95 +74,95 @@ msgstr "" "Jumlah transaksi harus sesuai dengan " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Keseimbangan" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Timbangan" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nama" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "mata uang default" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "mata uang" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "daftar mata uang yang didukung oleh gateway ini yang dipisahkan dengan koma," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "jumlah transaksi minimum" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "jumlah transaksi maksimum" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "batas harian" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "batas jumlah transaksi harian. 0 berarti tidak ada batas" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "batas bulanan" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "batas jumlah transaksi bulanan. 0 berarti tidak ada limit" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioritas" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variabel integrasi" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "gerbang pembayaran" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "gateway pembayaran" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "jalur integrasi gateway tidak ditetapkan" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "jalur integrasi yang tidak valid: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Setoran Saldo" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Halo %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -167,7 +171,7 @@ msgstr "" "Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda saat ini\n" " saldo Anda saat ini adalah %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -176,30 +180,30 @@ msgstr "" "Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan kami di\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Salam hormat, tim %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Semua hak cipta dilindungi undang-undang" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Diperlukan penyedia layanan untuk mendapatkan tarif" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Tidak dapat menemukan penyedia {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Setoran Saldo" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.mo b/engine/payments/locale/it_IT/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..696a02bc697049df4b73895f3ec02903fd4a9086 GIT binary patch literal 4794 zcmb`K%Wq^y6~>Dsyv!qz@D3prU}BrNjc1a;;CTp-r^jjJ7j}CfE33M1b-U2Lw|efw z9y>EA8$@8mL$F~15)xto2*C=84H^l-f--jCfp4`@2=Q z9;d$Z)j4PW^w0y}Qap3~KFIId>y$bJ{^36U@cia}rQQMl7F^}qE8q<6>DMduFt`c6 z5sbhG!5DlKcn$m*_$BZy;7`Hx;4i_)!B@d4@X|@ER!ld>4EG{1qtUe_i9B!MD-=CwLZ|!e|+{0zLw+ zf^wccQ0%!1@=txG#&3XP&v(FC@F$?0^JTCH{uO*HxbkLf0lOew>LqX*d^Ji$-q%bs#hc|=d51$pFbkMWZ;h^~eE z=7ECnh@Zqpxfjjzq54Jc7A6I5q)U7z{Ng6XRS4VzLF!vJ(<(h3LdSq_3T9>!VI-BNY7S=Td=iz*&EcSfHl9B9~ z<#YOA&+Ej(NItTCH*kFo1&PaZAz@DUO{z`5Z#k>%FkyQ>uS|3POc!1cSp@RfZ;<&! z!%=3hlrFQ8GI6XkH{2_vkA3&)>zUZ3ecK?%8Ts55O*>aTo3o%Dnk>ra&i1nNV!(+R zDF1@(7rUuR>?~GUlPIyWXXQwd>iZ-yI=3Su#zZ=HEaL~dUuKz2`wsi^ay0UpeC!=^ zEG!)|^uQd>X{MKPlun}%2gkL4GyQz?c3mAWq$1-WHFgPhSMPb5RBhRElC5cN5?`i8 zKCc%b99inrH&gAvlyT9Rc&HjKYSg(;tWJDtG1u#cx#sIcSA7mGq8nC9)+2-HIAiK@ zvMtn}jbjgyB7oh2%kqZHIpqfW(3f0{eT&2n^_3DIR6-b78{=4u2E6Y3v_R6@msvxm zHpP^_$8%z)p0sNdSer#YlSb|vwBCztPVYXVk8V4{qWGSp%;qY%R5Ue7u$~!T<5?B^ zp;w8y>Jt1hF{*ZgN?dx^Pn>OU>{Un)t^dleB2neDhzks9C@9<`Gax+R6&I)2e#5xUWRZo zC}T+O6CIpfL}Zsqpph$5g~<~$)rCPR)z|9Y-CJe#)eyO#n5i2gH3_^?W)9TY=Bq~3x>-t)Ar^Zoevx+jUPSmh|T%h4!{SwQ%a0`KPD0h*w$BTFZwn zYF#LYd8_Le_0;A@Ys>CCnbEpPR9Ot;TMH*!Pc7($rxs6r^2r6Bsa2B~t*)ek*c3iv z^_7h+&F{j_`o?8_c6npHyR_W>^rfAxHa(rK`Q?qZ^Gr*Jr5V~*m$$#a!KYmW1oINw8 zBqPIk9Gm)%9>JO&=V%fUNreEES&gVeZk7>FM~;xltk@O>+Yy6e!lSI@!+OmP2&3oq zXC;i8Dk+AfoVuLsT&B|@Ig_gU&fK=BY#+Xxp;*9e(CkcgaHlPH3P+|sGL!Yf_Hq7} zwFtK%ogW!iBUz8rcj%~=p4Y2mJ4t*dErO+eG9L#f$Hq>V;wLAmTr&9)29c)2fGBeL zz>rp&T<$_LCwVi3?3&9r$>u~PqD4H86ctbE#)~?&5~B#l9(ttgNFCcqX+d^!+81mt zlVvKS1_P_QWq~>36ao})nUf5US*lI?k6n+&)V7HuuP;_P-m43)O8(14MWk}y=IfP+VRWF457nW%Xi4@h}_+hY`D+Jrm-o1M0q?C)*dXY~kQSBT>M~cfZ z7^0An)C~o~3EZYWFEF*P#!zM)b0I}WM@RlYEhef00#V$09Cg=oify6RAa0Lqi*}_Z zI4RI|CG=3RSCMBXT*Er<%&JwXGb)!-M)N-cmsAnx=7=^PA!Wy%2Gmlb7|0ReZ8EC+ z{}&0Rl#ptJ+m;6T+t~Dc7DVGmUX(sEL&_BrziNCB2d~k&SU2ZmZ3zQfD1In`Qq~e_rT>T8<#=zW zmU=x$F(RQe)GOQrVQjzBuZTL7#E9s)WZ{D4CE^Zo56zb*w)fO@HIln_Q{l4ZNPqsW LWlIwU#`pT)DF%-( literal 0 HcmV?d00001 diff --git a/payments/locale/it_IT/LC_MESSAGES/django.po b/engine/payments/locale/it_IT/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/it_IT/LC_MESSAGES/django.po rename to engine/payments/locale/it_IT/LC_MESSAGES/django.po index 118160d5..3caf12ea 100644 --- a/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/payments/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transazione" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transazioni" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Può essere utilizzato" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Pagamenti" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Deposito" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Ritiro" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Deposito a saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Depositare del denaro per bilanciare" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Elenco di tutte le transazioni (solo lettura)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Recuperare una singola transazione (solo lettura)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID della transazione" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ordine da elaborare dopo il pagamento" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Dettagli di elaborazione" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,98 +74,98 @@ msgstr "" "L'importo della transazione deve rientrare in " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Equilibrio" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Bilance" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nome" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "valuta predefinita" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "valute" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "elenco separato da virgole delle valute supportate da questo gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "importo minimo della transazione" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "importo massimo della transazione" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "limite giornaliero" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite di somma giornaliera degli importi delle transazioni. 0 significa " "nessun limite" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "limite mensile" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite di somma mensile degli importi delle transazioni. 0 significa nessun " "limite" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priorità" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variabili di integrazione" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "gateway di pagamento" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "gateway di pagamento" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "Il percorso di integrazione del gateway non è impostato" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "percorso di integrazione non valido: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldo Deposito" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hello %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -170,7 +174,7 @@ msgstr "" "Abbiamo accreditato il vostro conto con %(amount)s. Il suo saldo attuale\n" " saldo è %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -179,30 +183,30 @@ msgstr "" "In caso di domande, non esitate a contattare il nostro supporto all'indirizzo\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cordiali saluti,
il team %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Tutti i diritti riservati" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "È necessario un fornitore da cui ottenere le tariffe" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Impossibile trovare il fornitore {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Deposito a saldo" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.mo b/engine/payments/locale/ja_JP/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..46f2e16118c32f9f2e4b85726b879eddfc419ac6 GIT binary patch literal 5004 zcmbVOYfK#16~1-T7wI#7H%)WX)-^ON!FH;o_|bra9V!DBEN;_3XxN?I9d~zUGcyY& zv8A0^Yy&m{zm4t0#e&qo;B0Q}o3{KNJ8k23ao;2(h7@$Ma9 zDaLC)#@H8uJAj`627#XgMuDFM?g4%uxDWU+@EUM4a0>VY@ZZ1^;A0>6-j@QaFn$_H z=jlMQn*u%t>;^sp90q;|I05_y@bADF@O|Kyfgx=AHgFG+&N&Bs2>2Tyt^ZvP-vfRI z(T>VB7^a#cl z{ATXpp)<8A_hM3zV1NP~xT%urxi+TUzR#XFD~uqgl0hNH=&y zi3g)vJj@MM3HtPSw3F)z)lg`)$+5$VsJz%hOb@Ej3hs|+CJ#gv)8q+5Z`XpV$(14_ zTHI2NkP=YkDRM+E;Gho8ig2sQr=Vgf6}-;kNfSnvoY$-xniADsRt;&$%niv9Jm)yJ zXomKB*8F(#yi?<5(vWr)3-KU6C22);115uXqG6Wvj)=}nYCsEV0S*dcnrRXV z3EB zG1sO&pWY)?jm z@ikD0299(2HTWy}r@ic+Ar@3LkQ&uu@Y{PflQC~hM;5cShAS~W8Mn*|UJ1e>OCHzr zTh)+~j9PgYJ6WEK9CA~SsXV5~Rk*A3JahTCMN_#rIEgOoDVZk}hz>EvbtGA}SVWCR zbr4AcXbowGndh>cX(8UJCs7#fDkRp)UrHheo)AK+8bxANXh7!yJ#InLTu&N#GPz=v z@CRJ0OLLoA)fiYSgM5meY*(Q5wy0`iwjH7m-WNg@--fYETn}ic2vJuU)$hs-B#_d{YmwUt@U*cb@eUvdwnY|sQ#&3P<({RI#f?r zW>U73P%;XV1LzJK6(VG3P@|y|@!I6-Qmkopm*}&3s+ux*t?LUDAYp zWmvv?Gpq%DHOa8)^XpZ-WJjZ~Np06?hwpiGl`6U3SGm@=zLHn2uUhxala;tiwkxLP z^V3g3RIzje*0(h_aoja64UIeb#x0Ev{^~9M=eD*q)ncZusbWiG{bp>7hm%TJ_4(2F zs(4LPoxiU61zy{*Z9C!r+E&GPDZX8alKQ&(+IxYmt*9*70--~SK7VHdK3nQ;>#0Ok z(c&9;Afg!P8=G4ETYb;oTSu;kRKr&r59mS2u8Kd~rdcIBqDe!E`nKvu%&g+^gdCci z)@|V4J|_e{8B zr-_X8Ve%q2#=JuJPxMSJa8VINwNKl=&=MCrUE z$-XS?K1m*uFhZ`*zLp)CDs~k@ctd*Ajn_!6I|I5T;pvkieO06fB)utGV;^#7_hpA| zHs3XrIdL_6@qoL35IM`z-_ZrC2ki)?}|oF7;?a5yt|aN)`+HaC5A z;Xq$@q?-u`C-+I0`i0%QFogYGMIPGp`LXoVL!_Z0P_;!%Mg(rh9Y72Agv~O zoe>T=2H&9XT+t^BhwPYl6fD6wv^px?z<;TLbT=d3r;dZ2g&{C8mN|JT^Tv=n&<%bT z1_#{9VVX}lm5`y^eG5~<9>q!0AZZ?Tj1anujzOr-Z2^73dNJ{oWrF7tIGX|#{c-R{erdKJFUOM}8b zChQZ^4hSUPgwsRa!S2mmJDI&R4U==X4`xR^MSBDFGTlZPv-bFQnlNQNJke3j&ld^PMt1%0lE9oCYEoWvbfPxNIG|?y67eS`T7IM#2x6HzkH2lj*Vw}h$?pm zZDq_oFg!o7f8qRocd{Q&otDxZl9d2@mx|#7tSH!LZr7;0uN$W4ru&%Nd)|HXlDmJO zJ2t`GzEg9zQC)A`FXWX;YsvfBD g!YZ%F%2F(RhsoX~ea+6izK}{S|24LU7dH#`UrfRH>Hq)$ literal 0 HcmV?d00001 diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.po b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po similarity index 72% rename from payments/locale/ja_JP/LC_MESSAGES/django.po rename to engine/payments/locale/ja_JP/LC_MESSAGES/django.po index 5c3f6f25..27dbc8de 100644 --- a/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "トランザクション" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "トランザクション" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "使用可能" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "支払い" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "デポジット" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "辞退" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "預金残高" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "預金残高を増やす" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "全トランザクションのリスト(読み取り専用)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "単一のトランザクションを取得する(読み取り専用)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "トランザクションUUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "支払い後の処理順序" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "加工内容" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -69,94 +73,94 @@ msgid "" msgstr "" "取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に収まる必要があります。" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "バランス" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "体重計" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "名称" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "デフォルト通貨" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "通貨" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "このゲートウェイがサポートする通貨のカンマ区切りリスト、" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "最低取引金額" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "最高取引額" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "デイリーリミット" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "取引金額の日次合計限度額。0は制限なし" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "月間限度額" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "取引金額の月間合計限度額。0は制限なし" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "優先順位" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "統合変数" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "ペイメントゲートウェイ" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "ペイメントゲートウェイ" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "ゲートウェイ統合パスが設定されていない" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "無効な統合パスです:%(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "預金残高" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "ロゴ" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "こんにちは%(user_first_name)s、" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -165,7 +169,7 @@ msgstr "" "お客様の口座に%(amount)sが入金されました。あなたの現在の\n" " 現在の残高は%(balance)sです。" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -174,30 +178,30 @@ msgstr "" "ご不明な点がございましたら、お気軽に下記までお問い合わせください。\n" " %(contact_email)s。" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "よろしくお願いします、
%(project_name)sチーム" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "無断複写・転載を禁じます。" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "レートを取得するプロバイダーが必要" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "プロバイダーが見つかりませんでした {provider} 。" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 預金残高" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.mo b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7640ce0078328b8d3c57147021d7d1b23f128abd GIT binary patch literal 359 zcmaiv&rX9t5XNit#L=^dJ$Tc>rLhfN|3peDAt}%xa9?4?HFcLPTcZ!+>-j7W9_-OC z`DK!sZzkV-pPqb8P)Eoaa*iA$m&hm|0UR!{j-EeljeZr4g`|aAm_cgANK_}w=#fn6 zbmm?=h3K`hkPe+}VY%-HC^aL_HitsI%W(r%+zR&V2Ra9DPN>gjiwo*e>TLL6p)_0# zJ8reX>v3KXWLaf-O>VSqq\n" "Language-Team: LANGUAGE \n" @@ -16,186 +16,190 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.mo b/engine/payments/locale/ko_KR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..09635ae248adf94ce38f93e871f52cb9e2be669c GIT binary patch literal 4798 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 literal 0 HcmV?d00001 diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.po b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/ko_KR/LC_MESSAGES/django.po rename to engine/payments/locale/ko_KR/LC_MESSAGES/django.po index 3eb228e4..8a854496 100644 --- a/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "거래" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "거래" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "사용 가능" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "결제" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "입금" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "철회" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "잔액 입금" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "잔액을 입금하여 균형 맞추기" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "모든 트랜잭션 나열(읽기 전용)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "단일 트랜잭션 검색(읽기 전용)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "트랜잭션 UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "결제 후 처리할 주문" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "처리 세부 정보" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}에 " "맞아야 합니다." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "잔액" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "저울" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "이름" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "기본 통화" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "통화" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "쉼표로 구분된 이 게이트웨이에서 지원하는 통화 목록입니다," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "최소 거래 금액" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "최대 거래 금액" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "일일 한도" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "거래 금액의 일일 합산 한도입니다. 0은 한도가 없음을 의미합니다." -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "월별 한도" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "거래 금액의 월별 합산 한도입니다. 0은 한도가 없음을 의미합니다." -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "우선순위" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "통합 변수" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "결제 게이트웨이" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "결제 게이트웨이" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "게이트웨이 통합 경로가 설정되지 않았습니다." -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "잘못된 통합 경로입니다: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "잔액 입금" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "로고" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "안녕하세요 %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "귀하의 계정에 %(amount)s가 성공적으로 적립되었습니다. 현재\n" " 잔액은 %(balance)s입니다." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "궁금한 점이 있으면 언제든지 다음 주소로 지원팀에 문의하세요.\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "감사합니다,
%(project_name)s 팀" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "모든 권리 보유" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "요금을 받을 공급업체가 필요합니다." -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "공급자를 찾을 수 없습니다 {provider}." -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | 잔액 입금" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/nl_NL/LC_MESSAGES/django.mo b/engine/payments/locale/nl_NL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b51ecf935b0096a852d24059a599a60801d1c19c GIT binary patch literal 4680 zcmbW3TZklA8OKjzyiGJ}yd)ZkqH zs!pd)Rrk(jR|F9f@I^rof=Cp66hV9td{I&KO&_Hl^MV{u;c@Z*PI~%#XZXsSkoz zz;}WH_&zWO-v!$WxWfDdDEB!~&ixYjH250$ zIQTvA)8LQ6kAZ&z6Y!tlhrvD{eG0q@%01r(9|3;~%Kl&0_!scK%>NCZ2Iml3_FV*@ z0xyH2&j1v8u7muk*K7PbDDu1kE`Z+$MbF=ZUGT5qd%%nDMi#IGvZQ_s9s%D11MK-Q zMv!|#K7O6~7(B-OA%y!Vcml*!Y7=}6?0{mo9w_@#Q2g*F_!9Ud@EPziHe(WX9ONps z0gWIYfSuN%U@p=qf{EOZ3q^GCsm1_QhSLe^IX-!gU$X^E|;LItg!ZLur51 zEd4_mmi!W5m!p%J)SF%&xm54&uAf&|BRk%)x$e764@?@wQ5x#ZnxN&<_&~d%&5Z2! znlJK!)w3rgF0k>E?hGQYd$I9e4>LE40_(MzIV4JRoApi4mba8M5rK=wQ9jW5j7)*a z&5~Zvb>TVWj{A0O7MVD@VYBieUr*&AB-dO!vm)PCr*(L%q_e3nvhrM$qYwI-A|JSn zBLlfH^NV^sa5}MA#1CyR>PJ0|36jWrF~XwmnN*uz&!Vf`FeAHPQl`;A)49_jhhRMJ z>t`;}*eJ8F6j5daW#U+8Q8>tDjeAF|bxmy2o^23yhR#QMGxw@%JqOy*WPx8i-ObL5 z0Eg!>`8C_i_fnJC1*EbjQ6gp6ib{d%xg;^#+o2I*0v$&ji0@Hl!K>1x!l_vU>-k9- zFR0jsP9^4gl;Dq zNl?cpw_5kyu=-NDVfG5I#> zFUoY%FJg?`BRfPAh|n&RL?aenjn?$5G1G=%Pl=j(}3O%iXAnX#J4 zyuI~>_F89eb9JMAOW$l_YLbPnR9U9A9<;8KCy9X--M+ehuDzp=Eg$>r(uuik@>Q0% zHhdTbt#d`_TOGHe=dNtEw(TgAFIwlxDl6sw*7DKT@nyYyeC62Zo?m9nT{b>%b)*!; zCU+U9U)dx322bYg?P0)wRy&FYIo&Sy|s+THD$<%V%j=n9#O5PrZhO76 zzH>>pH!ofm{C}UV=rnGn@!ZDxMtiE*(WT|NHHZ!sTb+X;GUxVs{+VHHqV$yR4NOMf zIJ4Wi&^kHYC!+Ul)@r9c7eKoeeX<+nb64UbGjZ#J%M#CR!*c4+96P0}*E92}K6FMO zT{tzTq#{qF(@u)>$VqjkoS44UXdBy9kE9UAv9)O{wl`R)OEu}-4a?0FLfg7dpJ$)m zmpW~AH?l#l`TF)l%Hmv>>hjKVDz%zy%k|R}LmLucDO9|~dT6^@5$)%&Wwt-qnbzxx z2IN?&;Q&|jH!0fHifF|l)8o%iB);LY5Q($$C@Om`ID0AL}DT-E+8@hl{+5yTeZ>36*kMdnD zR_1H^KijqBB+Mu+K^Lv}%UU2Lt_31k~%_&rj163MQkKu((OCQ1Vs;7c$ z)$dXzhz?&mpiyyBc4?6)vor>x2V1H2a`Gj@>>mBWYV38PN2Sn0pL|j8OTsRu9ll@PWGoTlEN%4U|LLIEcb&mmtc_vsyRc(Wn_!`>`YUtDmOUNdK zPxInyuimxb)wy~v=Bm2~OPfkHljAtUH~oVIyG{2o?2P(&YG5Ss-eIoJguO~q;nc*H zz35U|9ZJrnC6Ce+nAF?{Z6ub|^j1&iXfjtZCgETip?TF-kmHDlx~m{RmOPy8BzDJo gP((1t-j|1E#N5?Itfx8map67Nh%(h_-z2&J0wL044gdfE literal 0 HcmV?d00001 diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.po b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/nl_NL/LC_MESSAGES/django.po rename to engine/payments/locale/nl_NL/LC_MESSAGES/django.po index 9961228d..1e89ecfd 100644 --- a/payments/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transactie" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transacties" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kan worden gebruikt" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Betalingen" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Statiegeld" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Intrekken" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Storting op saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Stort wat geld om te balanceren" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Alle transacties weergeven (alleen-lezen)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Een enkele transactie ophalen (alleen-lezen)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID transactie" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Order te verwerken na betaling" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Verwerkingsdetails" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,96 +74,96 @@ msgstr "" "Het transactiebedrag moet passen binnen " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Saldo" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Weegschaal" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "naam" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "standaardvaluta" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "valuta" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "door komma's gescheiden lijst van munteenheden die door deze gateway worden " "ondersteund," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimum transactiebedrag" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maximaal transactiebedrag" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daglimiet" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "dagelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "maandelijkse limiet" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "maandelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioriteit" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integratievariabelen" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "betalingsgateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "betalingsgateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "gateway integratiepad is niet ingesteld" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "ongeldig integratiepad: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldo Storting" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -168,7 +172,7 @@ msgstr "" "We hebben uw rekening succesvol gecrediteerd met %(amount)s. Uw huidige\n" " saldo is %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -177,30 +181,30 @@ msgstr "" "Als u vragen hebt, kunt u contact opnemen met onze klantenservice op\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Vriendelijke groeten,
het %(project_name)s team" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Alle rechten voorbehouden" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Een provider om tarieven van te krijgen is vereist" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Kon provider {provider} niet vinden." -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo storting" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.mo b/engine/payments/locale/no_NO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6427f6b5958aabea16398b6dd0d9bbac1ba835e2 GIT binary patch literal 4620 zcmbuCOKc=p6^1WEAYk6%{RrF;hOsm5j%SjH$n#)qPtS~rA0xYMm<`tLuG`%;U60Pa zRqbiwk=P(W?2urS1#BiOgp%Dv$|kaeKuAbz5DE{0L>5`H0s#xYQ&nxZ4KqkXY1)6) zt-9x)^WXoRbLWqbJoE#_HOuca{Py0a)H(3?C-}ql^S3MYLGTyg3h&+kr+Gg04y8T} zUI!lr1MmZ21ilO01D^oD1-=J-8N3L-20jM<6PyAceP{W88l30(X;9WnL9zQy@KNwP z;3MEm;N#${;HSVpfHC-Y@S|XdNuLMzKw0NU;6vc+pnU(c3jYkgkLQ1Z=fNqQmhY~D zp9WVziKhpOKes^ssqa?!eNg;)5u5>k3QC;61zX@>!1sbz-;FO|6J$vJ8axHQ0S54S z0unyLbC=0q=Xno2&GYY=EPgzUlenlJ2j35#2F1^LunvA16dn_B5gdWS&ugHp_a~5l z>Mj0U0RIL`T+d)k-Z#LL;2J3LWZ*RTZBY1n8QcYb2@1bUOcs7`fKP&Zp!o9>Q1tT( zDD!>=3U6hMlGsEi zgjMiI8W#Hc0$5y4XA*DPS(qkzYis$k+79jRrpJw!9av}N zYp5T}8S>bltry>3Uwdp&UJFbu5MX2M9AWY%>|+ZL-7PvQa#?S@%TXA?dJ zCNp)toax+S z;N&!v-?Z&)Co!>|!7FQGC0@3ygcPWD8plR^J22u*pra5oX-Btn=WNmr@z3XjLF(jX zYeZOh+U3(-Gn&;*&!ZqYg+f9&uJ+gI7shwD)uAC3m=IEy&tQe!SE)IN=^j?={AZmP%3jo(fTRdHw$UAI)S9vDPN zj7iES+f4Or6r~U;0@&$<&X2jARbfYu(wxK?S|m2o&*$txDTI!-5gTjKK&snmk|AlG z=59=;HrbTE&vkOTnzUnMSerpUlTHo|T5mFMCfYGhP*2Dw>)kSWh3M z@r;VnZmME)D~#EXiLa_nP;r>t^A)l64t5pNi>C+LSCObnT|fdu8VV}%$aE+V>`EA@ zff>a%$;R?K{_MvC+_;du%|_f5R-_07HiJp8oXuQlWy`c@JUWu5M`)Q~LQULPtmrr= zRXSlN+^6~lHmnnN>(>`-KA2p>t6f{_ z%I8Hn>Esb4x2X=HBqFkNQfMSa$})L!x=a|9Qob$o?*1yPQbXi^a=LmDsY&4toY_?e zK5wjlrLol9SzB0b+}3;JoI0pN*UKtXTMla5)Jbw+UN^Rv7aN=U?A+OB>Q7H?P_JB8 zTlL*As4eDQUu&lGdg}UmZNm;jnNhn;Rhcioug#sQJvFE2o|-@VrPFgDy{;z5CRDoKOPOUDlHVy+jQ=gk!Lg+}b)*KD+IkUI2CkK%UlXJS=Gmg4( zVXJwi_Uz$z;(EurS|e$v0kWId&$hyB>Uxwr6VBvQEE4A47H`C;3hu*)F1Y}Fm@`l>?T{yJ#h5jf*G`4KlGD{L_|4x&PZ`ec2|7)qQE$mZly?t&!8x@s5}y3+WHE;Uvt;^Fi6U3u{#D;E46I)nZwNQ64YMNLo0p^0|G(ZXl@cM$-mt|45?=2m@=h13;81qu6o zI~g3I9(M4$8e5}jcg4wa=f_Xf`f}j7Hhs%R`*#P@!CN*%MCcOB)oho9Y_P@E$Gw z8ns9V($nE?z&`tU|4uY378o7cNGQi*rPRK3_CBl+MM%{_NpkA}n|tB&xVbx(cSlhG z;m0GIXznYAn@&{YURGowK2IM@+8MP{w)(ygW5XG0qLftIb*$N!)uG%;1s93sKLH04 zI2?FD6(nYusC5^RxP?^vCPFO5e>EiKkgXH(Pz{o<8sGS8rw<3Dx0uK}wOD=2ZFL6V z2uBi|=q8p(hRS#$MRiS16QYl#Z=-C2i~mAgS+NQ_)Wm(o8i@)Q98)Nog?PjN|3FZm zT!(M}cD%?cd_tV`=~Z literal 0 HcmV?d00001 diff --git a/payments/locale/no_NO/LC_MESSAGES/django.po b/engine/payments/locale/no_NO/LC_MESSAGES/django.po similarity index 70% rename from payments/locale/no_NO/LC_MESSAGES/django.po rename to engine/payments/locale/no_NO/LC_MESSAGES/django.po index f186f0ab..6e14a866 100644 --- a/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/payments/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaksjon" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transaksjoner" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kan brukes" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Betalinger" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Innskudd" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Trekke tilbake" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Innskudd til saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Sett inn litt penger for å balansere" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Liste over alle transaksjoner (skrivebeskyttet)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Hent en enkelttransaksjon (skrivebeskyttet)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID for transaksjon" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ordre som skal behandles etter betaling" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Detaljer om behandlingen" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Transaksjonsbeløpet må passe inn i " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balanse" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Vekt" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "navn" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "standard valuta" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "valutaer" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "kommaseparert liste over valutaer som støttes av denne gatewayen," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimum transaksjonsbeløp" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maksimalt transaksjonsbeløp" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daglig grense" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "daglig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "månedlig grense" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "månedlig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioritet" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integrasjonsvariabler" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "betalingsgateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "betalingsportaler" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "gateway-integrasjonsbanen er ikke angitt" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "ugyldig integrasjonsbane: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldo innskudd" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hallo %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "Vi har kreditert kontoen din med %(amount)s. Din nåværende\n" " saldo er %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "Hvis du har spørsmål, er du velkommen til å kontakte vår support på\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Med vennlig hilsen,
teamet %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Alle rettigheter forbeholdt" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Det kreves en leverandør å få priser fra" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Fant ikke leverandøren {provider}." -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo innskudd" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.mo b/engine/payments/locale/pl_PL/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..aa5a90c7ff90ddc5cf4c4cb3415201efc5aeadb8 GIT binary patch literal 4713 zcmbVPO^h5z6)r-;&k_8_cno$jtq zSM`p&V+*t>0&WQsLY5DaIB?*AkSq?M1%d2Aa0|C6GDt{>3*y2F2@ZU(yJy|&*haYI z-f!yvz3+Whul(o79{hnona1~Ne3#xO#0lWd2k-~w_wN?sL%=@(7t!}Na1!;y4+-%& za25DopbvZ$7y#b~yafCb@KxXkfIkDC2JQi$0{$B~0etd3W&b2_7WHF5-p>Ge-ERS( z1b!Fz81Toy&jWt}d;<6!gZm5%x74&zYc7m{v#ms^(OFj;NOAl?`0Uv{jUL= zz+VH|o__$@-hTpl-XqxL!@w!vDc}hpLM}2O>*AY0UhgLr{tC$ay$J+0;wJEuz`p_6 zPhO09I1Y5c=d1e9tNL$%?B{VTdI&fV1f7L%>?fBge5?)b=fV31f2pc}49GmO&CCnjEDCF#%hUKi zj*q!u-GF}a5qxm7&<~Dbp|39hi_%VHWToe{iD+Y^byi%^YPhZ(bxlHj8To;ZdXy;X zH%t^{WMY*_9&HITTwhUrh0ypaXi~ecEqQ^omg22^=Nrjo!D6I#&s(?%3?v)lZkJq zPj-^iY`~#OP`<4^w-w1yO~EQ9L%~*d6uaaL&xD~Qt76H<_!MX?W4h#}NunZ8!#lh(3rV#Z>_2FgIILEQpprc zhz>qR20>O%^i>cT5Xl1A>gvRfxttcdOPNV=Fm@CqmeI>8Vo(a9t5kr%DrmrvXCenl zlSz{?nIzo=-J=|utR`)#5Ufo>K6N8^B(&ZMltt?fMDM@Dg;|b0T$!?>2q|l-PB2aG zALA(zn4S@#yr@IOqc*Avf(UhV*DmXGA~%-b?R7hDz>h@Z+`0@uidFa$@Rb9TRwT+LT5-t8qCGfpOb^gfV?xw^SFBK& z;;3}BW9|*Tf`D~(uemz+($d0md+YpMdtr0#rLCpba%*X0>2l+)1LnR~45)8m#ZZ;H zvT1RhbkhJNd$=7mA4JG5;fsckNO?^jnk)|tlv4JV=kDGrtBwZC{m^7pVX5)O>nCz3 z_HABUd0}C`y|p~Iv~Za&jnCBnEwozRGL4qsxPW^SXJD2VF0{@ptkcn%qsN=aCf0CY zC9bh#d)jZDNqe@@HnTLby3$xvJDO)S&f->?Eyg!yjx?T~p_ylAkAC^-8I*}dXDXC~$$bV#w$&SKc?)J6A997r9VAg?bI z+#9Dh+UFY2-5STHcU96@h&0rzRtM z>J%NBIx!(QBUh($;BD*uf~14G>9dwJ$kiX^T?B;>TV1d_9) z0aCN1T*hh`X<1w(Nmp$nSKPh?Rx8spZ%;WAXq1K6s>smX)})QmUN)5VXTbWcw2b+< zM2jRXc?Avq9BAMLy?&EkJYdo^jrMRz3u};(O_JqiC?icNHgf|5vpwXZfxCV!$urK( zqg{BiedAR!gG7z421o^z#t?L*6?&$@L=U}bp4oxC@g2})-Hj_T(^YduY-XYC@x{K) zxs?aWp@-SVFE>*?JO<2Y57h22#bX9qY}#A}1Fdk4N$`Gzu(ohB|Qc@)xp5XP1VL5>d>LfC}ab;R8!-vYpJd%ML{j%Z< zRAlu$U#yoQ*&w?U?;F8{3d_We+!tmv7$ULOSVn#~SlP=Z?>Q)krlMF*g7h#$03#{R zmL!SIc(ltgbGX_2Ff?X*Zd~yZdH89W&~glX+;13N#Y<+iHz?(eRL}Bb7cmJA7V*Vx zE{C{>q}bF>Zr?fOzrb?R6iS=ZwnTsjCP07&6lV^SggESgv;DxO+ek04FNYO2&qC%z zj&@auu!aWQIpy`C+&og-X!1$={MZZs-)BJ{GSzDQ0Dxm0GnSq9N4t<2-O2gd^I)-* z18lTzpdo@=!J*09?|><>SiTho7Ka0IDdH(>bIQlUox4hLz+h$uo@W@m|NA~f63Kih z#n)ws6U8#Xo1PyIxpG5;zkHp=xB*!)9%`xJkV6FA;3C7slui0T(`v1|cu8aq55e`^ z%T\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transakcja" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transakcje" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Może być używany" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Płatności" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Depozyt" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Wycofać się" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Wpłata na saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Wpłać trochę pieniędzy na saldo" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Lista wszystkich transakcji (tylko do odczytu)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Pobieranie pojedynczej transakcji (tylko do odczytu)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID transakcji" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Zamówienie do przetworzenia po opłaceniu" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Szczegóły przetwarzania" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Kwota transakcji musi mieścić się w przedziale " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Równowaga" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Wagi" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nazwa" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "waluta domyślna" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "waluty" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "rozdzielana przecinkami lista walut obsługiwanych przez tę bramę," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimalna kwota transakcji" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maksymalna kwota transakcji" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "limit dzienny" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "dzienny limit sumy kwot transakcji. 0 oznacza brak limitu" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "limit miesięczny" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "miesięczny limit sumy kwot transakcji. 0 oznacza brak limitu" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "priorytet" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "zmienne integracji" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "bramka płatności" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "bramki płatności" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "ścieżka integracji bramy nie jest ustawiona" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Nieprawidłowa ścieżka integracji: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldo depozytu" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Witaj %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "Twoje konto zostało pomyślnie zasilone kwotą %(amount)s. Aktualne\n" " wynosi %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy technicznej pod adresem\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Wszelkie prawa zastrzeżone" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Wymagany jest dostawca, od którego można uzyskać stawki" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Nie można znaleźć dostawcy {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Wpłata salda" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.mo b/engine/payments/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..406893f4c22d2840ff0532e3fc5290b86ad4472f GIT binary patch literal 4754 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 Z=obf@k#(Dg8HT!NGqNAVlJk7l{4bcbofZH9 literal 0 HcmV?d00001 diff --git a/payments/locale/pt_BR/LC_MESSAGES/django.po b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/pt_BR/LC_MESSAGES/django.po rename to engine/payments/locale/pt_BR/LC_MESSAGES/django.po index ab537b93..11f04e98 100644 --- a/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transação" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transações" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Pode ser usado" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Pagamentos" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Deposit" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Retirada" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Depósito no saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Depositar algum dinheiro no saldo" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Listar todas as transações (somente leitura)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Recuperar uma única transação (somente leitura)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID da transação" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ordem a ser processada após o pagamento" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Detalhes do processamento" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,97 +74,97 @@ msgstr "" "O valor da transação deve se enquadrar em " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Equilíbrio" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Balanças" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nome" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "moeda padrão" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "moedas" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "lista separada por vírgulas das moedas aceitas por esse gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "valor mínimo da transação" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "valor máximo da transação" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "limite diário" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite de soma diária dos valores das transações. 0 significa que não há " "limite" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "limite mensal" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "limite de soma mensal dos valores das transações. 0 significa sem limite" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioridade" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variáveis de integração" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "gateway de pagamento" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "gateways de pagamento" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "O caminho de integração do gateway não está definido" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Caminho de integração inválido: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Depósito de saldo" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logotipo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Olá %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -169,7 +173,7 @@ msgstr "" "Creditamos sua conta com %(amount)s com sucesso. Seu saldo atual\n" " saldo atual é %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -178,30 +182,30 @@ msgstr "" "Se tiver alguma dúvida, entre em contato com o nosso suporte em\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Atenciosamente,
a equipe %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Todos os direitos reservados" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "É necessário um provedor para obter as tarifas" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Não foi possível encontrar o provedor {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depósito de saldo" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/ro_RO/LC_MESSAGES/django.mo b/engine/payments/locale/ro_RO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1cff5037ea79ac093a99d902437b9673037a1bd6 GIT binary patch literal 4762 zcmb`KOKcri8OIN$Kx-(J@TLS#3n6yvYn-GNmGcm`ju|h(k%7PsW77;>h5G+81D(ql~DnLa-Y}j>$1PgxOnHl>gAwflqa`T^a z<~+Xd|2_TZLyvw>@l5mk48LpdQtBl5$4B^&=gzy8dJ_CCxWczL!AZtP-=ow=zzy(y zUG{|Qcjhu>R&p9JR^KM%@%1t{mf1|9~#1s(!_ z2!0;?8Te`NPv8*z2lz3t&!%Utaqrty`PcZ%$cnX|AXjyk2dhdl1&W@30DItH!4H7vA4e9j3o@mC4;}^I1XK8Y1QI^V zc);fGFun!~504|9$a@xKsoDbNJlBkOz!QvL13wJ@6g&sM0m}JLd{8MUQ7?cZ|0(cg za21sG-v?1${Rk9(e*%iWzXOkfZ-Ji!4>5TaJPv*wyagTse*?<8zk|ZtVJ?yN&osCI z@=5i;mp~87x}P`Se+h~lZ-HXBw?UETF($1D-Fo2_G{5S9l_@>ksLE-C@{65vp#rvCg@g>nubaMJPlY0nrwM&++>NKha7226IF|LCt7i!Z7-S z=o+7{H+gB2$`!f3cyalxy5#KT3%1hz!s~65rzaRU9jGn%S{NxuHgSEIXeb!EvJ?`gbz*XDlEk8`+%P74IipOgzt>fv2OI)<+}HQTP{Wb8 zuLkFBs!Wz??*`kI%yI7yb3K!pJh3gJ&ZsC|)s9Qmvn2=Gf$?cMeX8frhyX_>q5SJM zskU-6v{OiB%}|MyJu51uDk+9Tqf0w7B220?$1z1;C&7E0Cl2|_Fd7wJKK6D|3rPno zy=-=;HQPg$=11`m2gi+ly}sJMT~`MOsnj?~&D;>V>-RDY>#ii_;BiPu3%Y)1hNtU}RgV zZJT8UM2Z7!^_?$UE~l02>)j#{7&{gh+tsfIY*0Hw-`WhrT700;Ns(8$v@U{g$<(Hr z&<}ZzOg5Xg>=4$baG!A@cMQJX%WTQ)4o;umr^1}r9#y7F6-_EWHBPXe+z;a^l@)_R z4b2rd#2#a-8Y8Ho%OCg&-M06w3h8n5KiO4WR24oYfFTVJig9H6qzA0xQZ+KWLz`Ev z``tS(+X-I0BW|l*Ug9Z|1X5eUWU0KZyt865T{55D6{dI5GRA}&dv93L!$7F?T_xNX z`YHzNyTQ!H{41+VYu&B$^WCMd&cCv?y1cf$dU5r7=Yb36zZMsaUs0;dw)U$s#B|aR z86+oU2Pc7u+j&Ve5+Ze)JTh4a44zVdt>f%4fdPDJlp-&x9&BE{|I^ou=LO>AVro2+xL@WXOW=c70*Pai+2>(|qhxqkYzJ~nl7 zLPdm>N;aKLQig#WYsqdPKw-kOxFVb=tZAv!?B6Y$q4)pahaV_OC?KlOWrbG zhg|oA&)r_leFg_|e2E;T)kTjRbKWabdEcsT0XsVNc2ot=Vc3aIW`{|&lx)LI&j)p( z$WnclNZO-ITx5LU^MSy7hu^uGWRtCY9rp)KVT!4i6~oa1$ZNg z=6c8ZLC6>xO`!=`5OqZRQ56LyjiT;;PM%h4f&8dPp$bgizEQe;7D6`O7u2V5EBtc& zp38EFjTEKB)P;U*R&sS1#=9jEx0H*SXT@M8;VooxglpOaj*=E2HQEiaW+Jz!mOBut zumC&mybkd_lRJ%xN*Hce?T-_a;lVh1Q-ZOgX^T)NMou0yB)~m2M($Y%BF&x)!u)^e z9L^eXNBRa40r@L$d(mXLsJ2*F{4u&p(+0#bzRV@q+|Zp6nc~)&d8d6u-8+bjjcY_x zc+U*l#@6EYjj>*01qpC_tn2ZEyKSK-(*nP5;uOMZW~bDO^cEb%CrFGusW5NdnD?I#$#Dlz1fy_nJd5ADf;1WwHln_h&!l*sILlM?$}f;`=!2Vr)+ mC6Ub4ej>96lReaJ>m_we-PM_F(!5d6;qXDNNfY9AB>x-w&86J{ literal 0 HcmV?d00001 diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.po b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/ro_RO/LC_MESSAGES/django.po rename to engine/payments/locale/ro_RO/LC_MESSAGES/django.po index 8499eb99..ce651bec 100644 --- a/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Tranzacție" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Tranzacții" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Poate fi utilizat" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Plăți" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Depozit" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Retragere" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Depozit la sold" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Depuneți niște bani la sold" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Lista tuturor tranzacțiilor (doar pentru citire)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Recuperează o singură tranzacție (numai citire)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID al tranzacției" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ordin de procesare după plată" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Detalii de prelucrare" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Valoarea tranzacției trebuie să se încadreze în " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Echilibru" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Balanță" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "nume" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "moneda implicită" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "valute" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "listă separată prin virgulă a valutelor acceptate de acest gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "valoarea minimă a tranzacției" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "valoarea maximă a tranzacției" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "limită zilnică" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "suma limită zilnică a sumelor tranzacțiilor. 0 înseamnă nicio limită" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "limită lunară" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "limita sumei lunare a sumelor tranzacțiilor. 0 înseamnă nicio limită" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioritate" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "variabile de integrare" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "gateway de plată" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "gateway-uri de plată" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "calea de integrare a gateway-ului nu este setată" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "cale de integrare invalidă: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Sold Depozit" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Bună ziua %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "Am creditat cu succes contul dvs. cu %(amount)s. Soldul dvs. actual\n" " actual este %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "Dacă aveți întrebări, nu ezitați să contactați asistența noastră la\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Cele mai bune salutări,
echipa %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Toate drepturile rezervate" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Este necesar un furnizor de la care să se obțină tarife" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Nu am putut găsi furnizorul {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Depozit sold" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.mo b/engine/payments/locale/ru_RU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb55af6a5afcbc0d5041ac49c8c2cb350b3eb24c GIT binary patch literal 5816 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 literal 0 HcmV?d00001 diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.po b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po similarity index 75% rename from payments/locale/ru_RU/LC_MESSAGES/django.po rename to engine/payments/locale/ru_RU/LC_MESSAGES/django.po index 90647066..23825a77 100644 --- a/payments/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Транзакция" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Транзакции" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Можно использовать" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Платежи" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Депозит" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Вывести" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Депозит на баланс" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Внесите немного денег на баланс" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Список всех транзакций (только для чтения)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Получение одной транзакции (только для чтения)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "UUID транзакции" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Заказ на обработку после оплаты" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Детали обработки" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "Сумма транзакции должна вписываться в " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Баланс" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Балансы" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "имя" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "валюта по умолчанию" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "валюты" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "список валют, поддерживаемых данным шлюзом, разделенный запятыми," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "минимальная сумма транзакции" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "максимальная сумма транзакции" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "суточный лимит" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "суточный лимит сумм транзакций. 0 означает отсутствие лимита" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "месячный лимит" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "месячный лимит сумм транзакций. 0 означает отсутствие лимита" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "приоритет" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "интеграционные переменные" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "платёжный шлюз" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "платёжные шлюзы" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "путь интеграции шлюза не установлен" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Неверный путь интеграции: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Балансовый депозит" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Логотип" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Привет %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "Мы успешно зачислили на ваш счет %(amount)s. Ваш текущий\n" " баланс составляет %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "Если у вас возникнут вопросы, обращайтесь в нашу службу поддержки по адресу\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "С наилучшими пожеланиями,
команда %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Все права защищены" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Требуется поставщик, у которого можно получить тарифы" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Не удалось найти провайдера {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Депозит баланса" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.mo b/engine/payments/locale/sv_SE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..42b97e7cf78c373c1cb7b01a1782db500b89cbfa GIT binary patch literal 4699 zcmbtXOKfCE6)lGFGoL`hCwu}ofEhRA?s%L;iF!U@dwM*Lzp~qgtgPyO)vs&%eL7Y3 z+S8dCiA9hYu|vv=MS^4_u^`H7Bm^7Oh|dOz9U1`=QkIAn3j|qkZoSv`vxgZ(cyiBq z_1>$hd(S<$?wvnB_Qo@Nf;-kRd0$1_w9&iTZv+oh& zao{HKeZTB3V2)qU4eO?1T0{jJ#zyDQ%e*u0N>7Q=8cW}0^l4Fu89@k$ADWv-X{P)4IBXRCtk-tUjx1Y ztN{N8glpo7kL2$OxPoyFh(GZ%{^51*0GXFpfu97v37iN18u$e8pTK?K;~<0i{T`6{ z{UMP3_$83{`74mu`8)8_z(+wE+f@Os0-pymzpnt%lsJdQ*#GlD(CM|p_VLBf+4gB3;5vifjK34& zD?sL%eP;XlVt-i+e6g0;ZuWuW!!}JWxa=?1GyA~toLrwTZaBBtPb$XDHS@(ju-$Oa zU#xY$&f&-YGZ(BIgh6~9Ke*|6M;dy4eHrMlmXV2-9jDWTc6ORq#I9ER+saWlHPn+y z5a}c&qhwG`lW0WgKpDwjTfz+2Q&e6dP6HLysMXV!I+3)N1|}WqKv|NdMRekn>B^4s zyZ8~CfQ|OG>yazj6i6p))O3_tEOKhUZDq8K^vlZlg={h8g^sD>wv1%bQ4@qagVbs_8C%g- z77MCSn!wIpY@5q$!1N3#zpgrNFOjjTz$ztU!B(~vyA+5{8po2X8b~%Kph#nxv`d}L z7?pH1?6cWmkQ#p39>FbG8sgJ^IhrL*&!QkX3x#NKT*TMV&B@(ualDWSqz0*xj$wCx zZ?iZb^Oj|{&XSDNEOE9*b08eDq$Hh8Rb81yZerp{Ot>hJY#J+y(?r4ClqSqg-j*H} zeh`Z;%#}<73DLpFBt?*w6Fn70DTrhN>~*!V6E0_k?$RjDkQhS+iH+!`3^B-s&{Zlz zU==iwQYTFuBu!~%CS;OyQ}mE)dZw7Pr(&>HfqcqF4kfhSj+DjIAw(bC=R%!h4_7Ky z_>i)u$^_HQQ5si7l!mE@3;N%;>r>gsR@w4APoxg zc_h0y9uO5Bh=Cl%DsdC}ogUlC1Kb#mymceo_*M822$TbpRv6`sRva?2cpjZd(-X9m zm=LA=f)$E0q)Jyi=02sH2v}E#watYW*Ba}sz2${g?lP3(6lE2OK?%^scQiJ6_JyQ%= zYJBhpM(&Fvo3}Q;(O7EjtuL%KZquzvP92>>oB1hIZ3fj{oRi3bIyH8ii;ZoXpPPTK z_UzOa&MV`pYc|wDbukNVwUyRsYICEyrG}bkRIlJvsr&D%bLXqi%+cI4_4((|&Ec9_ zmDW{TTnZxTQiIi(H?|1B#hvwyUAnlmvEEu(YJL6c&Q=3Ynp?G{jkU{|mV}uMRkek4 zuTG0w%~o^!8a39JR~i4?v^v>g)vBqr=33*}vGcXLsU-*#>hwZeyQ$46Gcu}PO-*d;lnngPUYfr^`R%2d zgr2%Y=PMVcgm+)|`Gi5KI#r;@cYTFMuK0pCB-=N7X#1lekbyd`)SOG>!*ZRj`Z^t{ zq()a%l1S?NTJ3Zcamkmx@nIBUnsPW0j~7K6n(;wmZKCm_%lqfG+Z%{8J19;PKel>ZY9@q;~R|92Nz9h0Vpfc6`u>_T2cun=4_J zg89f%nf0L=UW}j&0|iyWkjy5Vk}W7$0If$QoL)5Jl*H#s|(7i+kpHJCK}6vB+iKiftJM zDfom>&LyBg?2ZpZ+s9YZh{f@Nb&`7U6znG``M%)$;*PH3bkP?p+?C|4ODk5`5nu3` z57bm%YkU{>6G}-2raUbm@@{}m4K#aIOlrPZ$q+mrYw98Nvg|v;P%8b!a;WuTq{Bil zB9~3BnBon}1)30Sm7lV?#6hh^Afj|I;3lB0+=xX3f3Zuxh=Az`u?hT6QZ!41Z8LTF z8VwpV;xrC5#VpiE~`M$^vmsUH{Lm!A490cLs(M z1kOmWf)Ld5B6x%KBUTjlV7c_UL+FFc;rQ^lM?j+fA5DUtGzmtep^hLpAGD&+@gA0% zgjFvCbP4ig5NM{9^Fc+dqE&FCfk1wQESyrrY#uD`79R8lnIHpO1TQX+a;m)$K*|5E z1T+tc*znB*6WUhNKrxb(Zy)$J3dAAAEuF z+V~*mZ4&(1zK%|udZ)=No#5ruydVy#3reh0WJa8#2p5j0qZ0g%`-;-8FnCvcS$2(# zLj)kSM)x7Wyt6\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Transaktioner" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kan användas" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Betalningar" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Insättning" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Uttag" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Insättning till saldo" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Sätt in pengar på saldot" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Lista alla transaktioner (skrivskyddad)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Hämta en enskild transaktion (skrivskyddad)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Transaktionens UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Order att bearbeta efter betald" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Bearbetning av detaljer" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,96 +74,96 @@ msgstr "" "Transaktionsbeloppet måste rymmas inom " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Balans" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Vågskålar" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "namn" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "standardvaluta" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "valutor" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "Kommaseparerad lista över valutor som stöds av denna gateway," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minsta transaktionsbelopp" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "högsta transaktionsbelopp" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "daglig gräns" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "gräns för daglig summa av transaktionernas belopp. 0 betyder ingen gräns" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "månadsgräns" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "månadsgräns för summan av transaktionernas belopp. 0 betyder ingen gräns" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "prioritet" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "integrationsvariabler" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "Betalningsgateway" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "Betalningsgateways" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "Integrationsvägen för gateway är inte inställd" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "ogiltig integrationsväg: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Saldo insättning" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logotyp" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Hej %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -168,7 +172,7 @@ msgstr "" "Vi har framgångsrikt krediterat ditt konto med %(amount)s. Ditt nuvarande\n" " saldo är %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -177,30 +181,30 @@ msgstr "" "Om du har några frågor är du välkommen att kontakta vår support på\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Bästa hälsningar,
teamet %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Alla rättigheter förbehållna" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "En leverantör att få priser från krävs" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Kunde inte hitta leverantören {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Saldo insättning" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.mo b/engine/payments/locale/th_TH/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..03a1e98a007eb977c531e878e99de4080127567b GIT binary patch literal 6863 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 literal 0 HcmV?d00001 diff --git a/payments/locale/th_TH/LC_MESSAGES/django.po b/engine/payments/locale/th_TH/LC_MESSAGES/django.po similarity index 77% rename from payments/locale/th_TH/LC_MESSAGES/django.po rename to engine/payments/locale/th_TH/LC_MESSAGES/django.po index b35d271b..50f8d27f 100644 --- a/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/payments/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "ธุรกรรม" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "ธุรกรรม" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "สามารถใช้ได้" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "การชำระเงิน" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "เงินฝาก" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "ถอน" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "ฝากเงินเพื่อปรับยอด" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "ฝากเงินเพื่อปรับยอด" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "รายการธุรกรรมทั้งหมด (อ่านอย่างเดียว)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "ดึงข้อมูลธุรกรรมเดียว (อ่านอย่างเดียว)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "รหัส UUID ของธุรกรรม" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "คำสั่งซื้อเพื่อดำเนินการหลังจากชำระเงินแล้ว" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "รายละเอียดการประมวลผล" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "จำนวนเงินต้องอยู่ในช่วง " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "สมดุล" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "สเกล" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "ชื่อ" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "สกุลเงินเริ่มต้น" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "สกุลเงิน" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "รายการสกุลเงินที่รองรับโดยเกตเวย์นี้ แยกด้วยเครื่องหมายจุลภาค" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "จำนวนเงินการทำรายการขั้นต่ำ" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "จำนวนเงินสูงสุดต่อรายการ" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "ขีดจำกัดรายวัน" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "ขีดจำกัดยอดรวมต่อวันของจำนวนเงินธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "วงเงินรายเดือน" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "วงเงินรวมรายเดือนของจำนวนธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "ลำดับความสำคัญ" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "ตัวแปรการรวม" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "เกตเวย์การชำระเงิน" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "เกตเวย์การชำระเงิน" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "ไม่ได้ตั้งค่าเส้นทางการรวมเกตเวย์" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "เส้นทางบูรณาการไม่ถูกต้อง: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "เงินฝากสมดุล" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "โลโก้" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,37 +170,37 @@ msgstr "" "เราได้ทำการเครดิตเงินเข้าบัญชีของคุณเรียบร้อยแล้วเป็นจำนวน %(amount)s " "ยอดเงินคงเหลือปัจจุบันของคุณคือ %(balance)s" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "หากคุณมีคำถามใด ๆ โปรดติดต่อทีมสนับสนุนของเราได้ที่ %(contact_email)s" -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "ขอแสดงความนับถือ
ทีมงาน %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "สงวนลิขสิทธิ์" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "จำเป็นต้องมีผู้ให้บริการเพื่อรับอัตราค่าบริการ" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "ไม่พบผู้ให้บริการ {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | ยอดเงินฝากคงเหลือ" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.mo b/engine/payments/locale/tr_TR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d532c4d1b5b086ff307d6e6a10330dc06aadd610 GIT binary patch literal 4682 zcmbuBU2I%O700I`6fl%RDc=oDOGE6|Yn-$dmGdFu#BmI<6WQyOJVmp6XLpCaAKSTi z?OZph5C|1s5%7XkzY*~Os$Y;0c>sBh;E@-EB0y9^LVe*G3558ad+$0oDNR)vdHtW6 zJ9Flo|M{5t^CJhpuV~Z!9^-fY0i}+Ee>}iH+Hc;a)Q7;|f*1I98=Pc(k z2MoZ6!4P~ecpZES{1*6r@HOxhcnf?S{3kd89(u6+J_*h-eioGT5>VuR9Xten8+-)( z5%@Xq=isNnKY_Uts(VQ24nGeh~b3g%2@UV*D8R zaj*l5J}-m9(<|VI!5@Q9gTDYJ9{vWt3?Afg;qRN^li;i1VQ?1|-rfL3?%%hqxRDx80^niIVw7NiMBpXDbuNL&l| zZA8AyUSD52t1dgcxn?unNxbfvI0#+b)!v$*k;GxHlY#X{R;QXBS`MvY1`tIVk9bX(5B0JI;-gvn9R)RrA!Y~ zgxqu9n)S|vZp->YP+AQ|5SnX_t-I94}qTxJB3!(L`t-5SurV4?IenfPVK;mGJy^qVv>$-552c>+o4}N91IdKA6q$Qp=p<; znzBs88|scA6&MGpp^MPF?5D%19Lte)wvK2MCBryNXY?$D z6P7wo##?R248v@!Vy?zqRH)M=vN}p)i@J#(GdKQPo2u;45_H`%lJ&q4bl4atIN4^Z zXTvaoNC|+e9p}?Am($91be;@Jj15bO<@&`TJ}3jBV{M3IEisVjb`ocVv`&V8Or|#3 zguYKZJXvkJY9m;iB7EvfZWv;{721^94T3&+lL>R;drX;1RpC;JsXD=WazBlyRG4%V z6`5-;!XLF&l@nCt;r1+6?tSjln1=x0yQvsWaDfc ze)o>k@dO?3$lENZQ%I2_5ZDYRQ{`>uofVhql=<+kG`)+K8WXD4uUOI1kW}foOt??< zOE|3Kx-*wfUs+yQX&rJ9Z@J*~SBnMpBT}_#%eYF1MLFpV zLr88@9h@X0VdtgLNQ#tY^6+GtFholEwamNwM_H8`67Gj5tAT`?6yCs_O|`G{>cuZF zoM~QNIla7aLth`~)P5DZR92bBQqZ_eog@e5^upz(`GqxoZ1&i5GtW+}Qm=g0SWdex zXv`10X``9U>4{4h8>@E1$&SWZs>)okzA<~W@yx8AeP-_17oVP`O1vF;ejZmeQs{hXE~D80$i zg7Zh)q46`Ccqn#LOr^7bE(s_zfsOU<&CyQZ_{fa4sadwhn(9{XlLH3L5V|&2F*hMI zTW!OI7CIj~?Y3N8n2N-`?a@wXa<03)P~7RUjJAC6NV!7}#(9{sEf+?X%HZ~GQ0H9E zlfZ;`G!#=y6Z6py!h~38b%FD$xqB-jdHclytm=oOodC7fSsQn)nm2uyTYbf3%tb~u zc|&bEwPx~erBoD}x4FT;Qc)2awB<;=2Hz-wPXebiywJh80LyvzWa97`qUDm;sO})C_U3I!Lx$mW+ul z;}R>)R=Ez}!8DSp6_8&}L4KVz@>yO1Y0g_VPeLfoMdvsYHTJgEvh_XFGXMQ8a9%#f zT_^PN0P!T=mM&DDu3VsP-?e!AY(X}Okim@OogzLX52+^P0ZZb@<}QAxkAu4IfgNol zyl;y;jL1lnm>4g0AgDPzHf;(^>WEXO)$Y%VT{XwQ zX(|&6D)Dsr&dWP={c#1Zk|idrijXFS`-R`jV_i`x?xC(K-eVDELP#S0zt4uU4pU4= zJEQGL3@&O-b)Kky-lnDn57bGr-|THm;bUE)G6j!{&V_O30a0a#Fgm06UL_CWzPoQg eQpCF=q4tDWghIXhiU{Xbw{PV=?}&SA;eP-{#J8US literal 0 HcmV?d00001 diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.po b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po similarity index 71% rename from payments/locale/tr_TR/LC_MESSAGES/django.po rename to engine/payments/locale/tr_TR/LC_MESSAGES/django.po index fa94cd1f..c97f35f9 100644 --- a/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "İşlem" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "İşlemler" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Kullanılabilir" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Ödemeler" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Depozito" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Geri Çekilme" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Bakiyeye yatırma" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Bakiye için biraz para yatırın" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Tüm işlemleri listele (salt okunur)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Tek bir işlemi alma (salt okunur)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "İşlem UUID'si" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Ödeme yapıldıktan sonra işleme alınacak sipariş" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "İşleme ayrıntıları" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -71,96 +75,96 @@ msgstr "" "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} içine " "sığmalıdır" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Denge" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Terazi" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "isim" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "varsayılan para birimi" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "para birimleri" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "Bu ağ geçidi tarafından desteklenen para birimlerinin virgülle ayrılmış " "listesi," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "minimum işlem tutarı" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "maksimum işlem tutarı" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "günlük limit" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "işlem tutarlarının günlük toplam limiti. 0 limit yok anlamına gelir" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "aylık limit" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "işlem tutarlarının aylık toplam limiti. 0 limit yok anlamına gelir" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "öncelik" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "entegrasyon değişkenleri" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "ödeme ağ geçidi" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "ödeme ağ geçitleri" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "ağ geçidi entegrasyon yolu ayarlanmamış" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "geçersiz entegrasyon yolu: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Bakiye Yatırma" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Logo" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Merhaba %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -169,7 +173,7 @@ msgstr "" "Hesabınıza başarılı bir şekilde %(amount)s yatırdık. Şu anki\n" " denge %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -178,30 +182,30 @@ msgstr "" "Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten çekinmeyin\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Saygılarımla,
the %(project_name)s team" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Tüm hakları saklıdır" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Fiyat almak için bir sağlayıcı gereklidir" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Sağlayıcı bulunamadı {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Bakiye Yatırma" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.mo b/engine/payments/locale/vi_VN/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9957f8de94d262a325028c1ed61fce3c0ce40acc GIT binary patch literal 5152 zcmb_eYit}>6~2U0z`RR&({ciY*wnjql2)yp2iT5d41PrRICQh`#9%2-#K^wblWY@2wa1>Ka2a=JA~K`{KFRf;rh)xh4?V=x4L6}T1nZ(twrj$5<${lHTZG8rsKzLul`TaU2s5$m{+T$o`!LvYoF2tH9Uu{=WksLHpJZ z3b70LeIU>406z&_1F~Iz27U@S3g_6qZvi<@8h9u0$G{Qb#k~Cw;NxiD4iebkQ^5Ox ztH67Ke*$n*aStN`Bxf=;6qgxFjI_-AdfeSB@f-EW?R_!1Bj zGF-9Ud@Dl`j4d6O4{<%DfZJv=vCt%j$} zI^{=6Xx5c6{DFTmiJc(Ck~Z%cMuT+33CL4mBx)*4*R@5Uz|&F0Bn*-zeUg@?;4AM? zvOTH_S@<7P98d#`fIRG14+D?DQK%kDbf|10U6(@LaANMmzAf}ENmu%oDiH28gGk3k zI}%GO!h)(HLpvJWvlQ-Q1Ge>p@^33EUi77>24Izvo?t7N6uV>#EATu?k!ngd#wJ%| znV?Qq5{AmRH0+C#W-|!+hsl#OgjXno055qet?y?u=f z!yJ3KG7t$9Qr1+NVCr8_;{o9YjX-$vsP+(#(x^NL!qff@U%@wLJ*ptxwBA-+S)w8c zZ6q*AgMv&R$vVmdqM~illxaUs8}+fmVhhfpJL<2D}5DqI9?6@$r0genfT;*e2< zes@!vZla~cgeX1dtdN%=Rq8rs?gM%l0jujq_29^Z)8jL>#fg#H_%}x$T%4YqnVepj zK3=)ufRP8xfbtfRIHEFLMTsdV^~43q7OI2hM1<@@E;O7XS()6{pCt^GlD*CH?&d1X zQ-kHctv_$D)VT24p*$kiZJwL``uJFFab{$C{5Tyea%#N_9n7jsWzw!3LY+ho4Ac0b z$EbQ$#P_fy0LemcA#?q#yB>;uENT=Zv{4FH%#|0>A3Hpn}pJ>90)=$ z8YaJKn$g~!yD59z+warXy|iOscb}N;Y4k?Z%8`^ENZRixjc37;y%3On|fR zkNJ($JX;s#H#^>`)jJL0ZL~|vZ?YWoIx8M6;Xj}-?Yzv67z%v+zl4_GSX)iIr(j{u z9yeDkO1tN{nzz&Lqy8WW>n%6Ycb?}nkNF#N(#|qCfbAd|#1Aq<@YjM{rUN7=U@+}m zXtLEf33z%bhE*|^cFti9%9}icaMyxdm`t|v1 zJ|Zxu@UIj+v0p+(5gc?f!`uM$=wi1R(Fc>cjbQ61X1^6!*L@z8rQK&hFSLq9;-Cj! zS$#}?KBegx8_oKeM^H`YOhQeB;e2~ge8cHoGD{#5P~VF<$?yi`T}^E1<0PkojS~&f zg5YIAMJ$XyV1t+_zrav76po)PTr0&BxwJlyzg$dQ8_t#U68U(V4reBEZ+SNaH4BL$ z$xA!GvP_mf={v=nELam9vOEpT7GzSfHiBIh+0fiSqrJFyTEhZFWyKd)o@QE4!4r`9 zbHu)P0dYfER+>dDa%0y6fG@wa^IA+$B^ zHuAbEuFZ8+!K>3>)HbFF)G{O+?>WYcWjZW25mP41%ZF2TKH8|gsPr7Dt3oodLHrHr z=CZN^g`#-!H*o-=<;m0dKYZ(zEf_1w7-!82*g_TIDr)MP*}8?OpRm{(97Q+EYR+7w wMV53~{*\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "Giao dịch" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "Giao dịch" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "Có thể sử dụng" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "Thanh toán" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "Tiền gửi" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "Rút tiền" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "Gửi tiền vào tài khoản" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "Gửi một số tiền để cân bằng." -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "Danh sách tất cả các giao dịch (chỉ đọc)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "Lấy một giao dịch duy nhất (chỉ đọc)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "Mã giao dịch UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "Đơn hàng sẽ được xử lý sau khi thanh toán." -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "Chi tiết xử lý" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,98 +74,98 @@ msgstr "" "Số tiền giao dịch phải nằm trong khoảng " "{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "Cân bằng" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "Cân" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "tên" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "Tiền tệ mặc định" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "tiền tệ" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "" "Danh sách các loại tiền tệ được hỗ trợ bởi cổng thanh toán này, được phân " "tách bằng dấu phẩy," -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "Số tiền giao dịch tối thiểu" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "Số tiền giao dịch tối đa" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "giới hạn hàng ngày" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" "Giới hạn tổng số tiền giao dịch hàng ngày. 0 có nghĩa là không có giới hạn." -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "giới hạn hàng tháng" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "" "Giới hạn tổng số tiền giao dịch hàng tháng. 0 có nghĩa là không có giới hạn." -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "ưu tiên" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "biến tích phân" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "cổng thanh toán" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "Cổng thanh toán" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "Đường dẫn tích hợp cổng không được thiết lập." -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "Đường dẫn tích hợp không hợp lệ: %(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "Số dư tiền gửi" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "Biểu trưng" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "Xin chào %(user_first_name)s," -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -170,7 +174,7 @@ msgstr "" "Chúng tôi đã thành công trong việc nạp tiền vào tài khoản của bạn với số " "tiền %(amount)s. Số dư hiện tại của bạn là %(balance)s." -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -179,30 +183,30 @@ msgstr "" "Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" " tôi tại %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "Trân trọng,
Đội ngũ %(project_name)s" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "Tất cả các quyền được bảo lưu." -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "Cần có nhà cung cấp để lấy báo giá." -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "Không thể tìm thấy nhà cung cấp {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME} | Số dư tiền gửi" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..639c547743e3e0974e4cbfb6952a6c08ff977d12 GIT binary patch literal 4292 zcmbtVTW}j!89puLCZIsM7fMfn5Sv=YNm|-*nhZ|r1T(RnvE@K{@vNmIX_?ioy1TOD zHW`$gEhl#5q;c)oP7|kgZcSyk$uzcX$HNPkM`n0{4lpp?T}e;r0}spqGkpK<%8^47 z2H4T++jINR|9}7YpYx~39vNYHYVdvy@BW7v+XDQLz`p^%0E}YMH-P(rw9h%N z1Ka?74;TfX4}%0+C*$v*z!Z@7H?WxOXMqTfT>z53D}MW3;P=p8_WS<|+>G`^2#WZ6 z21x7Lff!;x0d4}u{Pws%ehK(x^ymEkUjk|W-vY_b2f#G&(MLTySs?XK0>2K-18JY% z1BtIc`}hG6A-bJ4fB*(*-m^f;(>5Ua74lK?$5kM$OZojj1JXW&{`i}~7~1dn?Z=Uv z9<Ek>Q^t#_jvHMixpR}>wYci5}mH+*1Agw1ZzT)?hpTq?{q@^eEl150^ z6jS+uEAB&jrd(28lppe)9;z+MC&x?A7x9uFK`%ooxEcev+!8*8_e*$*3(^hfWS__T zS-hkll%dPtw}9>w(k0c9!ltaLyrZM(1-4ffJ?+BeQBCJ@NsTD78soZ(Tz{p+uwF_OA6!~SLyM_$ENrvD#$F>zcwAQm0!k6crP>q!C+LcVi zgZQMB8P{}}jL?p{QNw%U8czr?VkAXaj>=&U3KFtm5D7IrEU8=yhXrD#9V&b`YME4y zU+1RAV=w~puwPWy5*!@q;-!?ViwKhxh3j%GZc-oi?M7dhq)2L5lo8=1HA6PbZG&|Q z0|rG*(j!LA^IiHja$tQGDF3Mlo1LnZ5Y_NXNC`$>b_oh8!opf2A#p<_C2}Uh6&Yr< zC=aJ}U8rFh{u!xcQqyU$s~2Ix(-@}qNWC>2%Tr23-2jEi;MmWv&R;2i9bk71v4|vt zR7Fm}Z|~bkCA>CmS;^K0E+w>-Y8th?4unINT-C};MN~>DX4%DFR_4M-ZfFU?6PhaE zuExvEl}9VO{5Uv?F6JqjCnbmuF{&DpEKC*`ilTu?5f=oXMz zFMlb89C$*A3ZWpe0vgbGSW`_%nrkV&OeUAi0Dr)U36)zItVejdGE(kw5=|)}IgHamrb2}5bUJ9LM7(2i zeU(=*P>MI|)!lkk`uggRRqni~)B{pFfkJ%#po zr%bRZ65NY(5;aiI8}~MCZ*1qA>NY)7`*ffU=ap^-n~j(p32sltj9^Hs=Yc(~!8Xw? z(~95=I92N1`N6u4!OeBNZgc&nXP>IW6WA>oW-vrofg+ij4(q#G+c@6s9WAYU`SUwk zTS5&xLf_xn(bkBbrncH0tL;_y|>@FZn3T78Yr$z6sHF5 zeAdp4+Jmpzrv~lp&}wsa|H4$xS~&~XoXLU0wTt#}rZBKz=f<70hf8OMvA=U7gKuo; zWNtbGL&d|(#oS716b@4Su)|7|>EgwMULf{JpZ8I`u~0bC&tSVSa>f}*!#vE`nJdg* zxL%x^V%GAR(uK43TVu|(Tg;xmf^JsqzhN!TIIuT6?hKA&cWh**&)i-bq+9gv8?@7& zxKJ89$L#DZmU*-=e3jCpcJ`*7=_`$&h7BTm`J{dHx^sHg89YcmH!j)p2SH46>hk;P zgUlJYWz7%SnYq;g~1cc;1&L`kc&g@#d_3>xeUXwV1nA zSk7VMd3$F09#>)~1!iA7*e z$DP*}?4@k+;OWBkMJIF8TD(TVxwKjNynS-)zr84(ksFYdogFLnXW5zvM$bDVncGX_ zt5+lGv_J1j#iRH35>`^p++G@B&iQ_OWt2f2r8mcX`jH5n+~^~xlf8F{egQX z#~vQC-x`H@NRIZfU&F=R1$$_OfdCA6SydgZbvBG2hHQnFW$mZlcHI{g1{F-}sybOhB*W$JI|rPaRq4#Z?1J7-VM*>iok za>`d$XE8SiDMB-DpLA=a`wOwIv=P3PtMSF#U%zQ;*?0Ik=}dXV*B}O70_w$ EFVd1FMF0Q* literal 0 HcmV?d00001 diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.po b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po similarity index 69% rename from payments/locale/zh_Hans/LC_MESSAGES/django.po rename to engine/payments/locale/zh_Hans/LC_MESSAGES/django.po index add00a38..cf34f3c5 100644 --- a/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,55 +13,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:17 payments/models.py:65 +#: engine/payments/admin.py:17 engine/payments/models.py:65 msgid "transaction" msgstr "交易" -#: payments/admin.py:18 payments/models.py:66 +#: engine/payments/admin.py:18 engine/payments/models.py:66 msgid "transactions" msgstr "交易" -#: payments/admin.py:64 +#: engine/payments/admin.py:64 msgid "can be used" msgstr "可以使用" -#: payments/apps.py:8 +#: engine/payments/apps.py:8 msgid "payments" msgstr "付款" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "deposit" msgstr "存款" -#: payments/choices.py:3 +#: engine/payments/choices.py:3 msgid "withdraw" msgstr "退出" -#: payments/docs/drf/views.py:10 +#: engine/payments/docs/drf/views.py:10 msgid "deposit to balance" msgstr "余额存款" -#: payments/docs/drf/views.py:11 +#: engine/payments/docs/drf/views.py:11 msgid "deposit some money to balance" msgstr "为余额存入一些钱" -#: payments/docs/drf/viewsets.py:10 +#: engine/payments/docs/drf/viewsets.py:11 msgid "list all transactions (read-only)" msgstr "列出所有交易(只读)" -#: payments/docs/drf/viewsets.py:14 +#: engine/payments/docs/drf/viewsets.py:15 msgid "retrieve a single transaction (read-only)" msgstr "检索单个事务(只读)" -#: payments/models.py:38 +#: engine/payments/docs/drf/viewsets.py:20 +msgid "Transaction UUID" +msgstr "事务 UUID" + +#: engine/payments/models.py:38 msgid "order to process after paid" msgstr "付款后处理订单" -#: payments/models.py:41 +#: engine/payments/models.py:41 msgid "processing details" msgstr "处理细节" -#: payments/models.py:61 +#: engine/payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into " @@ -70,94 +74,94 @@ msgstr "" "交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} " "的规定。" -#: payments/models.py:84 +#: engine/payments/models.py:84 msgid "balance" msgstr "平衡" -#: payments/models.py:85 +#: engine/payments/models.py:85 msgid "balances" msgstr "天平" -#: payments/models.py:95 +#: engine/payments/models.py:95 msgid "name" msgstr "名字" -#: payments/models.py:100 +#: engine/payments/models.py:100 msgid "default currency" msgstr "默认货币" -#: payments/models.py:107 +#: engine/payments/models.py:107 msgid "currencies" msgstr "货币" -#: payments/models.py:109 +#: engine/payments/models.py:109 msgid "comma separated list of currencies supported by this gateway, " msgstr "以逗号分隔的该网关支持的货币列表、" -#: payments/models.py:115 +#: engine/payments/models.py:115 msgid "minimum transaction amount" msgstr "最低交易额" -#: payments/models.py:118 +#: engine/payments/models.py:118 msgid "maximum transaction amount" msgstr "最高交易额" -#: payments/models.py:124 +#: engine/payments/models.py:124 msgid "daily limit" msgstr "每日限额" -#: payments/models.py:125 +#: engine/payments/models.py:125 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "交易金额的每日总限额。0 表示无限额" -#: payments/models.py:131 +#: engine/payments/models.py:131 msgid "monthly limit" msgstr "月限额" -#: payments/models.py:132 +#: engine/payments/models.py:132 msgid "monthly sum limit of transactions' amounts. 0 means no limit" msgstr "交易金额的月限额。0 表示无限额" -#: payments/models.py:134 +#: engine/payments/models.py:134 msgid "priority" msgstr "优先权" -#: payments/models.py:135 +#: engine/payments/models.py:135 msgid "integration variables" msgstr "整合变量" -#: payments/models.py:141 +#: engine/payments/models.py:141 msgid "payment gateway" msgstr "支付网关" -#: payments/models.py:142 +#: engine/payments/models.py:142 msgid "payment gateways" msgstr "支付网关" -#: payments/models.py:178 +#: engine/payments/models.py:178 msgid "gateway integration path is not set" msgstr "网关集成路径未设置" -#: payments/models.py:183 +#: engine/payments/models.py:183 #, python-format msgid "invalid integration path: %(path)s" msgstr "集成路径无效:%(path)s" -#: payments/templates/balance_deposit_email.html:6 -#: payments/templates/balance_deposit_email.html:93 +#: engine/payments/templates/balance_deposit_email.html:6 +#: engine/payments/templates/balance_deposit_email.html:93 msgid "balance deposit" msgstr "余额存款" -#: payments/templates/balance_deposit_email.html:88 +#: engine/payments/templates/balance_deposit_email.html:88 msgid "logo" msgstr "标志" -#: payments/templates/balance_deposit_email.html:94 +#: engine/payments/templates/balance_deposit_email.html:94 #, python-format msgid "hello %(user_first_name)s," msgstr "你好%(user_first_name)s_、" -#: payments/templates/balance_deposit_email.html:95 +#: engine/payments/templates/balance_deposit_email.html:95 #, python-format msgid "" "we have successfully credited your account with %(amount)s. your current\n" @@ -166,7 +170,7 @@ msgstr "" "我们已成功地将 %(amount)s_记入您的账户。您目前的\n" " 余额为%(balance)s_。" -#: payments/templates/balance_deposit_email.html:98 +#: engine/payments/templates/balance_deposit_email.html:98 #, python-format msgid "" "if you have any questions, feel free to contact our support at\n" @@ -175,30 +179,30 @@ msgstr "" "如果您有任何问题,请随时通过以下方式联系我们的支持人员\n" " %(contact_email)s." -#: payments/templates/balance_deposit_email.html:100 +#: engine/payments/templates/balance_deposit_email.html:100 #, python-format msgid "best regards,
the %(project_name)s team" msgstr "致以最诚挚的问候,
%(project_name)s_团队" -#: payments/templates/balance_deposit_email.html:106 +#: engine/payments/templates/balance_deposit_email.html:106 msgid "all rights reserved" msgstr "保留所有权利" -#: payments/utils/__init__.py:8 +#: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" msgstr "需要提供商提供费率" -#: payments/utils/__init__.py:15 +#: engine/payments/utils/__init__.py:15 #, python-brace-format msgid "couldn't find provider {provider}" msgstr "找不到提供商 {provider}" -#: payments/utils/emailing.py:27 +#: engine/payments/utils/emailing.py:27 #, python-brace-format msgid "{config.PROJECT_NAME} | balance deposit" msgstr "{config.PROJECT_NAME}| 余额存款" -#: payments/viewsets.py:13 +#: engine/payments/viewsets.py:14 msgid "" "ViewSet for handling read-only operations on the Transaction model. This " "class provides a read-only interface for interacting with transaction data. " diff --git a/payments/managers.py b/engine/payments/managers.py similarity index 95% rename from payments/managers.py rename to engine/payments/managers.py index c909afc3..14e2ffbb 100644 --- a/payments/managers.py +++ b/engine/payments/managers.py @@ -39,6 +39,6 @@ class GatewayQuerySet(QuerySet): ).order_by("-priority") -class GatewayManager(Manager.from_queryset(GatewayQuerySet)): +class GatewayManager(Manager.from_queryset(GatewayQuerySet)): # type: ignore [misc] def get_queryset(self) -> QuerySet: return super().get_queryset().can_be_used() diff --git a/payments/migrations/0001_initial.py b/engine/payments/migrations/0001_initial.py similarity index 100% rename from payments/migrations/0001_initial.py rename to engine/payments/migrations/0001_initial.py diff --git a/payments/migrations/0002_initial.py b/engine/payments/migrations/0002_initial.py similarity index 100% rename from payments/migrations/0002_initial.py rename to engine/payments/migrations/0002_initial.py diff --git a/payments/migrations/0003_alter_transaction_balance.py b/engine/payments/migrations/0003_alter_transaction_balance.py similarity index 100% rename from payments/migrations/0003_alter_transaction_balance.py rename to engine/payments/migrations/0003_alter_transaction_balance.py diff --git a/payments/migrations/0004_alter_transaction_payment_method.py b/engine/payments/migrations/0004_alter_transaction_payment_method.py similarity index 100% rename from payments/migrations/0004_alter_transaction_payment_method.py rename to engine/payments/migrations/0004_alter_transaction_payment_method.py diff --git a/payments/migrations/0005_gateway_transaction_gateway.py b/engine/payments/migrations/0005_gateway_transaction_gateway.py similarity index 100% rename from payments/migrations/0005_gateway_transaction_gateway.py rename to engine/payments/migrations/0005_gateway_transaction_gateway.py diff --git a/payments/migrations/0006_transaction_payments_tr_created_95e595_idx.py b/engine/payments/migrations/0006_transaction_payments_tr_created_95e595_idx.py similarity index 100% rename from payments/migrations/0006_transaction_payments_tr_created_95e595_idx.py rename to engine/payments/migrations/0006_transaction_payments_tr_created_95e595_idx.py diff --git a/vibes_auth/utils/__init__.py b/engine/payments/migrations/__init__.py similarity index 100% rename from vibes_auth/utils/__init__.py rename to engine/payments/migrations/__init__.py diff --git a/payments/models.py b/engine/payments/models.py similarity index 96% rename from payments/models.py rename to engine/payments/models.py index 05ecce11..c61bd8c4 100644 --- a/payments/models.py +++ b/engine/payments/models.py @@ -19,10 +19,10 @@ from django.db.models import ( from django.utils import timezone from django.utils.translation import gettext_lazy as _ -from core.abstract import NiceModel +from engine.core.abstract import NiceModel from evibes.utils.misc import create_object -from payments.gateways import AbstractGateway -from payments.managers import GatewayManager +from engine.payments.gateways import AbstractGateway +from engine.payments.managers import GatewayManager class Transaction(NiceModel): @@ -73,7 +73,7 @@ class Transaction(NiceModel): class Balance(NiceModel): amount = FloatField(null=False, blank=False, default=0) user = OneToOneField( - to="vibes_auth.User", on_delete=CASCADE, blank=True, null=True, related_name="payments_balance" + to=settings.AUTH_USER_MODEL, on_delete=CASCADE, blank=True, null=True, related_name="payments_balance" ) transactions: QuerySet["Transaction"] diff --git a/payments/serializers.py b/engine/payments/serializers.py similarity index 95% rename from payments/serializers.py rename to engine/payments/serializers.py index 6062c3a0..9025e971 100644 --- a/payments/serializers.py +++ b/engine/payments/serializers.py @@ -1,7 +1,7 @@ from rest_framework.fields import FloatField, JSONField, SerializerMethodField from rest_framework.serializers import ModelSerializer, Serializer -from payments.models import Transaction +from engine.payments.models import Transaction class DepositSerializer(Serializer): # type: ignore [type-arg] diff --git a/payments/signals.py b/engine/payments/signals.py similarity index 89% rename from payments/signals.py rename to engine/payments/signals.py index fd5389b2..3c460bb7 100644 --- a/payments/signals.py +++ b/engine/payments/signals.py @@ -5,9 +5,9 @@ from typing import Any from django.db.models.signals import post_save from django.dispatch import receiver -from payments.models import Balance, Transaction, Gateway -from payments.utils.emailing import balance_deposit_email -from vibes_auth.models import User +from engine.payments.models import Balance, Transaction, Gateway +from engine.payments.utils.emailing import balance_deposit_email +from engine.authv.models import User logger = logging.getLogger(__name__) diff --git a/vibes_auth/tests.py b/engine/payments/static/.gitkeep similarity index 100% rename from vibes_auth/tests.py rename to engine/payments/static/.gitkeep diff --git a/engine/payments/templates/__init__.py b/engine/payments/templates/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/payments/templates/balance_deposit_email.html b/engine/payments/templates/balance_deposit_email.html similarity index 100% rename from payments/templates/balance_deposit_email.html rename to engine/payments/templates/balance_deposit_email.html diff --git a/engine/payments/tests.py b/engine/payments/tests.py new file mode 100644 index 00000000..e69de29b diff --git a/payments/urls.py b/engine/payments/urls.py similarity index 78% rename from payments/urls.py rename to engine/payments/urls.py index 4c567fde..02abddf3 100644 --- a/payments/urls.py +++ b/engine/payments/urls.py @@ -1,8 +1,8 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from payments.views import CallbackAPIView, DepositView -from payments.viewsets import TransactionViewSet +from engine.payments.views import CallbackAPIView, DepositView +from engine.payments.viewsets import TransactionViewSet app_name = "payments" diff --git a/payments/utils/__init__.py b/engine/payments/utils/__init__.py similarity index 86% rename from payments/utils/__init__.py rename to engine/payments/utils/__init__.py index f8503c4a..984df9bd 100644 --- a/payments/utils/__init__.py +++ b/engine/payments/utils/__init__.py @@ -1,6 +1,6 @@ from django.utils.translation import gettext_lazy as _ -from payments.utils.cbr import get_rates as get_rates_cbr +from engine.payments.utils.cbr import get_rates as get_rates_cbr def get_rates(provider: str) -> dict[str, float] | None: diff --git a/payments/utils/cbr.py b/engine/payments/utils/cbr.py similarity index 100% rename from payments/utils/cbr.py rename to engine/payments/utils/cbr.py diff --git a/payments/utils/currencies.py b/engine/payments/utils/currencies.py similarity index 100% rename from payments/utils/currencies.py rename to engine/payments/utils/currencies.py diff --git a/payments/utils/emailing.py b/engine/payments/utils/emailing.py similarity index 89% rename from payments/utils/emailing.py rename to engine/payments/utils/emailing.py index b804b9ee..3e5af9d4 100644 --- a/payments/utils/emailing.py +++ b/engine/payments/utils/emailing.py @@ -7,8 +7,8 @@ from django.template.loader import render_to_string from django.utils.translation import activate from django.utils.translation import gettext_lazy as _ -from core.utils import get_dynamic_email_connection -from payments.models import Transaction +from engine.core.utils import get_dynamic_email_connection +from engine.payments.models import Transaction @shared_task(queue="default") @@ -26,7 +26,7 @@ def balance_deposit_email(transaction_pk: str) -> tuple[bool, str]: email = EmailMessage( _(f"{config.PROJECT_NAME} | balance deposit"), render_to_string( - template_name="balance_deposit_email.html", + template_name="../templates/balance_deposit_email.html", context={ "amount": transaction.amount, "balance": transaction.balance.amount, diff --git a/payments/utils/gateways.py b/engine/payments/utils/gateways.py similarity index 87% rename from payments/utils/gateways.py rename to engine/payments/utils/gateways.py index 522adc68..d4109ec9 100644 --- a/payments/utils/gateways.py +++ b/engine/payments/utils/gateways.py @@ -1,8 +1,8 @@ from typing import Type from evibes.utils.misc import create_object -from payments.gateways import AbstractGateway -from payments.models import Gateway +from engine.payments.gateways import AbstractGateway +from engine.payments.models import Gateway def get_gateways_integrations(name: str | None = None) -> list[Type[AbstractGateway]]: diff --git a/payments/views.py b/engine/payments/views.py similarity index 92% rename from payments/views.py rename to engine/payments/views.py index cb0fe593..dde5012c 100644 --- a/payments/views.py +++ b/engine/payments/views.py @@ -8,10 +8,10 @@ from rest_framework.request import Request from rest_framework.response import Response from rest_framework.views import APIView -from payments.docs.drf.views import DEPOSIT_SCHEMA -from payments.gateways import UnknownGatewayError -from payments.models import Transaction -from payments.serializers import DepositSerializer, TransactionProcessSerializer +from engine.payments.docs.drf.views import DEPOSIT_SCHEMA +from engine.payments.gateways import UnknownGatewayError +from engine.payments.models import Transaction +from engine.payments.serializers import DepositSerializer, TransactionProcessSerializer logger = logging.getLogger(__name__) diff --git a/payments/viewsets.py b/engine/payments/viewsets.py similarity index 70% rename from payments/viewsets.py rename to engine/payments/viewsets.py index 52cdc04a..61a2f0bb 100644 --- a/payments/viewsets.py +++ b/engine/payments/viewsets.py @@ -2,9 +2,10 @@ from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema_view from rest_framework.viewsets import ReadOnlyModelViewSet -from core.permissions import EvibesPermission, IsOwner -from payments.serializers import TransactionSerializer -from payments.docs.drf.viewsets import TRANSACTION_SCHEMA +from engine.core.permissions import EvibesPermission, IsOwner +from engine.payments.serializers import TransactionSerializer +from engine.payments.docs.drf.viewsets import TRANSACTION_SCHEMA +from engine.payments.models import Transaction @extend_schema_view(**TRANSACTION_SCHEMA) @@ -17,5 +18,8 @@ class TransactionViewSet(ReadOnlyModelViewSet): # type: ignore "permissions, can access the transactions." ) + queryset = Transaction.objects.all() + lookup_field = "uuid" + lookup_url_kwarg = "uuid" serializer_class = TransactionSerializer permission_classes = (EvibesPermission, IsOwner) diff --git a/evibes/__init__.py b/evibes/__init__.py index 03d925a0..5c74dbea 100644 --- a/evibes/__init__.py +++ b/evibes/__init__.py @@ -1,11 +1,8 @@ from .celery import app as celery __all__ = ( - "api_urls", "asgi", - "b2b_urls", "celery", - "hosts", "middleware", "pagination", "settings", diff --git a/evibes/api_urls.py b/evibes/api_urls.py deleted file mode 100644 index b7ee3cd1..00000000 --- a/evibes/api_urls.py +++ /dev/null @@ -1,53 +0,0 @@ -from django.conf import settings -from django.conf.urls.i18n import i18n_patterns -from django.conf.urls.static import static -from django.contrib import admin -from django.urls import include, path -from django.views.decorators.csrf import csrf_exempt -from drf_spectacular.views import SpectacularAPIView - -from core.graphene.schema import schema -from core.views import ( - CustomGraphQLView, - CustomRedocView, - CustomSwaggerView, - favicon_view, - index, - version, -) -from evibes.settings import SPECTACULAR_PLATFORM_SETTINGS - -urlpatterns = [ - path(r"health/", include("health_check.urls", namespace="health_check")), - path("prometheus/", include("django_prometheus.urls")), - path(r"graphql/", csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema)), name="graphql-platform"), - path( - r"docs/", - SpectacularAPIView.as_view(urlconf="evibes.api_urls", custom_settings=SPECTACULAR_PLATFORM_SETTINGS), - name="schema-platform", - ), - path( - r"docs/swagger/", - CustomSwaggerView.as_view(url_name="schema-platform"), - name="swagger-ui-platform", - ), - path( - r"docs/redoc/", - CustomRedocView.as_view(url_name="schema-platform"), - name="redoc-ui-platform", - ), - path("summernote/", include("django_summernote.urls")), - path(r"i18n/", include("django.conf.urls.i18n")), - path(r"favicon.ico", favicon_view), - path(r"", index), - path(r"", version), - path(r"", include("core.api_urls", namespace="core")), - path(r"auth/", include("vibes_auth.urls", namespace="vibes_auth")), - path(r"payments/", include("payments.urls", namespace="payments")), - path(r"blog/", include("blog.urls", namespace="blog")), - path("admin/doc/", include("django.contrib.admindocs.urls")), -] + i18n_patterns(path("admin/", admin.site.urls)) - -if settings.DEBUG: - urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/evibes/asgi.py b/evibes/asgi.py index b7354e6f..2f7aa3bb 100644 --- a/evibes/asgi.py +++ b/evibes/asgi.py @@ -15,13 +15,13 @@ from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "evibes.settings") django.setup() -from vibes_auth.messaging.auth import JWTAuthMiddlewareStack # noqa: E402 +from engine.authv.messaging.auth import JWTAuthMiddlewareStack # noqa: E402 http_application = get_asgi_application() websocket_urlpatterns: List = [] with suppress(ModuleNotFoundError): - from vibes_auth.messaging.routing import websocket_urlpatterns + from engine.authv.messaging.routing import websocket_urlpatterns application = ProtocolTypeRouter( { diff --git a/evibes/b2b_urls.py b/evibes/b2b_urls.py deleted file mode 100644 index aeeeee23..00000000 --- a/evibes/b2b_urls.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.conf import settings -from django.conf.urls.static import static -from django.urls import include, path -from drf_spectacular.views import SpectacularAPIView - -from core.views import CustomRedocView, CustomSwaggerView, favicon_view -from evibes.settings import SPECTACULAR_B2B_SETTINGS - -urlpatterns = [ - path( - r"docs/", - SpectacularAPIView.as_view(urlconf="evibes.b2b_urls", custom_settings=SPECTACULAR_B2B_SETTINGS), - name="schema-b2b", - ), - path(r"docs/swagger/", CustomSwaggerView.as_view(url_name="schema-b2b"), name="swagger-ui-b2b"), - path(r"docs/redoc/", CustomRedocView.as_view(url_name="schema-b2b"), name="redoc-ui-b2b"), - path(r"favicon.ico", favicon_view), - path(r"", include("core.b2b_urls", namespace="core_b2b")), -] - -if settings.DEBUG: - urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/evibes/hosts.py b/evibes/hosts.py deleted file mode 100644 index 454a0dbe..00000000 --- a/evibes/hosts.py +++ /dev/null @@ -1,7 +0,0 @@ -from django_hosts import host, patterns - -host_patterns = patterns( - "", - host(r"api", "evibes.api_urls", name="api"), - host(r"b2b", "evibes.b2b_urls", name="b2b"), -) diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index 48d6ffc1b3e81dc67697cbb09c4543aaf8f0b38e..f473b00a5eb08b054f5794d6f3c5853cbf7b63fe 100644 GIT binary patch literal 10338 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 diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index 84e9997e..dab3d108 100644 --- a/evibes/locale/ar_AR/LC_MESSAGES/django.po +++ b/evibes/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "خيارات تحسين محركات البحث" msgid "Debugging Options" msgstr "خيارات التصحيح" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"مرحباً بك في وثائق eVibes.\n" +"\n" +"eVibes عبارة عن منصة تجارة إلكترونية قوية تتيح لك إطلاق وإدارة متجر إلكتروني من أي نوع بنقرات قليلة.\n" +"\n" +"## الميزات الرئيسية\n" +"- ** كتالوج المنتجات:** إدارة تفاصيل المنتج والتسعير والمخزون والتوافر عبر فئات متعددة.\n" +"- **إدارة الطلبات:** معالجة الطلبات وتتبع التنفيذ والتعامل مع طلبات العملاء بكفاءة.\n" +"- **المصادقة والتفويض:** مصادقة شاملة للمستخدمين باستخدام رموز JWT المميزة والأذونات المستندة إلى الأدوار.\n" +"- ** معالجة المدفوعات:** دمج بوابات دفع متعددة وإدارة المعاملات بشكل آمن.\n" +"- ** إدارة المدونة والمحتوى:** إنشاء وإدارة منشورات المدونة والمحتوى التسويقي لمتجرك.\n" +"- ** عمليات B2B:** نقاط نهاية مخصصة للمعاملات بين الشركات وإدارة البيع بالجملة.\n" +"- **دعم متعدد اللغات:** خدمة العملاء في جميع أنحاء العالم مع إمكانات التدويل الكاملة (i18n).\n" +"- **تكامل مخصص:** بنية واجهة برمجة تطبيقات قابلة للتوسيع للتكامل مع المنصات والخدمات الخارجية.\n" +"- **التحليلات والتقارير:** إنشاء تقارير مفصلة عن المبيعات والمخزون وسلوك العملاء.\n" +"- ** تحديثات في الوقت الفعلي:** احصل على بيانات مباشرة عن مستويات المخزون وحالات الطلبات وتغييرات الأسعار.\n" +"\n" +"## واجهات برمجة التطبيقات المتاحة\n" +"- **واجهة برمجة تطبيقات REST:** واجهة REST كاملة (هذه الوثائق)\n" +"- ** واجهة برمجة تطبيقات GraphiQL:** متوفرة على '/graphql/' مع واجهة GraphiQL للاستعلامات التفاعلية\n" +"\n" +"## المصادقة\n" +"- يتم التعامل مع المصادقة عبر رموز JWT المميزة. قم بتضمين الرمز المميز في رأس \"X-EVIBES-AUTH\" لطلباتك بصيغة \"حامل \".\n" +"{\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}" +"{\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"}" +"- يتم تدوير رموز التحديث تلقائيًا وإبطالها بعد الاستخدام لتعزيز الأمان.\n" +"\n" +"## التدويل (i18n)\n" +"- قم بتعيين رأس \"قبول اللغة\" لتحديد لغتك المفضلة (على سبيل المثال، \"قبول اللغة: en-US\").\n" +"- يمكن استرداد اللغات المتاحة من نقطة النهاية \"/ التطبيق/اللغات/\".\n" +"- جميع المحتويات التي تواجه المستخدم تدعم لغات متعددة خارج الصندوق.\n" +"\n" +"## تنسيقات الاستجابة\n" +"تدعم واجهة برمجة التطبيقات تنسيقات استجابة متعددة:\n" +"- **JSON** (افتراضي، بتنسيق camelCase)\n" +"- **XML** (أضف \"?format=xml\" أو قم بتعيين \"قبول: application/xml\")\n" +"- **YAML** (أضف '؟تنسيق=yaml' أو اضبط 'قبول: application/x-yaml')\n" +"\n" +"## الصحة والمراقبة\n" +"- فحوصات الصحة: '/الصحة/'\n" +"- مقاييس بروميثيوس (محمية بمصادقة أساسية): '//prometheus/'\n" +"\n" +"## الإصدار\n" +"إصدار API الحالي: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "الصفحة الرئيسية" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index cc830b29a0b16ecc427c92f4bfb51dc3c9021eb2..7d52da2c6476d593caedd924608b51d22c42ad2e 100644 GIT binary patch literal 8879 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 diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index 468b4817..0e317c9f 100644 --- a/evibes/locale/cs_CZ/LC_MESSAGES/django.po +++ b/evibes/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Možnosti SEO" msgid "Debugging Options" msgstr "Možnosti ladění" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Vítejte v dokumentaci systému eVibes.\n" +"\n" +"eVibes je výkonná platforma pro elektronické obchodování, která umožňuje spustit a spravovat internetový obchod jakéhokoli druhu na několik kliknutí.\n" +"\n" +"## Klíčové funkce\n" +"- **Katalog produktů:** Správa podrobností o produktech, cen, skladových zásob a dostupnosti v několika kategoriích.\n" +"- **Správa objednávek:** Zpracovávejte objednávky, sledujte jejich plnění a efektivně vyřizujte požadavky zákazníků.\n" +"- **Ověřování a autorizace:** Komplexní ověřování uživatelů pomocí tokenů JWT a oprávnění na základě rolí.\n" +"- **Zpracování plateb:** Integrace více platebních bran a bezpečná správa transakcí.\n" +"- **Správa blogu a obsahu:** Vytváření a správa příspěvků na blogu a marketingového obsahu pro váš obchod.\n" +"- **Provoz B2B:** Vyhrazené koncové body pro transakce mezi podniky a správu velkoobchodu.\n" +"- **Vícejazyčná podpora:** Obsluhujte zákazníky po celém světě díky plným možnostem internacionalizace (i18n).\n" +"- **Vlastní integrace:** Rozšiřitelná architektura API pro integraci s externími platformami a službami.\n" +"- **Analytika a reporting:** Generování podrobných reportů o prodeji, zásobách a chování zákazníků.\n" +"- **Aktualizace v reálném čase:** Získávejte živé údaje o stavu zásob, stavu objednávek a změnách cen.\n" +"\n" +"## Dostupná rozhraní API\n" +"- **REST API:** Plné rozhraní RESTful (tato dokumentace).\n" +"- **GraphQL API:** K dispozici na adrese `/graphql/` s rozhraním GraphiQL pro interaktivní dotazy.\n" +"\n" +"## Ověřování\n" +"- Ověřování se provádí pomocí tokenů JWT. Token zahrňte do hlavičky `X-EVIBES-AUTH` svých požadavků ve formátu `Bearer `.\n" +"- Životnost přístupového tokenu je {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"}. {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Životnost tokenu pro obnovení je {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hodin.\n" +"- Tokeny pro obnovení jsou po použití automaticky rotovány a zneplatněny z důvodu vyšší bezpečnosti.\n" +"\n" +"## Internacionalizace (i18n)\n" +"- Nastavte hlavičku `Accept-Language` tak, aby určovala preferovaný jazyk (např. `Accept-Language: en-US`).\n" +"- Dostupné jazyky lze získat z koncového bodu `/app/languages/`.\n" +"- Veškerý obsah směřující k uživateli podporuje více jazyků hned po vybalení z krabice.\n" +"\n" +"## Formáty odpovědí\n" +"Rozhraní API podporuje více formátů odpovědí:\n" +"- **JSON** (výchozí, formátováno camelCase).\n" +"- **XML** (přidejte `?format=xml` nebo nastavte `Accept: application/xml`).\n" +"- **YAML** (přidejte `?format=yaml` nebo nastavte `Accept: application/x-yaml`)\n" +"\n" +"## Stav a monitorování\n" +"- Kontroly stavu: `/health/`\n" +"- Metriky Prometheus (chráněno basic-auth): `/prometheus/`\n" +"\n" +"## Verze\n" +"Aktuální verze API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index fa4c1d366c48d3255b62bba2b78b65bfc70506a5..bd8aa34d464ea0a6631a4d625acf947d3acdcb97 100644 GIT binary patch literal 8618 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 E8`#y#oB#j- delta 985 zcmYk*OGuPa7>Ds!XUt4#*VgZ(^zk4|_C8?lNe^(&dhBy+^%1dihnUP32+2fJ|rP4*S~xew?TZ8noX zzY$d)xU%2KB%_4`;DB8?fCcnST;^i5*N|}HW^xw$=ogV>gT!m!^S7*#9bybk#4$~z z&HevZ{-CpWV9S+qxMS1~+~- vv5d)bUx#UZwExTV;MwS>d8i6B|E}e!)@PZ9sfo#n$?|6V>ALb-Zzb~=1_?^v diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.po b/evibes/locale/da_DK/LC_MESSAGES/django.po index 9783da10..bf82fcd3 100644 --- a/evibes/locale/da_DK/LC_MESSAGES/django.po +++ b/evibes/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO-muligheder" msgid "Debugging Options" msgstr "Indstillinger for fejlfinding" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Velkommen til eVibes' dokumentation.\n" +"\n" +"eVibes er en stærk e-handelsplatform, der giver dig mulighed for at starte og administrere en onlinebutik af enhver art med blot nogle få klik.\n" +"\n" +"## Nøglefunktioner\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgængelighed på tværs af flere kategorier.\n" +"- Ordrehåndtering:** Behandl ordrer, spor opfyldelse og håndter kundeanmodninger effektivt.\n" +"- Godkendelse og autorisation:** Omfattende brugergodkendelse med JWT-tokens og rollebaserede tilladelser.\n" +"- **Betalingsbehandling:** Integrer flere betalingsgateways og håndter transaktioner sikkert.\n" +"- Blog- og indholdsstyring: ** Opret og administrer blogindlæg og markedsføringsindhold til din butik.\n" +"- **B2B Operations:** Dedikerede slutpunkter til business-to-business-transaktioner og engrosadministration.\n" +"- Flersproget support:** Betjen kunder over hele verden med fuld internationalisering (i18n).\n" +"- Brugerdefinerede integrationer:** Udvidelig API-arkitektur til integration med eksterne platforme og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerede rapporter om salg, lagerbeholdning og kundeadfærd.\n" +"- Opdateringer i realtid:** Få live-data om lagerniveauer, ordrestatus og prisændringer.\n" +"\n" +"## Tilgængelige API'er\n" +"- **REST API:** Fuld RESTful-grænseflade (denne dokumentation)\n" +"- GraphQL API:** Tilgængelig på `/graphql/` med GraphiQL-grænseflade til interaktive forespørgsler\n" +"\n" +"## Autentificering\n" +"- Autentificering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-headeren i dine anmodninger i formatet `Bearer `.\n" +"- Adgangstokenets levetid er {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Opdateringstokenets levetid er {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} timer.\n" +"- Refresh-tokens bliver automatisk roteret og ugyldiggjort efter brug for at øge sikkerheden.\n" +"\n" +"## Internationalisering (i18n)\n" +"- Indstil headeren `Accept-Language` til at angive dit foretrukne sprog (f.eks. `Accept-Language: en-US`).\n" +"- Tilgængelige sprog kan hentes fra `/app/languages/` endpoint.\n" +"- Alt brugervendt indhold understøtter flere sprog fra starten.\n" +"\n" +"## Svarformater\n" +"API'en understøtter flere svarformater:\n" +"- **JSON** (standard, camelCase-formateret)\n" +"- XML** (tilføj `?format=xml` eller indstil `Accept: application/xml`)\n" +"- **YAML** (tilføj `?format=yaml` eller indstil `Accept: application/x-yaml`)\n" +"\n" +"## Sundhed og overvågning\n" +"- Sundhedstjek: `/health/`\n" +"- Prometheus-metrikker (beskyttet af basic-auth): `/prometheus/`\n" +"\n" +"## Version\n" +"Nuværende API-version: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hjem" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index 1de3afd20ee6029f9727b6541f34f3d4e87a8652..3dca629527d8a1411028926a4654a19ed57cc49e 100644 GIT binary patch literal 8994 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 R!gXK8SH3~!k#ve}{|`E6OB4VA delta 985 zcmYk*KS*0q6vy$SiPkno^Q^6jss9>{R#8L?3L;9N#mP-j5NsDWp#>K~2!i0Cn>e)K zVi&bThets-L0qKLsTdFhhk!$dkVQKb`u)9J!9(u-yz}zso_pTS-g`fhy>1Ba7}3Xg z#aON|8^d3fOvF*hEQZIEU-rvL*uwllQ@eFxQr3pz^Ay4+TpItzq|Y=c5wd`Rd61kU=h`+duKg2wQw5e>GC^_vA*rq zlw0IuGx-JTaol1*HnO@3%Aj^UQDjISyib*qfA*{ z#F@r1g;V$uJMj?Jnct`%%%fU+hiYv#?a{MMV;m>(HO^rgS5e>phT8cts*oJ2kV1t1 zQjaCKa%RYVoRb9kt*V(pjV9K_U7rMRytNMRkPwgEJA+ z^M44s9qd}IRHy(Bx4lt9sB(oKg@SVwbU}X<71hU3q{;*Zv#%g@u2itPppB|qI@E~? vCWW4xqJ`1LXlFc*9ul>(gP}vE-Rke^57+I7s)h#!2L}BcZ@j|y+Pv_8h1p4P diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index f7159751..a849922e 100644 --- a/evibes/locale/de_DE/LC_MESSAGES/django.po +++ b/evibes/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -158,6 +158,106 @@ msgstr "SEO-Optionen" msgid "Debugging Options" msgstr "Debugging-Optionen" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Willkommen bei der eVibes-Dokumentation.\n" +"\n" +"eVibes ist eine leistungsstarke E-Commerce-Plattform, die es Ihnen ermöglicht, mit nur wenigen Klicks einen Online-Shop jeglicher Art zu eröffnen und zu verwalten.\n" +"\n" +"## Hauptmerkmale\n" +"- **Produktkatalog:** Verwalten Sie Produktdetails, Preise, Bestand und Verfügbarkeit über mehrere Kategorien hinweg.\n" +"- **Auftragsverwaltung:** Verarbeiten Sie Aufträge, verfolgen Sie die Ausführung und bearbeiten Sie Kundenanfragen effizient.\n" +"- **Authentifizierung & Autorisierung:** Umfassende Benutzerauthentifizierung mit JWT-Tokens und rollenbasierten Berechtigungen.\n" +"- **Zahlungsabwicklung:** Integrieren Sie mehrere Zahlungsgateways und verwalten Sie Transaktionen auf sichere Weise.\n" +"- **Blog & Content Management:** Erstellen und verwalten Sie Blogbeiträge und Marketinginhalte für Ihren Shop.\n" +"- **B2B-Betrieb:** Dedizierte Endpunkte für Business-to-Business-Transaktionen und Großhandelsmanagement.\n" +"- **Mehrsprachige Unterstützung:** Bedienen Sie Kunden auf der ganzen Welt mit vollständigen Internationalisierungsfunktionen (i18n).\n" +"- **Benutzerdefinierte Integrationen:** Erweiterbare API-Architektur für die Integration mit externen Plattformen und Diensten.\n" +"- **Analytik & Reporting:** Generieren Sie detaillierte Berichte über Verkäufe, Bestände und Kundenverhalten.\n" +"- **Echtzeit-Updates:** Erhalten Sie Live-Daten zu Lagerbeständen, Bestellstatus und Preisänderungen.\n" +"\n" +"## Verfügbare APIs\n" +"- **REST API:** Vollständige RESTful-Schnittstelle (diese Dokumentation)\n" +"- **GraphQL API:** Verfügbar unter `/graphql/` mit GraphiQL-Schnittstelle für interaktive Abfragen\n" +"\n" +"## Authentifizierung\n" +"- Die Authentifizierung erfolgt über JWT-Tokens. Fügen Sie das Token in den `X-EVIBES-AUTH`-Header Ihrer Anfragen im Format `Bearer ` ein.\n" +"- Die Lebensdauer des Zugangstokens beträgt {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Die Lebensdauer von Auffrischungstoken beträgt {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} Stunden.\n" +"- Refresh-Tokens werden automatisch rotiert und nach der Verwendung ungültig gemacht, um die Sicherheit zu erhöhen.\n" +"\n" +"## Internationalisierung (i18n)\n" +"- Setzen Sie den `Accept-Language`-Header, um Ihre bevorzugte Sprache anzugeben (z.B. `Accept-Language: en-US`).\n" +"- Die verfügbaren Sprachen können über den Endpunkt `/app/languages/` abgerufen werden.\n" +"- Alle benutzerseitigen Inhalte unterstützen von Haus aus mehrere Sprachen.\n" +"\n" +"## Antwortformate\n" +"Die API unterstützt mehrere Antwortformate:\n" +"- **JSON** (Standard, camelCase-formatiert)\n" +"- XML** (fügen Sie `?format=xml` hinzu oder setzen Sie `Accept: application/xml`)\n" +"- **YAML** (fügen Sie `?format=yaml` hinzu oder legen Sie `Accept: application/x-yaml` fest)\n" +"\n" +"## Gesundheit & Überwachung\n" +"- Gesundheitsprüfungen: `/health/`\n" +"- Prometheus-Metriken (basic-auth geschützt): `/prometheus/`\n" +"\n" +"## Version\n" +"Aktuelle API-Version: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Startseite" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index 889e5f71f6fd12dfa2308aeef38b963a0d777da1..cad4d0acde627a18ad331c96626f2b9e67bef265 100644 GIT binary patch literal 8450 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 GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -161,6 +161,106 @@ msgstr "SEO Options" msgid "Debugging Options" msgstr "Debugging Options" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index 46d8740f12af9572d1c639c835e302cb0f1167e5..208611a9c304b59fff12444499c4026aee70c073 100644 GIT binary patch literal 8454 zcmeHMOK&7s6)uJlpn)WW0O65v>^ z*R9m8vfWGuwox|O@DLjWh!snO!~!7^#DYjj5n_Ra5G+_A0TO?J1>d>1y6t&oW`~fv zG}WK$)_t7woyR@5<}VN5_iYE)Jnqlqe*Jxpa~b&OGx)*v+xI)p)q>-^1AGY27ap)! z1%3+8d%zjs0Qdy(JHU?te*xtF?*Kmz{1fmqz<=fM?|;y7K8fc?fZT5m_z3Va5dWMV z{CpJH24Z<<0K5-)47>om4!i{XDUiqi6Zi?>e{y^XjabTg0{8{s)4)#yn?UY&0DK(y z%^bfEWO;rG{2cHPz=whV27Uy121d20RX-u$1%0V-~*$NGH>l1Qy}yE z1`z+8@8XB~{W*~Py$i$?&fju8Lsp(CAoKerAoJS$}c;%46XVmXjHeAn7I}RVkxv5=iJrutq@pm0BLpli1C5Y&1rZER~&d;2r296$)q1(u;CPYf_|HB6Y!~xw)N0`I(neMWiBB zz0%wq)$9s!{>GQ72tqwiaT0hz)SJirhtNwU!+9f-IK+F=3Bn*9lJF9xH4U;b4dPIe zCsNr{Ng#F6tXEHbndD0_JG>xd@FWH)eust9M0f`Tdb&Xvawoe^AL{drPz`J+l*rdI zsZ&j|+l6H47Y^+r{GP0&4m4yCL;7c+VfmeiZz*HuYky3=Y zRcR(zx)jaA;bQBHW0$KKhZ&oKxnYc%|1 zcBHxX0w|9AuZ0V3OS0)4p!dnd>~H3Y0|Oc&>N%fSQEv!ZEO%4rLn50td^!xosdz5J zAG|PwTXD)ZF^)ydL;Gd7y0^JfZMx;%)<&E9QgF^fhBfgrPCI#b&e^QViWCXDJcW^HGyx{pj#?8$Uyx?HJLo6Y@J{l)6`{?_JN zwY6ERPR|xog#^8ioS-6K&&<-o0$p6Bpi7ZTX|=ktyH2pOq^B<~E)t!kbQsGL1-*!O zhp%N3+};&wn!H-LPS>UfL6pIBrf)OBbRP=n>FX?eLw2!I^mBghE_|c92FKXAC+Y7+ zP$SAMf*|go6Y{kJ@kmc$IHUyhaGGMLhU+6OaA@GUi=ah<=PbjHBqR8PhZiQhV#l&B zzj^130vehKE_RbP+cHkwtvqjyeFIyxj-?lLht@~1w{&HaV3~1>n~}v{asHMmN|4Ci zZMJ8PtBeD0G)yC(MTmbSixf_Oh#9+y;u-823a3jdHY^3qi{Jnv38(o%gj( zwWqe|@eHK0l--;s@2F$TOhf7z8B@}l@pD~h;Vmc3TPK36*seAtbP3eW&Arg9ZzF5W z__8aI_2;3{K!z3UqHGXY5N5K8;^o>FcND%)?dR;f<>NuvM&^RK5Mq}85n*Bml(*NbPPwDGTCxLC+&N|6hZ(S`STmx!j8PXlV?J zJ(+8??HCz1TCE*6)$!2TfC=z(#5KtfN}~ch8dcE)P=`!`8i#{SL@F8%6fDbur0;Ri z$&Q3zwF7IcqnT0}LY!^TbhC+0x4}=Y!fPB9V^Mk2cm*4mADd|+Wm*$4Z7XDP1i`?( z-)(F;qZ)J_sSl;)n6FWLUUJguzN5B*I1UCGl!n4lI-Y9$I*8uuwb|XAoxZ|>B+3RI zyI*o58F}E&=y-GDIL&H(EMl_;1NBj_I_9rfXpPFx&!136*}s@i<6}*MN???5a(m%a z;;TeI$$V(1$>$=F4rTK4(%FThHk(^Cv$(vi=70TzrR7(oo;A&_t>$f;WynR~!0lj{ zz0q^wO>84~(|7YIE|CpbI=^`Snc{_lt^eGb?ghTPlJ&IPQY9+v)ZK2>_nL^)KG7nXtY#ZEaYbnw`EF-6m{?d z4y!?QnajomnR$7)wdP(r>Bll-|8uL6r+nmr5?$&9X<;YK5|plM$oj~lQEVRd^7+fC zsQJzEOhi-5v^0CU@PBfsHaUE9rdAQ33npi3-diVU>dBefd?%Znsqx)xa;7$i^2wR{ z#;hGc~@M^1*v@rhbou_-)SA{22;gicWv*ko+xy|KB9S_u9!B+kE)= PU!Ac>hiZ#=K1Kf*4li2@ delta 990 zcmXxj!Ap~I9LMqRU6p}!y~*r|h44;mC*WKxGf z#LEzjcn}su1a^uDItao*=wL8*Sv%=r(EGFf{IcKk+V^=LpWpBI@!9(P_F&)I6fTkS0}M02 z?Obl}#7F(XcT}_$Ok$APHE|lX;~Xm5hp1>5-Ss?bBWtMp-l38$p_2WIO7<6Op%pAB z+P{2Jv^7+;39cq^0Tt~_=UY^?JE&+sp`!imu2)ezY&v7arv=TRl6{Oy_8IcAl^*hE zPJ2VA9d4oeUDxlUqWywA(@s#)R-ONx=ctK2wnwr?;&z9jXQ{^8*aRvOJxdD@>;HdI zq}_^JQK=L$FSn)DP)b6j9jJJZS}EvN<;5RilLvYzY#Bcel1k@I;S$(OxFJsx$pU};>&^mppsCB diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index d2bf04bf..dfb7bf9e 100644 --- a/evibes/locale/en_US/LC_MESSAGES/django.po +++ b/evibes/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO Options" msgid "Debugging Options" msgstr "Debugging Options" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks.\n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index 08d0c981b0b8a96d79f5ea21a2d7640f97998f31..ecad83917cd202637919b9e4ee11e5959a76612d 100644 GIT binary patch literal 9094 zcmdU!O>AV@RmWc@A%KC9gb)IOaJwf=Y{%txPbRI#Gd*Bem%E+#3sd#~)S8AhxSh&?P&gy`igS|Z5?g->A#C2Lkez>XD2tY9@r{Qmd8S7p09!`j=0B#eOmgi4FHE$96Dd?+E z{zZHI_mj{=D91-b=trQBpszsRhTepJ2dee|2K^c6yA}O7gB%ro9{S7BFF}6}+Jk7MMeJrs&gMhzlpB@7Wys+d=93x?`L6F{4GE~1HA=ZhTen9M!#FV{|;39{ykK3 z{WH`+{}al;=+it%jvG+veINP@&;%;Eey^f`3>CjmpdW?)IrJ9vZ=koK{|#M%t|Of6 zQ$WSv?^pC&P}%>_pz@y|LUqo6L0^J?;%cBbq2l8{lz-8L|Fqw?ptAF~q0;YPLs5D3 zeW>*QL#X8ZSE%g%E>!$pe=&-F1o|3O>(?u~3tiy(x1b+_$_D)D*FZe4qF>}Id+QA8 z88b{j;^SBNiVuCHFZrJ2(MNpiBRwqgmEH{B5A((SyqzFE9z19J_%FL9<&bWJV*A=Fp^~OV& zmbQ$uba`&B8jcHN%_uu{`O!EruEENo%X`j@5?dZ+`H($qX>5{Yr-hkhV{Mz*aoRgJ zHtn0CP3^$(r^(VJPMs;rEO#b5VrXI>#!QJ*^I%-ChdFYmrkBLMhsCm)n|tv^^Hn!7 z8_t&F+!b>Tv$(jIXZ>-nG)-IDBpa+QE}HFd!l-)FccqP!V#$p1xEH5`CH6l-t}LG{ zd5-J}?`=0u;&NhaFVBj?497_sj}m8kwseCmk6p3s&)d!WF0YP|c61;-^c;&az2l%V zx4nl3^&G`XqDkSLW5m~vh=#Uvle;&@t|$xRj*j4rdC4RkvNpyJX&G}kx;HNw4Zy^k z{#i#hv*9RrOe*3NXT}BF*^7%#Wfx-f<7VWwK9b*zIV&5Rv6CK##K zU^B<2a*C;cbTxgHNj+gSf9Oh>GQDa8Tut7U2mc9rTYq`o>>`<0Qz8CuyS}uDz%K2N zvN&Zwt?Z5qe6J`PW!9+wmfdFD>(tX@6joS_7UUDV;iPT(MMi(?zmwb1@o#L^%V)a-bBEVZ@#y%CVu+cXsu{{^h%lJbt8RJ%hY#-ws;vWvb-e}$1TyM1-YX_aX zhvwK>VHODM<7Emv)pTLDBw2ShXWDC;bl-3I`k@TA*7M*Nj!5Do!VuHJ*jsakPkVEF zZ>x15q*)%ga{lUCv)O95?{{{;+S<9lwYkyiY;L!%E-aTB0DT`!$kKi>zhJIiGdEUD zd}PwBG`Cyp2X_oscIHbrR#uF8(Ug;sTQ%_@)$Q<`;}o}V*s{#OIrp}C>*_F0$9T@w zXKZlw7y*i_Z;SVRcf>_;Tp!oXs zmL}SM-yHs0cz5g3FgXOdFc%>f)W2$wo216$|20hr%fGSqjP(=y+zlFj&Vt92yI?E# z{!3;%OJhlVtE!a|a}XszGJ3|uO~jAWN1^1^5>#W_kPXz0~n`SJhfmhIPKQ%l*RTo20A8R zjr?CDTNGq|{pyJ{D*PpVdLL_BGJzU!Dtl3t^s~J9g7i^DZPi669bu~UGCIIf+wCng zzjA9QTl%{{y?*N(u2}HHovrpWhh3s1aM^bAzq7k<_^u!9?A|l4HFtM9Yt7EDZyfBm7}?xkZtiZs&a#kHH#*J^ zSIrhUajxZ zIt3jDjr$pOY+`4LWiLMaZb}wi)!DPkny?+Gs;yNZg?ifhTSSv_L#pgJBT2$&Ia|cN zOsOR4aVX|k!cF+5r7SW)fQKkD2X-uBrEdXHlbk(C9lWSOvB?|b7(b`ZWmi&1F6!d! zyGh2HjC-3Ks>-LERuJv-vnTA@vxTzmv=@(*^!qEaY0I<66l|GxCiYd4XH{D78G$vn zROOJcMzi!hovGTK>?50&5H?3rz%AB=9IG_%Ta|ETc=o+em@BdHmHF8dTa_+%By^?Q zJ?g%GU;#fTfkiE&Ft)^9JQ&AA72KX-+8kWR;dzNu!BzKw`3aI18ES}2^6V+sC`R`2 z&zhQ}*{XhbK5-#2^|gC2G%W=ZJ=O01d6fkJ{A*M(F2-J7)d<9Dq7t{R+Eu_$s$w0D zaWPxOk|tEkSAtg(&LkSyL6BW(;ecH8oZ3JpvQNn-TQPCwE^?rvu7WWK1+pduAC%H^ zD*+c5eJx*kS*7q$me)F0J%7;;kvX^haH_BECsie{0O63Ktqc4S-bQj(d2Kk*7xfiK zT;8hU_CR?wal{o8TuOz$bmP}orTk0?r+!IciN*S_i~Or21b3>ANic?X5~|g9rV_a7 ze$cKOoc*QK>FromzEza4FzBhw5XB{QN`P^1MAh;=xo()?i@=l-pFC6!p~$AuM9~`> z01`Nu%}-<{4UM8&fdX~A^?3-IEDHRf(4MXvf4hEqg)wHH|zM+<7KI{{S~OG310XAY|9uT|$` zhPH+8gj5C-9K{$ac5fOl>Y9x@r)fmLCSVk$G5&*FzE9FP_O+TPs!pxF7>=NQD$JgpA ztiB78%ZAP1RMH5G6@fG{YI*)U#dJ6VzR9E}*i41am}Jpt7BKXSGKS0Cw6}D8}cz z3b57(PimK{Ph&f)eglE@|DwV0equ~rS`Zl!;Mpyc|NE{(9`3{~eA;KW-nDU+I>^Kk zuArtv8X6I2k9D=Hj&dFy@UGB=P^wal#%J&NJ;3EL#_^swbPuxJ-;@4E%>{H9x)GOv zF5nw(*&;fqrrzxN#AxPPPjx5!F`TZ>1l&>hjZNH-Db*CGWN5lP<^|a90cepB>6cp^ z7y1*@M_7+A)8NB<$F8p{m4>yt$E1W38ehbZN4jUiHA9GA>R1T7I>3GrV8mB-x&x{B zbuV~e1A#oB2%)BI1^sRKz5=7Lpc+9x6Ic>s4Vg#wvcvcU63@Q9UWK)=Cq9=WU5;iXW!w%0dX?Wmck))V&Is@q{{DBx^0_-UsqD~S%s z*9GFrcfI@DWJq^9#reb4HyU?+O6uL_`P2C=jHI8~&Weamg8xMi$ErIZ5kLJDa$SD8y|A#C(G*k?NDFGfW$>7NQiU=wg9*f?mSC*Gh?0enCT!` zm1h$L`b8~=CQL-rM0N^Zd#?Gy*oD5#OryN1s|Br8v2bper(SLPEKkM8V_GpG)dHxi zdSkl7Y}ym)vf}BfX&wD+85V_tWxB!6+4rc0{ld~EXYU+kX}wDwMQYYmwezf9Q+t!4 zZ$mGPADGpuiJG7`_oV}~!oVKC&j9)Un+KPhT#lmGw# delta 985 zcmYk*PblPJ9LMo5#=kXY{I|?9#;pIErYI!Q=FbUN2gSi{_pn=zt4YK`PEs6PoXCNi zw#H%GEiU9rBx;jAYh0w1_h;r&zRmM{&GVaIzvuh?KF=(TtX9WvOFZjFv@t$0W;4us z@hp=Ik;pPD!b9gNRxrQDW=!H|40y~6aRBxF7#8CcR^bo#`wEsb-$b5^**;&&xbYYL zc#dAY#}Al9KK8<;6Em~Ty0Htj(044wdFML%nD1f`6Ih9t?)L|*W$ww5F|#mVl+hOq z-~^W7EEeE0=HnWw!Yw!7bMs#q;{FjT;d{)*2UMq?oPKU<;YOUK%R^Ym`nH{yuHXPa zGC#%$-e5a=SzQ(Opk6qNs%Qr5@F%L$EmQ%&Q7ym1YJ5Z$OYaQCr;YrT-*nL(H_7 zp+wYn{ZVw_+8By(npA=+MxkwCyHoqGGo)?Sp|0xZqEP!3 qHH-#E9pind-8!TphB~7*tM%~?-%eI`M\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opciones SEO" msgid "Debugging Options" msgstr "Opciones de depuración" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Bienvenido a la documentación de eVibes.\n" +"\n" +"eVibes es una potente plataforma de comercio electrónico que le permite lanzar y gestionar una tienda en línea de cualquier tipo en tan sólo unos clics.\n" +"\n" +"## Características principales\n" +"- **Catálogo de productos:** Gestione los detalles de los productos, precios, inventario y disponibilidad en múltiples categorías.\n" +"- **Gestión de Pedidos:** Procesar pedidos, seguimiento de cumplimiento, y manejar las solicitudes de los clientes de manera eficiente.\n" +"- Autenticación y autorización:Autenticación de usuario integral con tokens JWT y permisos basados en roles.\n" +"- **Procesamiento de pagos:** Integre múltiples pasarelas de pago y gestione las transacciones de forma segura.\n" +"- **Blog y gestión de contenidos:** Crear y gestionar entradas de blog y contenido de marketing para su tienda.\n" +"- **Operaciones B2B:** Puntos finales dedicados para transacciones de empresa a empresa y gestión de ventas al por mayor.\n" +"- Soporte multilingüe:** Sirve a clientes de todo el mundo con capacidades de internacionalización completa (i18n).\n" +"- Integraciones personalizadas:** Arquitectura API extensible para la integración con plataformas y servicios externos.\n" +"- Análisis e informes:** Generación de informes detallados sobre ventas, inventario y comportamiento de los clientes.\n" +"- Actualizaciones en tiempo real:** Obtenga datos en tiempo real sobre los niveles de inventario, el estado de los pedidos y los cambios de precios.\n" +"\n" +"## API disponibles\n" +"- API REST:** Interfaz RESTful completa (esta documentación)\n" +"- API GraphQL:** Disponible en `/graphql/` con interfaz GraphiQL para consultas interactivas\n" +"\n" +"## Autenticación\n" +"- La autenticación se gestiona mediante tokens JWT. Incluya el token en la cabecera `X-EVIBES-AUTH` de sus peticiones con el formato `Bearer `.\n" +"- La duración del token de acceso es {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- La duración del token de actualización es de {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} horas.\n" +"- Los tokens de actualización se rotan automáticamente y se invalidan después de su uso para mejorar la seguridad.\n" +"\n" +"## Internacionalización (i18n)\n" +"- Establezca la cabecera `Accept-Language` para especificar su idioma preferido (por ejemplo, `Accept-Language: en-US`).\n" +"- Los idiomas disponibles pueden recuperarse desde el punto final `/app/languages/`.\n" +"- Todos los contenidos orientados al usuario son compatibles con varios idiomas.\n" +"\n" +"## Formatos de respuesta\n" +"La API admite varios formatos de respuesta:\n" +"- JSON** (por defecto, con formato camelCase)\n" +"- XML** (añada `?format=xml` o establezca `Accept: application/xml`)\n" +"- YAML** (añada `?format=yaml` o establezca `Accept: application/x-yaml`)\n" +"\n" +"## Salud y supervisión\n" +"- Comprobaciones de salud: `/health/`\n" +"- Métricas de Prometheus (protegidas por basic-auth): `/prometheus/`\n" +"\n" +"## Versión\n" +"Versión actual de la API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Inicio" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 6b2e56eb..c0948841 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -160,6 +160,75 @@ msgstr "" msgid "Debugging Options" msgstr "" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and " +"manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and " +"availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle " +"customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with " +"JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage " +"transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing " +"content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business " +"transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full " +"internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with " +"external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " +"and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " +"and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " +"interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-" +"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " +"DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " +"type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for " +"enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., " +"`Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index 0929ccca951211a5ee956ac49c5f3cfd47e446fe..3b02bba187bebf3696cc597663e73f6881a3ca80 100644 GIT binary patch literal 9359 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 diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.po b/evibes/locale/fr_FR/LC_MESSAGES/django.po index c24963d0..1c43b29a 100644 --- a/evibes/locale/fr_FR/LC_MESSAGES/django.po +++ b/evibes/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -134,8 +134,8 @@ msgstr "" #: evibes/settings/constance.py:51 msgid "How many days we store messages from authenticated users" msgstr "" -"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils " -"conservés ?" +"Pendant combien de jours les messages des utilisateurs authentifiés sont-ils" +" conservés ?" #: evibes/settings/constance.py:57 msgid "General Options" @@ -161,6 +161,106 @@ msgstr "Options de référencement" msgid "Debugging Options" msgstr "Options de débogage" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Bienvenue dans la documentation d'eVibes.\n" +"\n" +"eVibes est une puissante plateforme de commerce électronique qui vous permet de lancer et de gérer une boutique en ligne de tout type en quelques clics.\n" +"\n" +"## Fonctionnalités principales\n" +"- Catalogue de produits:** Gérer les détails des produits, les prix, l'inventaire et la disponibilité à travers plusieurs catégories.\n" +"- Gestion des commandes:** Traiter les commandes, suivre l'exécution et traiter les demandes des clients de manière efficace.\n" +"- Authentification et autorisation:** Authentification complète des utilisateurs avec des jetons JWT et des autorisations basées sur les rôles.\n" +"- Traitement des paiements:** Intégration de plusieurs passerelles de paiement et gestion sécurisée des transactions.\n" +"- Gestion de blog et de contenu:** Créez et gérez des articles de blog et du contenu marketing pour votre boutique.\n" +"- Opérations B2B:** Points d'accès dédiés aux transactions interentreprises et à la gestion des ventes en gros.\n" +"- Support multilingue:** Servez vos clients dans le monde entier grâce à des capacités d'internationalisation complètes (i18n).\n" +"- Intégrations personnalisées:** Architecture API extensible pour l'intégration avec des plates-formes et des services externes.\n" +"- Analyses et rapports:** Générer des rapports détaillés sur les ventes, les stocks et le comportement des clients.\n" +"- Mises à jour en temps réel:** Obtenez des données en direct sur les niveaux de stock, les statuts des commandes et les changements de prix.\n" +"\n" +"## API disponibles\n" +"- API REST:** Interface RESTful complète (cette documentation)\n" +"- API GraphQL:** Disponible sur `/graphql/` avec l'interface GraphiQL pour les requêtes interactives.\n" +"\n" +"## Authentification\n" +"- L'authentification est gérée par des jetons JWT. Incluez le jeton dans l'en-tête `X-EVIBES-AUTH` de vos requêtes au format `Bearer `.\n" +"- La durée de vie du jeton d'accès est de {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- La durée de vie du jeton de rafraîchissement est de {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} heures.\n" +"- Les jetons de rafraîchissement font l'objet d'une rotation automatique et sont invalidés après utilisation pour une meilleure sécurité.\n" +"\n" +"## Internationalisation (i18n)\n" +"- Définissez l'en-tête `Accept-Language` pour spécifier votre langue préférée (par exemple, `Accept-Language : en-US`).\n" +"- Les langues disponibles peuvent être récupérées à partir du point de terminaison `/app/languages/`.\n" +"- Tous les contenus destinés à l'utilisateur supportent d'emblée plusieurs langues.\n" +"\n" +"## Formats de réponse\n" +"L'API prend en charge plusieurs formats de réponse :\n" +"- **JSON** (par défaut, formaté en camelCase)\n" +"- **XML** (ajoutez `?format=xml` ou définissez `Accept : application/xml`)\n" +"- **YAML** (ajouter `?format=yaml` ou définir `Accept : application/x-yaml`)\n" +"\n" +"## Santé et surveillance\n" +"- Contrôles de santé : `/health/`\n" +"- Métriques Prometheus (protégées par l'authentification de base) : `/prometheus/`\n" +"\n" +"## Version\n" +"Version actuelle de l'API : {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Accueil" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 7543a797b52ce43bcbf0b9869a9442b8ce0111cb..fde4a4a2eaac91b402cfc6e55c1d8f65da311b92 100644 GIT binary patch literal 9682 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

bEXHI=K)8tUsnU(k?w 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 z isDH+C9yvon`Dtlweuk7xC@x$)Uz>ncvI&bn4?6JVkQviM=f?0=p-UK*O2ttI& z?-&llj@(=nZzE-Wa4O_Kz_1xj0E$n5nMrOg(+E_}<+lvFOli@Bbp77@DRL_jYcnu^ z?cRGP|Mwd`><8WP3XF9clldjOwuYMd^oQPzEwDmCl7>@)vO45@Jg6-?|DMP|(yjaR zz3$LK&xXX50?t6$lHwbc4Ye(P0%zhGY9iTLP*O+pX9o^}sjEffHZ z$)82dg`$&dMtO83HH$F_i2k4KdvJ=f5ht$@ZcLwIy7yhn11s;n?A)f z4uSIQmEAGT} z8Z*WLRAQn;n?M#e)GNYg>}Db-oqt%kqX@E(+cM;#4wNEtZA1Ra;)v2K#5z)r4&8Rc zWIK6e=xj==IDuG2`x|^s-STE**~BAoNHK@ulBfKj-IS1zkqg?HgvI2a__MvjPuOYV z&c560Z(9usC9~o)0mQ)`YWw~6n-J!e2dYXF6Pf$RM`gp|W6OY#_}H{t>wZVwb6BWY(RB|R633NBW9CH?5n`9g&Sr-GQB>)LDk;dJ(K|CoZ3;_IF z)X*T20W*yEo-|Uxs15R2S8)1vp-J!%6Renr^ZIL=xRx8HD+M&tBs&-vLQJ&;T*ll( zBBKu>d#wOow-HB|{${zkx$lre(qqe)q|-ti`5j@&U^i6&qRN6(pf$8zgOG}w4rYMLN3lNk`++Y% z1f=WBRvbYEuw8E#ShsiO+tqc=ubC`yuo~ZkF=uAIZhvB_R6sKi06;5<5;DCf`PQ8g zOLvHbIc9KKGy-|Z-i5FQs95_L$7)2^BeH|WD=<+XV3V%=dB?cEi#Y=q$D}rB>Rv`2 z18Rs^-tQ#6(wl?<=~h@gyctEW`w7mo-oej9&U3&S2|t!Wim7j&3Q+_~8#qABRSo?P zR+W;%cE?YM={d-fuV7U3l9Ho6D{-m?vW{+qf5a|i1+e9iJ%yT;Bmh^6FUYMif3u$k5?JwDFYP0quRhu&Tr> z54?Tb>SUyBbRGc_d8pI_-vzXgNdZTmQkr0+N;%7o{*^)NzZifJ=VEl7F_270@#h$l z;1nKzH(!#rHKh2SBk3Mj*>*Kr7>3 z1O>Sn8|p{{dR(nP9_4@@_>}?-Ib@?ngmN|FbL9OMU@v43o1ptUYA!h>wNe8zRl}d% zeBXPyYER>k5zP)U>Xs~e=Rj|`N9fs1C-qWqt;jTK;9{Z%3Tt3Z!vJD3Wmlo$7T19#0AGh>8|c5UtbD;i zOAWgl(n!5DmSxBgy(J%UCbXiW;)P?zSVJUM-8(QSZDv0pqN>^n2`Sqr7p;&L+zHEG? zC~jjc3at`1v1gHQCJm@IPy?I)=7FVk#@@-Z28ku=Q&L@+G=T=X zC$qHSE+Bw!l44cpEbOv|sK{=NZS93>F1j|8@6e7AI@}M}Owc>e|E32?>^oO3Zo2(5 z5wwh1v7zer(-z_JpA9wCj*b84*F#L_#O-juw0FusY=R?q#BaEs6R`P|_$bNwHs$-D zSMS|-_vN3rm+MN8Iv1^tA$N~kxiND;Kk?fgX{n5%4}V^EBKYfL4}bo>RHAA^(S4U2 zLzga2(09)K=vdp);gpo^I4XZwcFUxgbR?J=Y;OfD7AyFZDH*9sacIun#>jDw{2faw zNxHvt89H)~?vOe?bfa%WsVE0cuBY?pNX?cPqzzjFl?`B0fysuB!1PSWETJlQESiF8 z+6{nE+&lA=jlv|qGLP;Om?*ysr)NdP+%LnOZ7C}RqanR+qy^QGl>4RQi`#3d_^D}ip44cPk` z6pBA=9C1gVQs!7#Hm(99BNwvLVgriFE7IuF@6GmMuuUF%8DpI#=^PpMnd9PSo1=#|oyiohP> zd%n_b1_sIHD^5q;QpAK?4tz8)@G`@%^}+1*0x`t`dbpD6&n7B!X)%uUI&&^lx z3t#GWw&w-AENxf4@19$-WRXF4kYAusN#YT17*7rtGeLv$_YQ?oE7DX3MY$9EYIykaAhmoC>E*5Mb#uh9fPl<^tw?}}ci_dEosJy_L zxInpiuFudr-__-FZLUVwcT2n+UMCY2T2Rtq+u0cy(AxH8^-o2u9j2?+1o!gw3iN3X z2O@AiVK01H#YfON5Var>rsw+nOFRbT1du+i9{fB(X7C~Ci+W;WhjhG`T4ara-_9BF zrJ_{+!<2%6P=jP8_5^a!BgvT?@rp;4RT~fu(UT9AXkAHMo}3_cP<}r21J4D)^Vat^ zDpC|LEi_t-|8zS_51;p7L+xTp@eTkSpRE~1o(UMy0gGQd64chmiRRrn@DovFkKC~V z&8Tv8LFW1lxtD-@X*Zw_j#)u`V;`#d?NF}}?So+jDhm=n<%HnTi9CMjr}+$iq?q|o zF(vwplx8ciT%T$vVLXOc)di^ECmkHVFPCry;QyRSACrio;*yv^@n6L!FNRNQf?{WUY93!>HpYAV=K^%+tv$&<~nM`9b9*#k3;iW}GTU26rN?6gf) zJoE%jkL{wzLK}P|ibN}z7@k-AV}w1_q#LQn1z>%S&yYG&oBD#upas*h$JwM~F&VYe zK0`wPLT=1%5PE?Z)Q;L3(|Q>%<-^y8v*S^9MIlhpkpnkr?~h?n@SMJiqNo8>NiT!h?w^YjZMsk!N{j{o!f{j(~^c&@V>LM~qWP&lBa)*1to+haje*wh^B}jPAVJ zQLR6aSpgDJL$6RZDCHg-rkqwm>rF4?LhfKPhUPHubeiVvJGm zOoAWChp)wkw^;~ll8sTw&<#U1=xG{BkD@-#?e9M-fnsBV>}mVm{dxo2f}dFMf6Tpi zR90vAEs7fT(?pGlC1N2apn?JxKmjRsUl33ckgkG?bftXta#}nY~;SK`Vs@jjK+q2exe0fs|ki z^&{H`G#S$f!Y7fLmd&DtWAhAbRf{x?*5s6`uTqD7R852FX7XXNsl$3ekB$o22|%)c z6|jc}cH*Esu-S=Mp&N>)a2L9}6%~3^zq6j<%&YE!(KP&2uXrm<3_a-3e=hJ<{RAgd zQ~8L}C`74fL{5iL1E+;t`IwDw_n@9|$crpWq0a}z-eLrR z>?8qV`tWVuw`IzGT*$lK+d3lx*9d?gO0-QKOiazJ9%-$vM+U8rOhW0~=FY+p z50XFf@i`I;E8hS?$XlWTp^-qdmlmn?WxQ&S0fRLtq7I&vBt#L>MgZ@{42Os-DGF8h z#OqeMkih}9{HOcp^^@oCgT!k z4{5|UV9i5R3<4h51AB*^fjv*{X}N1j*h8+HWQEAf2tlW=)eL)Fjqnd*x9mSrWgX~v zvyV=7?tHN+bmL%8>tT+iU>nzfMJ2SW6mqrlqTNQg_n4r2!NJwBWkuiGtl>zVXcjQ2 zdQ1m|63qzgJ?Ct^FZ4}>S(3odZd_t6L+Ls+M-6Z^*=YVCCp5R@25FiivxPP?V=eT8 zd@GSUu>ovjGK2wp(x-%j+ig?{CZOYnjO9~$U)OIF65fVez`#~z_Bwzqe+Z86OneQgpSEHbue_%$s?1h>hAvM~;W z&JfuG2K6t9`=Kh4s@Cakj1GB@MnahDpb8v<4jql3-A1*>Q^KURT$10yByl6>Y#VO2 z!M?Qy1GE2PX{jQqA*uYTM@M>P6%-VN?BrWeFe_t^i2-4T^P+B}`RZ9H7?5_dc*!Xy znV(0CHBa&ej0>3YtqB^Mc^FQkLv;MeKyx);J>vXq0`buVtscPm8&)iT$HelX98ozX71&AD`H}6S z*2dF21DBZYT^S)@OD zsbCCoGsQ9&i7G;Hk|&rZ-QyH$$${L@kbqT72(h>)qfG9Qr{j;ERQPe9WW*Uc*}FSB z!jN9KoTA(r0`z*ZkyYR|AzK=%#d&WUCQY(G><=;~Ni!u(QQELCrOf`TjqF3v&MiaV*i zzglbR?g>r=(iVZkt%+RJTh^;kaU!G}jG$5kkiw>$_?&tvkDX=Lp9DO-BAFd{^DMKJPIt=>KdK*u^j2d1`}rguWk%^U zxP1VUQS?L!M6d+PX_#3#um@?F3^1!PbtQO;N0i(;2XRP${84?asbg?(C~@(`e3A$Om@cVYh!8V^g)lJTPIBw7 z7Sf-((DizVpQ%MW8Le;eb0LXf$V(xBBrAfK{YgiCP^oc=mn|WA{fH%8M>}msWbR@n zQ{Ds>n)`IZCZ;Ki2%Oco=m`YYB}c108;zGa$$gUtWnykdT34yp;aGMXC3G(P&v7ll zLs$r3M1#~qAWDe9qD}~7%`LWgF z%}q^JUBdu{2)c^Bvl4O+w10o!5=X<+sPSLqY6B4pha>N4G(ZYvMuvmC+Ca|=6(i=E z#cYEm=^f$stTtto7r#(Q>2Qh#E;dk7He_H`5z{kq)>#ZNi!5j-peBOrC4I#MnMJ0< z<*5{1mLt0CY#SYEqZF4Q4La+lZ`Rsck>=G+1Anc*^MHG_sH_RAjXt}JEHwm zgs#d%m$`2&G}PKM#n#q{P`@b2^^^Bj{()#COtOB2)D@UhE-#xYO^+c zMrYM5V2z!2Vna^|q#FA~J-j&{QMd2Mr0loVmY-fW9W!iOMx!E;KIHDL;WKoX z0LZO6pbA4gGJd6~>yxig0jk|>KvPI%*??<^Z=_D4bqCIxi5+0;zMZu6v z8qbWnj?@!g+$p<+L$_I}q;vey(|Ty|8?}Qu3*Hq=Ca0WW>^~@c&IqRS0etZ$WS1M= zXD%^D@T>`p>K$b1I4I-aUllu%Pqr(7et(BY!x_tcdkChVBo1IgozWWisqwwk6&P5COERAit(+=Lhz!9ps9YtjQ_6c9(Y}3T&^Ml816!>oA7qO z72NT!l{)%UqMNCj7TY3r6&s{qpq>>6$G06z2`6!3R6s_uFl>%O+8ou^gHF(G^Fy>k zpdMd0)cS?65~YO1jr*X z`3y)aBpSkQ1){i#Al^L4f2YAQy7&Hf7{G@By-Q*`x(CFnzXjUd0uz1v(t3_#_7t_) zwZxoUz?8viunIIen|2iC1_4OkjCsz4(-t2i zbdlPQj$Y;nb;-sP_2;>yIKon&M(@E=P`#23VLvKk(hL(`6Tj7j1xME;PqG)BfZPK} z{u>X$TRswakWxn$G@+6xMFdS{aMV0B8}Xrq;F3iRzAstY?Bm@@GJJQUke8xQXXTh^TUfH0UHvAiNG* zJvVj;FSC{^sDz)cKudXdQfHIe3(|WUtOXQ6m_d*e3A$moCF~!g9Wk~_yL{+ND*OY> zMIu>3)hI89J-V2wVxTJq0gtlf(3j7_#i!9mxjgAwR3EMC%`zyR;XQQR2{w|OP$r(k>2VG z3=*Pn8pC-)_7(fX-2pS^CsBt^|o$_l!V3AQ~0-#}Pc<`1CgsQQ3wxM8&rhUTF zTIYwO0*GoWB%L>9po^miPE{Qh6C+H+sXuz;$k&)2(xu={NTJEqHkeJC?(}H$$ro-O zFJU<&!ImJ*5*d4QuPCfx2U4>Kj_Hy5aFYV2BCloQzHX5j%tOC(DR-Ou}ecxA7q+Yj9aJ->93Ak6dT%)Ik!ilsedwNyUtB&j`Ha8PpC_Mgu zF}h$C*-3Z|k=GQWfktcq;hAe18~blxW#P)u%pR4Ou_+$P%C`)^^ZV}VUgZn-PfnrdU5ZrP3VTAr^;&%?>%5?`Oy~qMz}Quk^HC8Qv&0fXX|+I1LV^&WU`={;XMyNbSWHwPwVTCs9Zh(X zD!EJ`5)p8Zq$k5ZAZX0~IiB|-GDkPPP&jL3^A70MtO<6CGDDpDsyexY0{RsX5rzOL zBfcL_qRhYcqD^sFd~~0FebovbUFE?>NWhpOZMEaWS!g|pD_HSGMII!ycUYb=rnF6(Y z9Gd_)NK^;KJ%O+kNWUEhU};3gg$Xl2;iZZtez(%*#^xw~l&L9Vhzk=5gHPN^!h^cg@)2Q|7!D1Hdy0&=8yMQ5M@CqV^$FA!h-{@=gQm=;pGTX#5k zYQoS1F*pPYq~k6(1$OBirW!`U28Gjt` z2zg1748$p)a15n;zf_VC@eDw8VZEJg!>sx`-1==5!Wwt<^u*jz2}eBUwv#XZrk_M5 zN#sE=rt4CmYTKES*t_LL9&^V{f_Wfi8HzBPgnA%3UKf|@5Tg(8N>%jE5O#_HEC+w` zf^ch6ZIX1Ink~S4e!GaRnfEm1!--x~YMe>+q)1;q+55lKL2#l)>(}Y29se*ROnOG>2I>4lt zU8jx@Z2fNzbdXG&nIx|=T??}zh?;)MvuO)yasdEXXUf{EyzyczeIGLwP@r(X#)yrU zq>DP^d|kA=H}L~)i3v`m= zSK0=nBh{mqCPRf1eW!6=xFk6XmEUMj(VO{shSm{kfsG<5UTSr55O#=C5gHLW#)~g} zj{pzDn-U0P3%k_>6&v;WI8{5oy`f-Xj_U&n_Z&MtcmrWlQ#9 zInO{tHl`2}-iv>Vgy`uzG(vkAb?8)XvK2*zIKXEp!bCaVO{A-xl&%s{0=Ec}Ny{IE zk_V~8Z>1(Nlb}e6{*+sy4kgsQ#C?YNN@nu`n7}Ngw}iPmWuIIghMmaHfSPZ+7#A^kGd$dOr}ql(IBvfY#)z`$m6`9zDO6?Bgt&zjia@M=kn@6FsbBT#(H#O*P4ZmHD)` zr=a?GBfJL%c=%CTSKtsF2zaIz*a&P?gzR3>NrLAjtsx|4cAv4q>@^W)T}Ao)}8FW%ZBNrl6WXHWmld5cQM6wRR08E!gMY193 zr2?3Yf<@4)Kr%&@?ljLq5VWvl!{Ij=%1k|waru|V%|+bI=2}!{V!j?B3z76(8)K~` z4@@R&A+N)Av;gWN8H!9Nwwt_h!yNu+9L2{aMXO^?RWT(S(0HqJE!q}m<6m_qSv2l? zP;%$6Yh1?E4gzPvT{CUM4B>smG~xX3BqNDKt_bRUAEB6-UHS&-vO9_Ph&q{Kf4Dq5 z#(E`-FD3#EZL{t(p(yN;3W5NL4kV#}FD7&32`-6%6C^^_cuvb^gfLR}WGhLX(k_iu z)U;{GTfd;7cT_C>DRo5kW0A5!7P3wGIPLPP9Mk88rkR5fF>xuWq@<7_JRGOUK`-t2s#xH{0fa)9av?lF*2*i zM*}m+vMJmlYe}*v0$e~dGj&;Dc{@;&FGz?uE{+}&_UsuL)P8|_w}7dJwBaqLx`D^K zPvke1r~`p=0OG+%I4Tp;Q+x!i#V6A1B3rOWHcPq-g5<0rW@dJ|!1l2xWq^Xp`B%>8 zscN74qJ1N}*1H=YC6N?+2ClXh(hMr}VNfCT8C1C{Cojx0vHA2TTWM2gMU^0|KnMES zcS+q7M*g=A6G_cRPepGrQ2mukEul)I;smfyzf+k$!qTL=@NejiF_;;C;ofW&jjUE* zR8(kET90_1ASy&a%+4~PPugQb>LE?iJ6Bm|Z522r<2=#ZjjCEEPmfek3BKStd;#$1 zSZpUgvS{SRg)z}X5=j=saf#QVy4Xna(h&TH`k5j8-{?NkSU)RZ9L`Dm(un4ACRCgT zB{wo9mc+}{UxM0EK+PNb2|t*}ea{T2HV(qnQHVl~`l+WsdjAm29W@_}RR%SYp&Bbf zz(9$G)s+C(aE2vnplJk96h~q_HQ7O$Q~)tHI(k2(-fXDkDBFr*JJFQApnTIE(_wdD zADZX)lNbbu4UHJbZ15hpyZmtE1O_4KAcsZ49cd^gA>G*MYQQ&yMUno2@=7#adILJX zs%sSm-V_)UNenrTTk=BXX6Sc(-K;#?&fH}u*{?l2=|IVBVG!C0H=|bRsKuxsCsDOC^*pz}PR_Uxfh92(+>!{1J;jDzia|vpa2CYmMdZRbN3zh9x>92s zI8`R7HK;a&;*SaxT9I(`uIRw$DU4~*qyhF=1FVS*H&r7@k#j;!n@LS?C~$Rhs@fVZ zOx{5aaaR{pL(y^=`BNqx=d*O2!{CCb5{^g?`%g4}0VdFa9Sthpg1x%{BsBHhJA|l@ z3GO5rK3@ENaKpURAqEW~2zZ4eLX`R~L^cRF`8}f(a^@aJBXeO*s7yEyME@qm2zFor zxdP>A4Z9V`iai4Z9^HWeQf>|nPT7SNFwdlfCwLrjM;=1m*sSR2FTo-?^-1|gR4hR% zE}H>g8?>f*CGT1MrT&i2M=EngNJqLPVod-A*;VzF00Al=WKGVm$U4`^9}_)H4NNF` zCu@pgzSwt_|7$7AgdD3R8E6N$C(0(_A)(gHttSmJb>SJK9HmLbX^AS&EHn_?ijHxh zX?YNyE~LD~2>M-S3xr9QHmjptWy~g*G?Ig&!qIs2rh%#|Y$Yk5C4 zM0lh_qR^bm{ZW_r39rj4U&HN^NNfYfV#QYnwyF~5iL$u2Z=E($_hT$Xy@*LtzV!sT zQ{qfR70C9$|4I0YyAjdN-iUe8h&|&e;s&b@nR?idLf{FF(6Wu9CV<70YK$7aDM1km zGpq?^`E>oyyU2Xg^fjRc?YFb(v$JgQS(lkRt_2XT=5&7{9RqjF&VWIqSei!oAW0ap zX{o$)+|lIY=xFinS#h@4pKREA&G+!r+dI8qC_Qp}-Sd9QPDh%06b)4&D zhu(D$#FeEl3<+^pQBr&>>+Kxq{8v5ab|vAPJ_~PMj^q6EZGUgNb#3j8pBI=f+Ln`U za$fbVNbe<&-a+f?+RK6undGd}RoF`T19w-^bYblDC^Wk%(_6fF@c>BYXiN^3J9bPZ z!obil?ApTB0g!1ZLynUV^R{I1;wOLoHM6e1J|H5ZwGKmp(m&Q3);Ns;i#va3PyLDn>sT&{9<}Xn#KChPX8;^@5N6m@Nj5c zmNMGAz0r<-o0B7hwj5zivwO0DR?#jie3Xl2W2+u(YRW<%wda zyEb396q;pCm^Rwh?P@DltboUJKIh`a0hOkTLg3VYTYHGBb>uIj92qru zsD$tGG0NSIsk1arGF;<8KBssj{&bYVxWP>Mz2yG$(@zB$GXeBg8!C1#9-a_Wx75^B zga_7oC1JbJboeeR_CGZ@2ckhzYgMu`*h+_2r;eOB;dM$wW9h0@n;0kew4znuVy0bdbyXd%TaXy@$abNpMC>dlirwWZg51%>XgG$h*)&%>n zyj7u3bSBIhEwOE{1&XJQ5qV{tsnv76Twh}>L<11{=Y;;ceEIrYubw`Byz0)1ZLa~y zZvTiSL6I=GYQnLFc6&rcMSUiSBIdPzJPtdkedxf%yGu)iuV&yq6(S{Rs<8f8u*I7v zQ7Uz~ly#qReE3zgf%4Etz|~Zl7>kZ%3-UR&)}p&sE`mYga_H4b96Wd*&4lk6;G$aH zuyVezu}!e2KC-UvFFzc%ut>mbRr`d$f&X&BR(OU8+?9#0B~@KYbl$Mu%-h3bXJdp1He5Bmk?3oH#4Ma`Huf~=58iMZ9SMBWF zvRQ6l$2?+F(-?f0{$~g!3lX;kgE)FWDOjLO7|wHR9J>_#YVHCfvs%RB7(|;}(2A%1 zD4^L;Gz;TQhH}{gN-(Jguh~nMEZMMW(>voixh)vcNSiO8S-TS=Zed|@t0D)nAU|jp z$rP~@X)H+gLted}{1NoKwAH}EIk#<-&B(~WfxhSL=^2W(XWsRlJB0`|g7Wf?_74ua zWn;A=`&x@YLIOj7{q<3#ob((i9G`7;vA8D~Tk7rWyOM3v{LtUCn6(24P))zb zR*VQpM`(7tmb9-df~;-sGk#l)sdpV67g{S56=2}DyU$9?0_q}m1V4aWawGJ+_)F$x zzWq`V;rdNmh`+EkD^0!>iwe*{{A{v=yaGn`hX~I{B)-}GuVsf1ANImz-TW2ek%)@i zVSn|e*Vv3*)ldh5!gc6vInkfYc|EvAXs7}pW@1;S6f&CV8p&s?CmX&FuB zEdYm--TZQ5Q{qxJ@Xi{YeIzMfh z{$dZ>Pg^??G#)YT_{6|;zc+O3Zr;6H1YsXqx&8sew;x;2{yE<4OAhhQAK|bR6(7MY zVLkr)qtE&0pL@`G^eEy1e8HNmM&q}q!u_xxaJw2GKYr}O@ot2y4}XmF2hw#M1ul;e z5}cV7+0a$*vnxu?ow$73B}gF-z^peFhkBB^WM?4pC_)wxT2Y~bTU^JyMU-v+#xuiJ z9e4|*x-y;uR1w4yC5;Tw=huqeve_^DH3V1PUAJ=i0!c|p+0&=J8-I$;%~dg+9vxKq z!p$L4%tHo#2+xp%$OS$TGrVDme}fQM3=xo8X=y3*86H0T4YTO>qV&^#5_qLM7q{2k zHeN1-KemONwW(F2FZTe1j+*qej6AZ{etsLc)sl`QQ{Lu&;N!}fN=>1M9|LQ>|R^!Ut=5?Vi9;?v6goz7Z8 z#PLlu5gGkE9X&ik;I!PNcmKL^)23s{%s$oDY9RD7-L-3%{c{}7m&_tFR(ogXqNjuZ z{N$G9)753nAUlDql^o=@AUuxa?b(W2qP3{)_ph$W6jvLg$YvH`K!1)u{SHGQ(C zjV_t=aM~+;U5>bc46l^q)<5A|cbJFa1ZpB40#lmk6|`ZUCR4f{E$R_&j|_oJta z6q|M56a3Ur?Vz@F)UA2Hc=?iK!3BbMV|Um{-CiYl^yqM>N^w7=VJF;mzMkrKf9b5G zu|QP@+>$Q}Lj0k~<=Vbo0agGj6d0)k*<5t02MWlay%rl4(tS5D0qW7B*Ob!tpan`< zgYFD1wf_G81av{b`Fl-fGbJVEZAQj>`Pyxz80D?&2Y|27ey;3)}y!Gbo+m7sa ze%rDejspROgQur@>oA7h@7up0ZxnH+95T?XrCC?lQLdl}sjX9H-BBs2JA|~%Nn~Y} zv>$R7H1yfIq?5JfYYel?9}P9+CJN@bySV#RQT}_?FvjPX@X#*5T_YgaS*ynNC=yK8QP_a%Aq{yFjtrGqT*|>W2qeeo-cNPQ%g2ky^n>HN+z7O9U3M7DoVVYQJIIm_6`2jb#KzOl7 zh*^!8K|AE5sPA-S zDWCO_IkLcm_6VAzG&6pos2|RId6dk<&AXtj%>{;ujm8f-&^k{$JaYgocG!u_(1C

wfWs=nqP&zU>t>zVSx+F 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∨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

Q>JmyxA-UdM7gk9Jb2 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

L`quby6s zz!u@Fmh$7AyJ2%Qig#TQRUy-rE|p`e5F`5R&#kARN8{`=KB#}JUIyB1I2^2LeF>z# zn3-|f8aXdssJi=pyT~}89C>jHWTVE)pSOLvkBY~Isj=L-BK-`% zkcGGfSnNcfg(TNsJd<($7 zmV#SyO?Qbt}0nvT#AG zM8!nk+$QA*l@>te3Yn9;ZgS|5`LBZ=-Nwy|beIOa!b)D}jl(svlYuLlI7)d~=`vy= zA(Ig?Dcct@v3(qT9A7tr5HkZm?fA{Vt`^UnlO+@gawrG6GT+xV6ePCNQ52M!p*dqd z;bIgaMHl|W{;wWOjUa9Vv)-FBJG$*ywIbNd1sNT`d}}jX5 z$D1pf-*7F*m*kgJiqaSbk`1zEQf->H%H?HF;pq4K5nz=Q9r8;5z^r%~1cA`_1{E#` zd&@Ol%2HoEfTh)w&~U;-5;-|#z_gs4Wd0?OY;BNY+tT>JAb(&o)wTzM>6U?4XNe7p zqW?4(1#rX{oO91_`?#EsseI5!b2H7iNaY>-xAoafay&i=3itcFlAEgJj;4;$!Q>z^ z3)c%wJCR%nw03K==Bku#d65uKKfQi>*x9q*cJ0#+kP4wiozt*p8jg#b3%C~b^hd=_ z2N6XutdVy+`!$D$F>iz_z_J3li;T;rpPGy=akG7Z$)Wp0iZ9AobPggJ!b?fZB#KlN ztj=#<%}q^9qECZYPX#I8H_*3Q*p3q6not9Xxn2I%2S@ zd-jo;$NAPVbnc0ma|eR3Fq%VuiN^?~Yj)Z5TbJDb-gvGp@kP==EP*J3y^r$o!ct@Q zI=Y@pJ8OL6{4$G|_0$@S7w79e5TV8ucS2Se4;gZf=^(aY=kAsCMoH^IyiXYhzpwfD zFiZ%hE>QTGJ+~caVPWxQLF$XFUFp$9_u|lHoH&2}0W8}j4!zbF%ga-$jZ}V-(b6)1 zH`q7f&K*g6Y)O}R83vtOhg4;CDc(ORGBEH9&5ro=Lz~0MA!?vw6h8@-*xIWX=WLLOc>-hMQRmiy)_n(Vf z5ZA4wOhN~EryrUxcxx+-p(oIli|eEcFSL?Tv`&o#zn~u7^~*1bw)?pkT!s!wcdwjr zk-6<_&%EL5C_0W$FNBeBDt|eX>cbYg_F$lzO0FT>!U@@fGB@D1Tk-0w9a?U<7e)EN z5w)RhLu$(Kpu82)kQD2ux3=C)0ac$q<77!u`TjDkS63-_$EHo2H1a4yMJ>95z?z~~z z{lNx^sVMbioPkwH&LNLsuS)3c^{3VSVRt5` zK%*u>!jceK;0^hXtqoA5gw~O`fVY3SL1404MEXukvh zKC~TF5)SC5}m=O7ZEmVo(M04|s)f-YmaasSrf@r|ns?ewtJP zY)nNGAT%Ax3GN0A5lzzd3_W1!+gdt#P{n=er4mI*nD4|HGiE$_E$Sz#R)mAosbfXM zBf=CQ;vPmJpRYK0 zYXB!7*KHoMK~s2LsJ(_m*tn*IDOuk8Inkw@I))K9iby^aQa!)a!0Z^ zbP9X;C?Lng68h?hat+^ZkRyAQruqCy7$KGm2_W@83Sr9Sng2sO3+po`C2@rm@Iv#7 zj+nRsHT8Z*T#g(hA`uCTs|O|`E)`PTB)4@?APn7@-%EgR$UmA=zr~aghXxzfn zc<+Gk0TC&8XnDCl)ZXr2dZDP3-K=%flxy{G$Vza!#VR?mJEuB~Gl>twnj@Spl5B{? z&5a^5&cf1zsWjCHwTz3sQsoorSR6IF?pq2@gcS_NXeNULIT$8Wq;@y)U93#KcL$t0 zDRh;3zlkM_zNP>~%;(zLqT_oC<9}CX>BsMSLC=t=2bPp?qFVz&7qOcp%+Zc!%sv|O zt$kn1W+%UG(Xy(>U18bR77b8oh(=r28LM+j|G0WTeMl(fgn5Xzvx9@Mi$eCIrobB( zDpP~53@* zUFaW0^_EC^CAu}0#A0CN`uEQZ&iNW%MqaQNCQP(j$zXaP`cpMHtYM;o=TviZv84bI z%8Emrz~{6-v&WxgdY5}!Lc(K2QLi)Sl8RJ)+`x{nFVgq3%s7goS5D3SIzC6a^9eVA z@g~*mD88tsZLcj3a$9uQ&em3Rz6~ds+mXKi(WJi?eJuxw*y3Q_=WLuQAP47PO--?f zj~2<}{+XwI`j~r5&XZcFL1Y#xxQ0mqwBHqTq|iQ9Z}0fEOZ)WfX`T84rbBea)NdQJ z@tJ$@RvQ&(lDbF}(6qoxc{URSwwF$p;YBl=F<7>Mf5?=jRD5zQQ+J|3cDzCYz zf8}M_M;=V`Yw`oi@sH3&8y)uOcRy6gPy5rf#s_4rj&JcEjhAS z^=k(=DGlem4LW@~QMo>9wvq1KaC3>dOspk?nkTM)mEP<_i^s3W`zYhsa^TRh-rz9K z#2@zpGC?J*zvAVdR-Fc6vRSvHqIhgZFM)>EHq}T35fAmTaFtFJh$V@4HxQkHm}MC; z+H%cLuUukFI->`VT;23%zs=N!GNvG=uD040G3A2D47q|tcxd0pO1)h>m(&u;T#mFJ zVx9Ptdq=;Jjd6XJahqB93uotaT;Qder?3KM{K14QVT zp!)~}Wiq_5I+@FEYl9?56`so|rGh|~J1scfCA?-Vl9BtZJ>HDuvy#+C%tO5{?9LLV zRP05IEs4Nue>nM(inR&g41}B@Hq7KB?9*sWy>)(gP|kVxh;3G-F=xrJ6v#$Tem)0+@eK`WK=)mI*}ojC~#;7ZpFu^ zVpfz;3rTX=xKXHj2{qQrqX16EpcvthsgKeS6ZvRj2s&H+v}u#FVG}G(I5%ya08|s9XW^#!5Ok9rng*XRF0S0_~p- z-9N-7gq)C*)V#NCBP3YS6*aD8R0O@qA6wI_!tULLrbwdI(Q$Y*NCvu5b`{7xP6(}2 z(`#2VjLqou`Pm`HHFvkv233Y7fODe!i5U%sLZfye?SnY}lYIj!Gt8QNA&c5`m{oRB zPU*wfg|5G^oiIGO`q>T>TcXtDFq&A<$Zb3Q9u=*)2So8ySMFGMziUkqZI)w9*=`xy zCv#{r&q;JC&tDm9KkrQGm{=`uRUL4erA{N;**KG0_EW*_PCI_6hwXj|^)KYpT7nCZ8?Hz=7gvH;*SKn+Bbk zEztK-EiEm{y{xKC@X*-l%CRlxE)LdMzm&%5NpA;_=Z+!P$HwV^13VX(+6MZRQ(`tl z)-hOq53Bfn$FTduE*!}&9mf?T@e8GfbtQ&r7efu-K5Z=%9C)aqt1Q#Zn8ZQ_cRcIu z3%yaJFB}Ke2**z@a`XN&f|5+Tqi{j$ouBVx9Z!N7726dme90L(QRxzagKB)eDq_xg zzOW~h(4jSd`~(9u$LWBDPg9kUA8M;&J?JGw`79C$Wa23Qp0KPb#U!v#hu98W8EKEA zJv=69x>ZH_nw4Ijma!Nb3N#6|qba%H2|s*r1+*D!yk{#Tk(DdpaiI*I=hrALu&gs< z9Ht0noOpMoW3uEI;+Ne?pcT%FRvCs^s70TRx6SoSbD5qe?Z3R>Y_M+EjohA8?u=+5 za(}_1MU=9HJsaI%6tb;#@$xle-)RA?n~e>Ikp$#NCIWf4WS~_^n#T)>do|-EH;VCP zSYRYlYU~(W-;v5{w?;C909jp+hN9mR53`cNvm(Prbkl4U(J_E9&fqmRh~?5{qxQ1% zF98h&1zzB^MMC?xY)dS9(9g0umf}Fc*8J(RV$OdA+!`Jo(6qEEl7!Dfx7I(LfB4@a z+VAQ@mBeT=o^G6uW#*H^j4Txurym#z!T<-IWzWVyfvHrkF@A~TJX4a9lx!-Kw=&Nmh+IFzcgs?v2X3i?~jVgU$ zX_xAHYVxG78~xm-vdh%AAAdCI*Vf&J575$TV>O_k!s>34i+qz#;kA%9Zx z!1v)UF;#WL@++z(h{BpCr9K8ym_=UVuV2h!UvNO!yAH+8fQ;e%m529gVD83v6OjX^ zM%&+&6ce$XkQtxo%o9~u#_4kC{M)Fr!(SX~h?wP#Cl2pnd_a=xlxqc3#3+GRXl>;F zl{gSOGmR_cKgY%n>m5N?(@g=L+iIMF-@vV(o6-gVyltUym0=qFU5{SVAbCNx$4?e0 z&&gu@^V7^62cQ65pT02vFHi5X2>QSqQA(&J{&Z@(U2@hKTqdsEJ`oHKUq9ss=9r~C z?ZEb&%)dp7$g;fT(b9(@)VNX`yGa-c0|SFo1Mk(aA!Q&IF#w&LsGcDx`Y6_aZVL0! zp%yVt@dMM~vmX76jPLNCcPOsxhD>udjMfishuf(bIT7;ru4~qO`=lwSv#YG{b2rca z<*6tacttf^yFYg~v7iXhNh=LDHVz(JZIwwCItu|8 zY9r>j1=42}Nb`ZzXM{$@?y9Ru0;rFw@OwZviO>gf@9o($W(6ljWX;G$_#*G4aL5Qe z$16vO1?xNI{vsh5{K_=lHmop?ye{AJaPq*{tL}NZgFccL0U&Rc;G4N~5#f%esnzX@ zLwCaj4_xSI7y3iKsgnuMme!ghpJ0HNU<2Yh7Q1*Or>`kwE;3l+1AlU-zLNsW7dW{9 zTS#SoXqcPQ2xN79{NBTSV!#DV7+f|6>p;ZK&CO@nB8fvVMfh*G-esQmb!xXX`?!&6 zk34mNc1~vU+Q)D&Os**Q54i(W532ape0m|G2fzJl{zoc_se(Rm%_FC2t&6Z(;2j=8 zep=`u(NW1YXBKX~U0hF6y-UowmI#fN>sG16#i`BP-*=9&#&Q{ziuRJqD5Yc0SvZ)1yiyOl>HsKSIKGgtcMPkt&x@E?^K%iVUy2)) zMxJYbU1idGQ(LrK%E4nFc!?@1ZLa=BA6F#(CH_4j3Znd}-12FuWWBS%<~w!r8{I5t z!OZ$}zTH>nHUG<*HJ%QYb8?>37LAiMvX$xc9l66k9IStHd zDPcF};!c_)l2IC4L44h7st_-Fenc(vWl(A$f>&zl`V}PdCh-bh&z{808_>l4_Ifg7 zFL=6St|G2Zf*S0kOB+np7e#+>Txx{)lDzHg*(XjSdPe@@PO z_Al^$z}Y`*Wuj44+U)D6s^VF$PIrLQgAAWj5L*<5xu0@Z0u%o_St1XWH;ML_{}C}0 zAx;hZO0>svX!4wo7G;ez-*r8EyB49r-z~WKzh@>-oI?cl4L{moBKM0B)Z8UP;BY|C zQ3)#3tTVtf$!Us!dn)7j(tvv9)It+P3eJ(Mg+y|Mbzl>7axo_XS}cWLXUKswLHB=d zOMUH~?)>PON9j1$i-hM$LA$#A;SnN%bU!oLK9e%JpUP$QcmDw)uU4Nom-+ z4zNJo0)WwV08#Abvc|PeQqDZl%Du@A6prSfZIwGh++Mo-F?^vBjljXTA}u#7E=~wa z0;qywV{3mds3=G?5eiar{~#I3vFbA^s7Kz7r6$l)l-Cjx_ccWlbUA ziorXa2R=STF_liGOHUGpR{4fy%YgI>$tQQBgM&kKk8iv{Vc>O-^2WuM3OeKyZ)I2J zwvG~6IyJdVXlQyG8pe%F$ybDwpD)HWN~F|oGzK)~GW`Z6X?V~IQOSAKu3`cBKRh#r zLD&ZdFAoQRkXsTR42n^kQzG+z5-A%+^6zJXh;54=UD&RcvTjNF%t42Wk6l2>)Sb-aaApHO#Yn#-;K1jb zG;qRFf&n^ztN)4X>5CVK3Nu358jD|MYc#`KY!h~!3x9$oz-07<3?X{R!dvWm0JT$P zNzOQL90|;Kxu~0Sp*-ErxiBJ4*WhkKf@4+s4YPZ{G0lxCW`bAWVY|EUI2nK4ylQmZ zBPJ9HJUZ*qi{G0^TO`B$0F94h$rhozW<^dckfOYnPC6K^(>mP-jW3| zVV}-TRkLh?tsU$o3nzRR5riy*frE!i>Lvex|^4I`3)# zPv0Wif3d<-EXt?=DzwZM8TK@W1nA8SbH+F3AT$6CCT^_Ro6Ce(5m*y20-d@@N+=5% zZ)tW)4_UwQYKKh+%FDN3dD`q@4^9T$to~XyG|Phf?khXMsR}D`(V}=^*$!`SN!GVz zrN_rwQgn!SkzY+zD2(9k7V$U?+h0~G3pscDXpMW=WW`J`N1s&W{|{yF0@w51|NrMO zY-Yod^JzKFnF=8}3pqtm5_2denGT2!&Nk-|ofM^{6FL!Uw$U)14=RZ{bW))brTX8W zpRirmF8h7|ZrAs^zBa1Q`~5mRpO4eCt9^OWo!8d^HAo8y1w)-tW!L(yaZRCqVRlq# z3}p#twH&}4f(BPNzHEDZgl5#<${RF5onO71f!iG*UYhTdzanFK25d+4P5=&N!AGJm zknu7ZhEZg-n4HdIr9aJRwgU zilULwPKFc^JeUGhRHziT6o0z^)%%IKXbyv=6q7A-9IA^&M&6d089+X(dDwPupB{HF znLSNdND1K&&jBiz0a5P{dCpx^yMZ!A`tOabP3AS%DPpFzVW=?G?*#5{(Lk+R^Z@eJ zdSj=>CCT=YoT|9gfVqUAC0xUTEvKVwHO>)Hif`UE6j(=hE;9Ct^viHEvbpTsQ(2&?x_5#}K)6{->LM9l$ zuA!bW=LPM8=U;c{_umhx@QjFL?E3L~g!`k5=3ct$lw-R1akNq6|Sh|B#S8W-ox~pVgwgp8f5VeS)aaG>xh#$uSi97biQ~3OBzB zsswS<1z6_B*x@Ub?%~?IS9e6L#?u`Xm@)EEm+0dRdr-5t2iQDo9P3bA=tG5=?^v7X z7;>*qa>kKMAqElW0`i39B{3rML=oYK^H{ukK?_fD~#?z_C^xmI^?GJ%+$vLy146~lJk_tH0Tcp0;iL)>6&ouC{= zR6}xQ&YU^Z-K>#PbQHRSsFAl20u&F0+^Ko7d)!eJ?>TFkyxlTwjk@8z-go}CEeN+~ zFElNRr%3V*4Q<}@V#m^^jkk~Aeq>S~67Wgb*>isbaQ874xbh8E3zL3^eUs_5LM#d5 zz?q_RC*EsZD83)a^+km#{s)23mTY?3R+8&cu^!1TPA6sQ6v6{P3#@1IuZR!R;Z0n6 zuIU6yPfduki8d;7)g2Jcb^{H3QHx#U@{M1`X#aADhL*z!W&v+JNW6JS0CMLGVsbqFQTd^J97xj zrDRH%f43wd!g}UGj+gJpEs@)GVETdiUOP4XMRi{Dbg*L*Q4Vsf+t*d+GT+v6Xogk7 z*o^WDRDRihRmxs_PsMMZ6bjN*A6JV!4%3fa*Vsb7Q54W>7tIu{DeBfFgw%Hr>y02+^L~T$;sn3{mbw>yFKsNuocfTU;wS6UzK8n7`90b^OlLWRg+bEI^la+{_)N(BE4>~)51W%WpLygGM=J;uE7Sa3j&nT* zd#&IlX5Wy7b$?b&^sL;o1cGMZgSaL=@u$v~n^(fJm0GGXnfmCVL)~R;Q=9g`t&Q6K z^kmnTI%KiJ_ieIh{HYovarK8&RH^R7#*kjhv%53PV`50|r7iTsQa8E}L`rcyZKCyR z%WgXhkGxKGNnPU{oSrVh!4Dj&Eo8U{O@8j1nL%Xe>2t2!7ZDIT^N7UmBQ ztW8N#D+!~q5%(sqO74BRaQLLFiXyFNGFrv(dEDO8$q{E>rDvXiik;5X-`w&fyK1S>Vz{xMkH=)nI2H+qy} zq|hV{nS=b8_m5^$G6Fzw&O)DXYMcKs&xOJh7pq!u?B>dnc17fIO+`t^apqh(aYNp>YJlC!8-4S28(u!^6X4k*pP01;r0T_YoQ;ecNNxc6XjdiwOLs*WQRFu_V@4&Nk_X@+)aV|kR%j~NbGivUg z%sQOUUQa~hfHX@i)02%mbFMXL}VaG9OIruszFaQ*f4gs zmu562lWbu{L1-r-Y9ejqvRMKz?`+KmFCqsezdWze^6;pGSt)&ZL($CUC@1B;fZVlB zyTcGK&KK&g_Fdk%qEN@0KuWDNGnY|T&lpvfFLOU0IM&%iy`81(3Qq4j)-GHE=0FQg z-@SP$+7Zxu^6Z|qOE}(NaaN4e&Wd#eU?ob@BC`w21$go_>Cxb^(hi*dSpXuzxB$(g zpShW{izW?(Pjb0+k+!^-y?ssN{53)*wQ1J)%UQ`kd?b^8kOnb7|5V8DoD?*u5DpkM z8H8Q^eJ8m@DOn|^5!o(RD9-3q-6Rm>4Z#9ZW3lyTK$ws$4*sU2#)wR$t2iQ7Z4~(jECR~A`$_vwgXQfZU4TW zRfK=-ne3e!tTYxPlkw2WF~50a3%heYChlSn&E-@`!(wNukUpM$s7Pnwp5YXV^s8*! z=uJ~hLViU*edcu|*;(b_X&qIw6}I5LdT6#T0SrN}P^ z%J~Oa+Z4urlKTn{QAb*E$HPBtD9$>Ahj)hP|G|bPhE)H#ckns7FUtFcDZcu5Po#a& z0(c*8-K?>U#ySV8AOiHB8j*8J(hHO$m7)m*|8v8fZ`wAEcz$N|0@X_UiUPGEYlsXP zew9KqnwDAo{$ZK>4t%pskQ7nM=@abI6OQ`&s)3cEtYB(;vTdJ*hZl>T19KJeje(y7sjHGy8QnY>p3DbXuTIur1GS*nj@_FRj^DLFV?aI@JH$Xph{w z+DbX1*??So5=$evMyn2+`E=s>p`K>=bAJDjI=QTJ5BdN{JI|T3$#F-ux(s3kmv3b_z zbM&F^shIUAhBJx91%b}BqVx*t`6ln ztw18IpgNkgOcP@<9;L7{tz%1OAmG(Yrw_-WwyFfV%xuPfk!eJ4XQ5(sif18FoR$n#|*G@ zkt;rbRcg*4oWgbc0aF4H=t1ClLAXkTZOYNN%<H3k5__B4#W;?BL zz%=P=X&{31G{5^KU#+$AWkBzbi&8&;x#9{HRTHJ|Kh2~uVTkQEdQf;AcKxJY_1A`o zjin_~X_$5M{bUTEUs*@>w8CQnq3hR?HG>T>F6{Yzp%_aK9z6K_!h8oBK)2p2Oa8D> z^6vk>fdDN0b${nk^F(R^GJl4#CM30KHEz?UjVT5NF@&lV&_X3+uk57=gMg_ctkS7L zBUQR=zt}ts)2f?ZtpHb>N;a4nNJI%MB^);QDhX8NdKc(fl3$6~u&XFMgJqWz%Rg<* zsr0XpMf4)7CXtiB{yN(t_CpziDJ2jz+^?9Kf?YR1A1X8G>LjHBndfpq6YAsuDG0eq-LINUeXXo8E5VelW29KE>J!Tx_CGiM7r&iS@} ztZ5;o-vYv|MLH`@A&&2_T?@D|VMXYV%+wOnUf15JmT(XeA-lOqmh9casHdG7FC^tv zg=guOsQ?NCU-yq540EY1#*vvbDNK3}TwGc1WNP)&d^zgLf5|GG)aj$Rj+YzlLlCr# zXZ+A!ICFvnol~k80Tl@_cI+3mMS8$lf!|DO==pI-`>*00LZSvVK{7UBKXIlW?^N4= z+0jEqRK6h2lUEGjQ}5WZW6wT9r8Y>eT>ase|425RJYyb(8`<1wQYQUQ))zZKAY&#h zD8~AnrW+9xBIgDuKC|OY!-@e#1_KDAiU$PNVU9wOim3kp_d_u5G8gO&jy~1w5NLk1 zIme%x-l+;+c?~wzRpR$RGqgX*8q^IL=UMIeh8$ zZL7v!18LQ^C@Q#_cMsi)_tjf|C%_6y2E@TTt{brr%~G z{__7< zOMCWzyw_*ZYaw4pqLTaPj+a`#`#76XG~lLoYIYF^N^TiCGqxc3e}rS5!(I0gvn5T0 zIc3yS2KVFFsPp4)Y|*#=5f1r&1mnP|r7EtOiX>^;lltb{xfa-yd3 zMayHMWA77LEe{cje8@s12-JL3AKbZ-Yjd(nItp;dMHNo-p>A|%O=;Ds za`X%m)*)mTsu_;Mf{Qj7T@fb8Y#PaX1`X@dad=1TCzlY2n8FOoNZUb+FL^WK%Qo%6 z{{0JVY${gTR96)Fqm@3(rH`9R!e9_O6>0kX$5;k;Nv1Qi#d<*S z_N#t4&!V_Ms(^e}i;C`gWDNd;^sS zB!ZhfJ-@H>ggnyrfp~{>M_T`A0~TqZ!tm9tmr-M`WIJ9Mk7EihA6s@xOKZwzCSCMu1~oZ4>|T zvu%mqH-1LqH9>i_?edwL3CiK@s=j zpFN!Md@_qoOZj^VqhLYnkL~xE!%m`QsaDrbX*2=SA0r-;uOV2Nf#MXlw=+7YpXTim z|1u>Eo7M}@0&U}Nk9TSw?3tf!s@9&a?*;X*X6XG*9I-Ry*iF@*x*L-D1`vPkj*FEH zui^eR-tBgTCH(Ss%iy~aYchvzy7s{DsYE8Cr!5#4F0s4B+EV8NO4nCGShe|gYLFAi z3G!Fa%v!v@MAlkC5!rT8tFNG0m4r#1gJEG|;%L$)OTdL%DC61t+Lcmjjh#+5buuUS z;J}Ky+T1#Gt4PyF)*48g|MZJfF4brF(=)}1`+tx}6ciO5mas6Xk8CY6PTHSGzi=o0 z^2p6+PsVJ##v~U#EcF&CkD-C}hI?1vg0-wyNd1k^|MOq=yUC*?PW8oT^kGS8AP8n} zw6v55D2hG|t#5gzw~m`H~xX_K`E+xMdVUjYzRF#w(!@La@UZ5{D|! z{;kuG#TtK3U*7R>z-Ue!og*WU*EeEo)O*uMNkRcLp)TlbVDf zdjElKT}v38NL*1`ZB6z2*ZA{-&2oG)lt5yA=)qauLl{Qd^*c%cWam@joEmVgaCDL? zG>Eh{GfKdJi)`F^Vu1oWQrZqWD9L%U(K&z>^KSqromE)Tz!TGB-`=&PuBw2$EdZ}d z^r|iIBZPtF)t9>vj0j_&FK%rrB;mAjYf3gqK_q((q$?kBjv}33usRB0oeD1`Xc9+w zh^$=bB5N8^a~e^068_c0Dxx!2QE4BxJ#kQQ#kN$t&%!RNV8Kn&F-w^)U0{qh8pXi?7^0b4@pVusN2XNP76ORR%?23 z5xM+ychwOU%1|Sl{nWDBq{bU89M-^M+4~vVt=fIWFy~UJ_=eV z*r@&CoApRWGHW%1Q_W;cs( z4JzJCu!RUX5L@%eMXHS|#Xa3(b?)Ev49~+{;scgkvn#-;o(NsRB$77b?&BikIKMJL zf5xDa*!1|!83KytFhJ0?eWzVv_0_Z3FKJX5tfO=~@gGWtWq}pqg4FkHrSyxeY&0~o z+$ofIm*h1_8u0D6+s(WG<8Juy4>WduD9*~QQR+ZR@!uovuiK6l;lY|skDnBdt9^M; zF&N@;r`$xUBY7MJVl1O*wFbX0ay2pl=iM^3)5`fW{ZRq(c?esxow@6>9iB#Wrr37%!6hQ+8vW0=I zWX2J7BKZokN->X0U(KV<_)Fj~Gfov7$KL*`F`9=Q>l7WC<8>O;7$I$FfM31zL2c#j zqjxTn@F-tiN&*lS=}^QM0Cg#n)cPpS^a0gq9V&_~9SvnY9HZGJd__HQ6F-gO?-Co! z$`83Tj*i15qoCiQlD*<%;O7ubf%Pmj3gl$CrD0Lrj0nBa^X${JMlliKboSaSI*x?k zT9aQWgcl!dL*QjOgv5aj+>CAH%J(%@RaL7-O@MxO0Kt$6+i2NMG3p8*1Ee?!G)-lo zQFQr5M=(3p@ODbpF2FbnVD)F2WlxPF&7X>Y$}RJ6Kdk=${$HnAA4lYj%}H>0J-mh~ z0bI5qY>8X~?gQ&y9&`*M6-JSuz=Q;L@^{+Nj}MG47uP9@6OlqH9+Pu9Zsk%rfcr&d z=lH!8aGJj;>Jt$<(tJ=g|5B~eN?qjZ$PY9Ayg29Dp%W)I-dJ)ad7(ta4^T9{BIl8u zh0H3xym@3Tzn7c^p1=&5oL4S1R!%|(C8rSSEo4Id@^!71w8AAms3OA{F8BN1Zsyx> z{%8c69I@r?dWpJ`8F(p_#p}@@=Hny1A_lCSEoFDbXGF^^C^HJ55y4kTenD3tN^iZQ zaS!z75}`|`fCTx}z3f((^yfwiSprEbmsET?{G_+jPHyz|n8fdO+WWk0ud1rL*k(UW zA{gD7%qNeuOz>POD#K=b!3k+MsW`M}zZvztx_d8_lMl~DPA%d`?WGOJ)v7}R(`sn=?wEYmB{d!~O#Nq$sCQ zH*<3GT&}IjnNewBUb8Wvf7)8@k<|lIM*%S_h+DzLa4AfPIUw9V=!woj{a^!|8&%4o z-3qTxEx$vq3hX8fs+JhuNm4RZWS9y0B_lxTOG?5jhOm^cFFjNl*=XQ84Nu`Gq?F(? z`8REB&n;Q?+Sn#C;8@01inm9)U7-Z=%tmKw5Ov@jbMpTAmqj<@$ojp$^n6;?@mYH| z0vAw=Uh-2Q@<_e*&Fr1BVBFyL-_9SrI3Od->gx9E-fJ&EZ3m*Yq3>W&N3z&{6ab2M ztDr>hiA@EXk`Xw~$5m%0lyf79C=_KXi^3xE9cO6(n762d3nhOZLS}W7;5Bj46vMf*8NTsvJiKHM6=`C|V0o41na|3adt$my;fxpmry`m|Yd#5RiF zLM;O9BeLwS zPW05}2_wsu*(7m~FQ4m-9-~1)(JkW<3TR33{vjh7mJYsGKZ4!b9MXY;8=m1POsU3K zJ;g30*-UOmO&h$ZF!xbmq2Xw|q0s*R_rX^G`_n&uyzE!-0gn^?fx8B2XvJRRcc*jI zVk&|ySF@{RlqS})S~9(jq!!@q$fOSneepoC*yW!KIZX+AVBlTR1+ERQgw4g%qcM58D^X2m0|Dde?a-mCWf9Z z$EHpy*b{W~^NSNIZXNSr79^YP(NB%TfBXO;EfmmE&Yg+#65h(W}U(*swH`{B&g%4ZQi)i4=)%$RepO6uO2xXf(Qdcu$%ch2w7YSv`S(aG(4 zInABl_}u;hYfXbq2S1;Eu37mhbsb&vw!al8$7wFnG*B)--R`q9&F1}dc=FN7bLSt@ zYI*vW%2w|~hi3M6bUuDuw z*FIych9=t!H-pde@KKU&?9dZ{jvdlTF#;xs zM35sY;?ePFd>u*E`y6|%>~Fet8!QteWm4fMekCS_*BW=I@6RfLMN`f%`&B|;As35SrLhcE^7l6fDijp3>UD7-==`<(U=F~vcZG*rdrWJaqaw^X#dtokaV z7Y(zsFN&)sXJVnrte*8PR3_$;YKlQ2(^27kc;Rx~J3*q2)ug}Zeas>XZ}$&P1@byW_n6@xII1FHZAPNa!2_X)%+a5uu&#L%tx{ux z^#V~5*NrtXyucuwojZ1zQgNV5n4^0$fiFWxpDN!o_TAIL<7Z}Uksl*xZ3cXcXa^M6 zaJV_sBNT4w?MJ%bGt+Du%mi|*{I4fXo!VbTWk=qWPpoVur3NN6=$bwg6@Oq|jGm?a zbmKgSv%4KG^!BzP?<3b-ge$0M8yP4oX>60xUr;A0)J2S9?|eRbT$|D~pU}FQi^A%H zPjvmU0V8L&N`S2hbh$yMOf5Kn!1K)#*SZZmYd5D~nZBobFh8=>GOU$8&@%;&b(N0$ z48f68Dx$cPT%g4ODP&)6<-%!r@^(@#KbwGvZrj-3#@GWC9?2DjsY2>=HnB7j<#{^ ztKYxnmP))efFxi^cScgS!uqK9Td|JS=e5lyaevvI>PUlN$U;`}_~NLcGCTuX<6dFq zS0Jx!nY^@^evdc67)aRMINHWJCD-EP9BVQh3#y7jGmL9rDN`(sw}PM+^l0>kl2pzX zGiwj^<4sL}ByJcOD*W>1eUUFTqfTA8MX3n3u}16M!=eF|HEc6GPBnUn4KOO>%K?81 zFWwoHA~Av(mUzFxW;L&s%U_<1Eqb(B(`>yvCuP25IB_@{4*q1Ym{a_-IoVZraL2v> zW#It}%U5OU*cyS0`W$j`@uLr90*(&p^kM|MmTj-;rBcAWT8rSgJZ5pT`BF1i!3N`q zPa37>mTZjY*0$t+rm0T*KG=Vq6IFov6eBttv?5DTihJbDYt%cr zoe8^oAa$SBRM&|X+Q`_WZHqe|{p=p!4B)X%$BtQr_7oOf72FUY(4ea?ercB>Q#>lL z(VL+N;^l}CKuGFKmqt>GNO(72Kcj!>)zefqvckI_jH`19L%}UxU^*CYs+lPm1yjUB zfUJC$v*hG(ZOq~LmvQ6}=uaFERw1sFJURJaH3aaIY|FjwtODpjOFCbe2-c+<$%-=9 zT#;F5gr`da6!;v4<6MyMOQ-pwZp|>)a8{qRb6^3>}>AhN_*Fx1C&?Z3#hSZWOBsOUX2^qPo5&({X zHX?7-Uf zM81nXXg5Z@Ra2|b#bI?im!EIS)IT%k*lztPm|)8J+#|JKh+B~ymoaVeuI+m<5iw7z2&rEH!KAoP@#8gyX$mJwgcL7a2upw} zHFmg7E@L?uEcSszpzquIQ)AU1XV7h!Zcwv&y?xY_ycDmh|%>ufv zt#Oi8*kJD;QN1zeqO(l|V=UkO^Cpyh+maKw7)0;oRrUr0GZLT&W)=;+gZGecY-)NI zDARDUct@ij?dnwi$M6Kv&=e-0+3RR{_w+>}@(4zg#FMeiX~zb!A9#}6h5v?64*}KF z4~?lhM|E^sgcua6k}OO`Tpnm#GhNab9P}!4WkS1HnMJK5h>+aPcI43pIuJ`B zJ4Pdn%-%wvfOMc|B7lB3h)Z<7;K}J2{L+x09l$K6u6DCc>4O>%4FTjagh}jL?+Wvy zBJ2|&LF8Qx7`#+dTErihUK4!i_lNUa+_`;QqqHL*X+A&j+USDbL^9`NvPSJM}KJhDm>EAUqrn3>`aYHV!bio1zx3fUs$R=%6T;ic!H($?`*aVJ+it60D zCHjkh*omZZaghUZtGA_=*%tvF7*c$W#O~@5-i`3mC8D$u>5X=>;7_cH(edxEaSvtb4z?l6{}u~aK0Kfd-oxYvcBT-G<`22 zLFPndYpb^LL6JsNoh~U=&r%t_{G`GTHGDs9e6pzm&U5nvdWl?0W*bT2!efxYoEMIo z`o?|;LhR9>%MC!Bmm(2fNdIxt>l&z5CUg#s#+?5)Y(z!JdsjAuO4-Yy%HgP9HsJJF z#tGF=A85Hktuje5zDp}xys7U)PyX*KJT*{%@Xp=4rK3vx+`2ex0o~SoT1@ed`8*C^ zL0q=aC5 zV>ObYgcX+K!uG?rw$)#J>iP5MR)x>8K3tFKltRs47h5WjqhnnST1Bx-r4fc}P;D@v zo#a44iHi;UNL5fkZt~{kdvDAuvY!F86C6|6(JM%zA@^0b@+%3SPs5bCLC zW+*H4>mU|}M+cvvM3h8S9xS4ud+;X)qDSP1^p}Wa3Cb67yac&AtI%(wtuY5_avQVh zVyq`W_x7(f&k7SIc?=RJMDUKtq68zA{5t7!_^mFW7|Xf>t-X}9wFx5=;*;*xR;;u* zK+>e#ydr4Bx_9f4%}DM4a>&Au0j8bH7(%d6It4(kcHcCKE ziDkf8r5MSHnO1@oh6u|A2i~SttGSjZUE*to$C(2Si=ypaHsifH&viq#0^mx!HX?UR zm^4jf$)vh>C?-|ULt=@1mUsW1cFnhL%b+j3BPobrx@2Jbr+#U)|GOkA>j)=9-%+D7 zMX@+bh3QQ~cP0(}a#>V%1v%WGS+u$~yc&hAq9T54HhHS9)vQ1+=F}Kc_MK69eRF=M zmM#WRPC=jLjVDQtB>=u}TJ@h1Pr|vDN8j#jHiPy!m6hZzlk9p0#P6g!`FS;LBa36; zS}#s?;#v%uR;EwFRGsEUbe9y{v~ZvYGDUsD#ECV<(HlxdZzt;om3kT>zrhk{6?K38 zjNr{X$@W+*M2e(T2t!CrXh=k{h+jEY#giigKv*jJQEPJw{}A!xIWP^Gbr%fzdoJFd zLt4sh;aY3s6gCsSL^=?C1jpMo2Ak!DoA;e@cjy{$GfB~;e2O*Vi?wOpS|PtfT`&1h z9lKrd~)W$^c2=6f+)eWg*ptG^p&6qA?F5RY2V+l3_*6l{YmAzyDs?#~@(f z{7qxJqS1PvR5TCL8Oj@uYhhpxAvu(+uUX&qAG-g>*UK6%$dtP)d)S_Ih|Q9-3%* zp>xR9SJQ>52xt>Tj5Fb>7RijlCvqpmTqLR-f@MJ?{cp+gU2b1%znz{}~~ zrBT*FmZHSpOO2Q|Mn6@tJpT`u|Gv6ARUg-GvA`~DeeoscPm))J9cYor&tn~G@L0@e zY~{qtrpp%w`^OH#j+t}%HAjo{{Jfq=w9HX7>nz!FF<9`8XzKzJg`D+D_hvY!pcPZO z#k5Zk-^UmqLnF@Go1feC)!9u08!0K}Aut6>*Wa5xb?Ve2Nsx3Z%+mkT)!&58@V3Q;b=tB`4}RuyChda-Ev?FaVwyC6T62r z0*dv?p|HfRpck5F!}`X?AvhB7JBS*Su{}WqXsK&NqFXwr=73yA;hC=Q@!|BuvF_|E zopsfX!43$0QXgIl|BL_+>6@g*fJUbSHJxk{GZono=mwuGg(~C>*}OFs@5%oNs5H%-E11o1v~VBQz&6TliJoXogUC$gUSZg$YUZtl{pn z9T%LB*=doqo*S!>wLPZ_ov`z)aouReqG_`sXFc@yL-G(#uFI<7#R~h!E)gJyWh-2+ ztQLWc9NoD(IVT;+wA9_W@zRuoU4tc+1x}T}$LA<3-7N9}P9@=UL4zn!ALpub$x8et z#hqkRz*RoUwS9eUG3B}>(sESBK3Lv?1Ou8r$+oIn9$Qmvxd7RiT<_umyjIca_Ijd; z3o$duwSd?)xbmJ{ioA1rw+aS+zbTC?>cshLiQtHz<`uE+2oNWJJyxZl{92;G1K_zC zo3C2vP%Ln?W1LrN!a{V$>PrVGx?FM@R%NjM=76$F^fctcXItua?bx;JHnY&cXi4>O zA7L31fuUyJaU)w-G8n(3VS@nk)OYN1T^Mk9+thfAqsS8#)tFE@=$5s5_|4+jkAB>xck@o0nBqdVVIuy0}EoC4IK%T&& zV@x__bW#epC$1AU=X{*|;)(K{#zT^hg9=b1cZPLuY#Nf)DuE6B43}m!IEeaz*=-p^<8W#q1?oN-Po(uPFWehn)=THPB-a9xH>6CW>Si<3${J5 zG_fDZnd7X22=@!0tjnGnHs6_s=Bgz$Xt%dl-x{0wcs%UhJlf4pZ#=0U6?qq`=DBF% z^6NIamm!$MawVP8)+{$vlSSf%VOpX*2&laanQDS>lJc1^urx<|(!&^fjqx*lBKvW> z0|2UOObMeT5@kFH3H@0$F}oeaPC>az zkfOsFf1bTD-I<;L;k0!|nGpcnxjp5-m*2(rP?&#?N7T#PLYGz zrI3ak{ZpnkP_iC|BB?62u6mr$^7bV}usFjG&>7o2zc-X~p`VJ1?*og!H~ltX%DzB1 zzvqVZD-Ec76E{v_>{P@bg(AvKHH{Q`{PD%>f8;`5V4myuWI_=@vkV28oBbX-9oZ^z zsMRfQK@>U9|HNd<7H^pG>w`q{M;n9!3kV6=u~@dEv^>K zz3(zs>t=h-J{ea1CKBXXfbjmDsdft{QHXivl^-mAO7P8|Lb^<-wUckL|l|mjAK2be9>Y>k?4k(6Aiz zA*#e{u3G6l%dvJH^3ft1$hCS`p6$EN*>4@MX|l@Fbe7lUTZD8fSgRlQghl;ut$|jy z3zi^g$@hU)8m>&uArDCyc~85!NOnu=q7)G7T<*7P+4K`3m;U?$S7nA_Sj=ZdI=zq7 z7wcIO z@!N`FxA;#{h5BkoRU=S-#|H7~dS#uLG73GpTYQ3R^OsG0jJ%5?^$r|>(W_Ga!B)dl zOyy<+_vEzmOn7Ti{1|P12oo$C>3!`<=Hwykstuv6MT`O_$62VPt`G*eBX=O=vd3;< ze-3^jp`lHH3+c*wMrB)AxAE4&O%F=kG~v@J>J2}}8LYE=bPQ&`h%kjYlqM1y&Ye38 zBvv51a?T5hYwAe4fMYDfZu8M!ryS}rQAHbU;VN|qV6X^gm`^#U!jC?twRK*`s5>Ij=P__(j0`(S~UWw=2_eiFK* zF3Idc8~CTmQ>Tiaxb`z+5u^$4ErXr_MQD08WTvpQjB1-P=<=lGf^m^DjDxYS6VPfv z`nI_D?wBtn3yGpZ>Ax(*MebYI-i0qCt+OPF@MYFseK`e0UH}P>D5(e;g%Vu!>bXPw zn3K^}re`exFF4dxek^LCl;s0wNtRM>?8sqCO4o<+!K5%nzs)59K|Vqx)6(RNqf zDt@_mWeNVrk(ta5yZ=Da*#qSUNJ2)Zb~fwJHM0G+LCMRF&?}l+DN>7ygqdRz*NVBt z9Xc6q5Rur)V@CflZ~Y2QovRQK0t^ZU z$~#&>Mz3h_!O}!-EJj=f)nXuHy~PDUBKHM=Jn`O=!YQ-WIYEIekE+OqO`6)RA}X8e zSv;9yOd^Ljy~T+8-n8)A^W z?0Zas+{{PF;GnkkBYXJ1OG)vQgMbh@fkI&^=$Ft8bV&>i?sUJj0Kyj&3D!nDBSY*U-~$aJ^C zd@PC);i5PLM9xD}+(h6llpZk>bt1YqDW&O-Dr0f$5o|nBuqc!kIRBm*o1UG5-J59r zuve<8j^5vTi7s3`rTuBC$y*b|FHPKKmNnI=kDqyzxUI;4P=W}Z{W2l==e#j8$X-9IrBA>sF0^%%lw zh$7xFH4+XFsBV+fHx2efF4KKZiEDO(#Y`KBuWW9Y0>yoiSEg3 zrYG(`^DfV5B?u}ds1W{XAX73{ESBL|6C|^YOg&IYA7C#rTDgs|JSjyO>I5NoZLj3y z`Y|CJ_Sa7~4MvSOj-eZ#y=DfG7M&ASRB!~Q{P~oVDV4d7p`sv{oSC(;HMVR;-dK@G znE{nCwYMa&O zyvRDl4#?0rZekYv*4fKzuuR7kM8rZx=an;oFm$ri z!DLY0o{6tAi5eXi%d32=e8|NY^dQYW>{KnWT@e6TR#~b?n+GE`0&9+*Y_a#Jp9C;} zI7#dAfOdNc=Smvdus2l`?0)cruS0v)F`xUxWmV&~J1Wwx%tY!XL3I%LYGrvO+rHi4-YzrHiw z9`B*tX~f!87&sYg3=PE*b26+nGcP=brG3*Zqt_u>*rFkjfmiO9F#({2amH5$3Bb2z zO;BB)*bWTp{-}{Py{W#<4s7i%8D6Nb2=!bAkcy8| zCar$rmsZp7Kct9z8nGxK3mxJgvqr$a9fNCtBZHBdTD`Uh*+l~rgd}d~u3d$~&=MW< z&W2LwNFnEN5k**NMVYI`GE%$r&0qdDJR*HdzrKCvkPP>(uIs4vD}pW5s@q|2pf0Sn zAae)|#wPvftif%nIT&U7WCQnDlM<_E+m@Jgo5-CX>|s(jh7(vWk&4&4881CDr%vpU zu;z{&)G0hgapkaKl@hhNG72`tR(ru58D;e58X2*6@v<>nIig5U7j&uUGEPvQzd7aDndI{Kk@GGuey1Q7RR!S)!)Br zk>HBJ_!GYpx1QL~05X1QnPk96%4}zNf%M0qYFyL$!8I~58&<>0Ow`J#9S*D1K!oej zm-Dh!v{`Tz4?5>k;2fne1gBFF+0d~48|@Q(#-0G(EcjpUg9=8<7xI7UVAci}F&>Me zfTOBl3^`qG9{$`wOa$;l8YbhkIiO$EdDNe6Jaq0PdxqvHqO)KOMbgIFuvw{DowqA8 z?TPKk&MjW+T8*iw$Xu8`Jno28)yFB8P*lz)_??O9O5R6=OoFIB>gg%HO%BAIU}t1szADmQ%A!?YJckA@dbg;M*aN#g~n%M4|x9r zYpjZ*BgP^(4J)H7_+6W&x@7~kFfb+ zUCtf=6A}CUQTx9j(BV@bEv~5OaJFV{6ti0B-`IjevJzRcdVO~Ev*lK1O_!fkv(^zF z30_9wfkc)#yAP98hv-`sdD+jbFsjTSLx>IrDoCPf&JtchJ*qewymR*A*#}g8PYFn4 z-(Jfd7R;Y=;ol@ES|21R-eK-g$l_y^83U+Y@$Ux9SWJY{+`4rRx_&d0Vi+S|Mmt&J&N)fN1}pSC)cv{UgDz<~ z$Ge7d+zCMTt`71hO6pKrRvANq7dL|@v{%2SW%?S|5+Cv!$pJU)54-8%8U`)OT~axC zVKvkSi6zv*LDwDle%7~o9Z%I5Ve&d@VYXY%r3XshHC!=_{^--ElSgBv#6=*v(k%n% zRaJyKS}@_ohy{9gN%#_HuBBc9=_X%mokxsNPZiJPGYM5p{{ONj{so;ivS`x~R6*6X zJ{m*2rNX2rS(x1cIO!n_BFw~KdCbkNFgG2BP7zi^A1zcH%ZG>>;S>0?T0g}~sa?2}iN)jUk+$giwgd0sPyATkueP}}A6+fhYr|3&&anv5h>MR$l zRGH}ULPqFY6?)}_oGR+-xf}g6N;~36w46odOXNR3izO35H{vJ$=N%|fmGyUEAbXRP z9ZEX{5uf^{p@cDpxG#k`fJu1L2^qjKWd^1W&ef~!RkgrX^l`n*G8v{GU#)Qrk9 zR}3LqC}R$s(rQj^4DD)PV{+TA#_~q_v@aJLDUCFiHogQMJ4=-5w}jgKI@D*diUNvx!fTHF+Qwd@>>;{%p7^w>=SF0)?{qnqhnLCKI$;VTZCL6;tGOaHuS z>T-Gu?4@XjqV^qV-BOa%S*aB$P^6J20IvwuyGBD-$P(Pl3AZn^W^H_*}eah6&qoK77W{-Kf z13GE{frk0uDKdMpAv!tlfgngZMriJ=c;wi z@xQK7-*9$RYCEd8+X`P^(=)Md8G{rhf|8PHD2tl1%b+~w>t^9H`zsk$pbSqiJqV19 z634=NpB0Ql`!1)hi-`Hl^&K0_G6lt=a>jw)n4mF&2R~flGn~=Y$lw3OFK?f}l1zws z9Q!+yl7w}VQv5z|hlh0rX{~5&k%wjt1m@(|Dj97%f6JDuGkfdy_ifmbJU>HK%j|QQ z2=1&3E8qdJME<(<+8n>rOPia1d_m~5cdpV}eo`6g@SwVp*5*g+Mm~ADk;xq@yMJ9~ z-Pw9Qpk85Sm_JOJsfZDqOCD7J{(e@aIb&6nf7dfe}yZ>{F4e zB1cOG=oaNX*qx|9fr?tpUo#dJ5?0>II+A(>fA`p6Ydup;e7@ZN2>tFpRBh(M3*|iE z&a%+s^UAo!S6y0v;$b4&yl&j!V{L4@4Qwul;T}>$S+B&q(Hic}9^+U84u77P1NBPF#htkX{VmE-cO96y}yytdZwE^_kSItESO$`=Z z;O8!_JmA<|N&w#ftG7+Z{7U|M+fJQ2CA#IGFngxWZH|uP%URo(5(C9JM!s}b5bryX zYKE^Z8{-qd632fWkIbJ)Oy?GoZj}eFN@=Ae?xSvXZ>HAkZsf6$qzXQ06P69EOh92w z+tz=BFV6l|ZPyDOq}u*-{bdzx9A|xNC}w2pWAo{bd~$uDAPNJnV}3jp08wp;IcIH$ zZ$qA_b8^fgKJH-^BgdKw42OqRM5;uWDZn*TFC_DT?$z;1U`X_IQXwQanXripEK#N) zFw)J+rT-r4LLRJ7WF^SYDKf?TjT&|N!I+BTQpVq))e*{<7HU3oU}a2dp^e6N`2pNi zwFUQwSVyB3(j;NCQQ4V*#|F6`BD1Gp#0u0)TS!ufA`r|TY(A_qMfA{#=$l0=l(X*F z791C5LnLxLrnbubuGctYHjA^b7^S^5bG%IW4g=k)O%CWA2|1PNZr9@Ze_*igo7yEU zp(lgk47haZUVh(ZJ<*z?%#}57z|q11B3g`3{PN!Z9|uVAX!P-m2kCF$`*{PUmIF8` zC7ZPZ#8MKPH_jWGpuP7?0aAQZ4PrMmjW)O`IB z@;aYXd4B7;6jwOHB77l-NZ&&y-z&}WL6O^FuG2Nim(oZ0{{?T&U|Z|Ci^LF3B7S=! z9k$6tV!^veIcl+r4>pHNjcd2?Zc6fH$7dS_y<~8OhhsMB{pM+wx7F|x_{r=N$tWhY z0svx{-EbfK=JjkW=O@zbzg-A^|A+SdqkEtCtz~!|W=mU|ppl;|DJ4%BgH0O&S|E2_(k96vvv8dKs@?gkQ*<``^QKSl8Wsm-hPEEmd#Py`N=LQ*b6 z(@N0rVHqCVXX?c2sgozO;1_mMUo(f4KfGT-hYlUmIM`>7jmD9`%k$nQr~dFC^1Lp8 zljnWWqDAlsUEPCMdRf)|fnf~^e!5$VVAiQG7LT#2qnxCdGez9!>?`L8id)m<4TpEtZ1l;k)^f<-hjoVA0GlE7PXA1Ku_99(_Dz*1C2t2v`NLMj-dulM zlO@w%rC~>aEu`A}544&?>zK*`4qvkxxc93OyZ1f&>lkI!+Mi<@DkU}^ux~$p+kV>c zK2SM=LX(Bq_(WQjSKUdIVXpX#S@Hi1n~1lS6~5oCvJ_(f{WX1Ly=r8g%sCTs4z!>s zBQ!&m;y z)XHo5%{RZ=JM>x3R3=4oy0;Fd*c9q5#XyDsePsQY-Yj_Zx`$2*M@$1HCu7h@(M8D! zQy;}mWbwMfsxY-5^|o9^$7u3DBI$p-il*Fc7~QP%$1*2jjb_cU*;dKMRm8@;#HEcf?*q9hYq4WuNYwFsxJdxPM5UBFsGF z^S8urUj8_1p#_6F;NiV=0b*mS5Y3WX@h$2`$~E?Re^u4+>th(IELllXroVf)g>M-^ z=OWD*@6vGPm+|ST=Kq8rMCxRJKW~F3K>hpH9i2}fA>=<939Zy+$HxJ|BOOu9z4)vY zjiduTo`!N&JzSzLk$77VgI$4i3JUP>IB2M#Gg$8gX(p-Fmf-XYb!K;0_op>g{fAecw9>3RS=wU6 zh-C*htJ&{AU^Vl|Twe$`HG0Ig2>~sp4u*n)jjh z-M{2;g1TrkaM8s{vKLWP7+mYS2^o!IRu_1djNl-Ou|M~*hlht=sTVs9#)z9*t|Jjc zv#GDVPU&Kle|7izC5DBgCA5zl0=-bjv}uUyrQsGQ0ec7bIgRpVqQ*%Uh~y>->qspR zkmQYUM7ox{3FCDqTx%l9!J=|Q`%W1KJ9^doW#XuN#kS}aVGElvT)FqbxaADLnaBhO z<#(k6|My1YpL*<_J-VLl$XCJIUvbB{b{??Z0;&}muZSv8GF&agh9c0nW_-cVMQAX^ zsVt7TUm~55N_LqG-A(BtJDN#f*SAaJ4Kj%$No`@p%!;FE&MS*JcQ#i&fs0GNI9ai zyPU|KlO3UdGIDKpmsH|oi)}|-4rZ6hjPs3+)J_d73L1E@^8R9(BFrONS`Eo5XIkOc z%1mux{!J=)mlo)$#3i%RO_$?eSW~Xir%#_36;u}!%#;ZnBk0V3YX&6}9SmnIeF*~L zFGkI_s%DtcJV=HwH;*$q3_bzj-7vIM{Fz%TzSx8mCw0d8vaA;mMlZ}|%2d*cq08OY zD2A+bR6V=E)pxL$kFnKVHHAVeEkrHvAt!^TrPr>^?M97SRCdy^K1)Uwjb1`kB%fXcmB1O7MZPJ$RW#!L zY-kElpzHK&@3M`Y#8cqTO1GAX8NV&#or z?&X`xbl!yv>+@q~?XP}U(uc$N{Zn%B@EA~V$HYcjn2{|$wfLRl<3Esj(N_d$gy)Qv z0m-aA5n+ndT!0M(H6J2C=M&^vaObml$%?K)UalA@A=+^}VJ*xVU@68Kag&d&ee+nJ zZzBsY)XkDg$EUV?=4xV1g*w9hDZ5!R4o=z?_S2R^DW)ndR0K)Fl{YX6+ME?-=_NzW z_y|J9J6qpqtDjH0+gH!ah+$G66$-*A_$OzGLT|ZbV~_JEo?MPdJqmp+XgXa-GUUB` zaPTgXXF%&4gVI9bY8iR~o%~|P>PHIvzBTkdEEymC`~W31PK2){2H;&`Ku6>`gyI+2 zs4F90<*5&mo-QG8xW*KBLZgpLAWPGei%!=7UXtidH{6eJ!llNC<^8TvpTYZ`E}{;Z zyUI52N7_MBq;S#%AwU}Fa_9TT2!lW8F*KpPV9L1u8X6kD zk$1Z^ce7n<#Np_ZX_b55qe)=gE;sj#b?J+AGv@R0%0W%@n~r<4m5(Hi3y+Ko^yKlt zel3bZFPpz!d>!RTH)PS0GKGwGyTidozw{bA)(Dn{CO+{qiFY}uS(U%3R74{%3@tW~ zQ))SjzX7EH%kj+e#FfuE^2O6xf8;yIyt97|JlJB^N37$&H-UH9^2zlG+Ltnin^Qd> zLwhiBpEjV`)0{~I-rFu)>~cJ)1t^Bw4O-lOWAV$4Vi^+mcQi7r3UP(Qq0kC7+j6gr zo_9VF8v+~|$0(u%_q*$ngc|*Dqpd18El~uR(V_M&PjhMJ`jAp%<`hjC&DPq;Y78*7A5-os|(*Av@B3XdcRVnN}><-r7aZqs@1)Je8=)7=D zvmx6E&-rU@mp=_#A3l!zCpOp8dfy-x$rKj$vQDz9or!M#RehBSLX|Vp-=!N`F2M6o zBv;FOwhZQ!c{QN@v`P{_B5na}BvM%dG6=)lt@-fr!K$Z&5^MI z!ii8{PMemul9oe+-hsRwQS0Lq`Ks7g-D&{J!5&eiYdfajkak$jvBcdi1rTGzqJw#6 zYnS}Gz~p*JfMB*Fwv!lZDxrMIpaqDH&-2R_O8g^as5q}g8784CJCsfz(+_<(jZ z9@c%jnEm<22T;SQM&i?UcVgdgHm9TLwQ{O+wwfgE9}A zgGiDg`*oT~v^@1>eYW_C<3d8AimgF?%y-tt27@YpzmK()bB> z4DvbvTtoml@5AWv`m@y$VWl?x&|LSuSV zVq0^?Wy(4KMfOHky7P%Ry}qEn$ly?V;6xj;Oa{BCXiI`5s}RwK>l6#I#5+ zfzeQAvG}YhgoH%9cYc}9f#b)HF`6U&NhFtoh)dW+B-6QxoFBBi>D`lVZr{o10P%2h z_EK#6pcemmBi=-aes&ob3uMK>lgH&9z&vqmN@0gh@80+Bdq=sHge)@(x0a>$tnlSx zq9Ks=3nUtH}v@c(*fEv>}xL6?W%5ir6lQ^NAO-8Z(3uOrhrY7 z`ZM>Tc%h$Buu@jJ8A`zM-$`~5)q$!}Y|2_pj{ytjiqmVA1z1?W< zF*WOwh90DRjs%)vHrU zP1fdy_NWsf*7H zRNSk}*Th^Cu=V?{+0%IR;=4q!r+(RS9l2kAWL0kLk_ZBq?Dl8%<~%Q*p?O zn@QX_K1vErNwLg=dgJgvK1{*6D>?%iJ^2v;2LzU@=7y z(4P(xLp(&rxdEI&WQZh*%mzG;GfG>A4>PdyW$&dDT}_JwLnRC+YBX(K%!q2?0IJQ=_e_zIpYy z$`fv~nF+w4*uOADU1J|wBkg1`VFewQxQUNRj+{&NyR|ZyNobcw`7eZill-Gkf^go= z|GF9m(13{9L?q^-mgW zSE>{uGWbB*=8sG3245?8c6hnhxG$;>o|Fvrct)1un>TM(W$%OMXLw_Vj8PYv62s_3 z3pU8~-5m4&*qTKTkAYqEKS(VfZoAn?$=jzdP%^ZWVs#|5ylf~Tkms((It@&y@&B>* z9&kPHZT$b&c8+XE9kX*}Q$|*lj6>Ob7SXXvi3Uo^JebD%QGYO8Mbcin-km@3}G6p zfsVP(AC<}-^e(_u%U>x6a2XpLC*RG@{V&WwWqA&*#@nj}6NLX4`#=3Z1KI$oJOM?e zg5gpjVWw3-v;9gnkjQ`~0U(>`LYVV7idp-_)*%*Z{9SC?lw$)G`pqvO0=?yhsg zIP*&58M{vwx80><{`RQkPe|)39$s!52{uC2O>!{LBFOu*b!r{fQ#mk5%e$j~f}x~P zM}01QBo2P*5bykL87WzeFP9j`&eeFC&1#`|nAslb@R>p{0aB^e8eL}mU6(syXR&Tc z(SU338sY~Jy8kXR4av^AJ3VNF!~iwX>HR+S(Ho0VA}Hf-B53m>Q(G>dM}AGpa*vE) zbF-88<+Mt=Vdne73D3R@CV+$2b3k4OxB+|Gs_u)|!8YZV2f}M$or|R(UZ`?8%SoIV>dgEXrX$0_&agFwBhdr-VuSO}7km zgE@DHJEcnefW-9mxp(CiO_uf*4-GNe^P;%DTscPr7nfN0_{D#^^!(wLP9zdGS(9dU z9DX{wx@jtEc0RxOT!8iNkSpe9OatEFKYEAS$)+7fX&;f)0zH3=Tjw7at$*tz4U-nQ z_paMa;D9@V_o14K-qIEko5aD0(p~Ze>7_@91rGZ___NYT*)}I)L#WY(0;hTPLrgL{ zRUv~le3~=@WYOyHwlm|Teti%siT4xu^9x^@HFXj@dngYe=SCUgEdey_=k#ffBqp<8 z6^i=47!$_0a^T-Ei@|lAcR6pl6cgih=1dMurL>G& zB%46?2X|hPokd*QKVW3vRr+ory~Pl{_|sQ^#&S9%c+GIvN+bqbv!R6tx~|N8K%r{^`9=D~*k?bOda=98R& zFmhA*nH{@oD)a-u6PcoE#Hfqwr!o~A(e3%!zp=Hur2f;bn0b4hTmHGYQU8jofhi3w zA1&@1RhBxd`gx^4anSWoY8~7=roS|=2Ul|SoJLAic(p_p)}u#{`Y&sJ!L){R@E*7& z;CDWD4fIr%5^!hDT$zc$aa+#jD1E*V&KY6Nb7UR-o=;I0& zo-kwdz%suP->OUF$lfCx{rUpvK_&? zfAil!z216x^{Q9piEqir5ckR~eJaP3V(X+zk#kC%g7Eb2mHljkwVx@w3>P-lQ#%)A zn>t&gYMK!xMRi#0A;eweiJiT;bBV;1&hsCz-1L++6j;L^586ZqE21YO5x*W~tv`AX z#ReT9a%BD1I6EXphPguIgCkK8&vs=T()8)H58fp3$qh+^xxtQBC>objccK==Su2VU zZbgw_OE$XjDws-SG>vqG*$HFu8Hrx3&qEKgLb0=rtQvJw^s4>mStKh<4lC%E%*H^% z^zKyZiA&Z|NxX=Skq%RfUKV^*vigu4f@i@vkpdXi+V{#)x&E2IAmi2zq2~zf+glk` zCZkNLU}Tb-0P*{~PK6O@uN_D3Tp@=~Hk9!s+E*{Fd_QytEq@I_vESfa`PK~Iu9hK# z_vpr(KNsz*$hj#c5!?l@Y8mr{%ZP*TKA8Nztx+RCmi0Wb7Rdv*hCp8s!vB`K(EL@L zQ}w%69GyIAQgm+3;pkLa00~ax&&myeoc~*HfELv^KzmLGUJnx?#trtaxlvjaW$S1S zzjqGn3ylB_eay;GZP3_r`Ho9xS8tYix9+q9zkdiPMCC|*Roja`_2Na5Ag3hLIYQtK5 zF~OkH^+P*FQy>m6v8GU`M?UP$5CG|wB|8M2`SWthu*dF$2mIdm^_}1wA6p&wXLpS; zb4qtRcL<2W7YRPtwMle_%Hss_m!Cw=L%WTDX_N(*uml;3--z2Qh0iExsu+A9L%Vy? z0?Tx1w~XQD5idRpD1@f7ZE}AA`%&dTt!jvrTxqP~Q=_XqhagYe?OWqoB_Gqq-db`> z*S@gVz=qK)-NO%c*VGhd|KE_dz5%WN5})BIjT9`ml(70Pg58qcBe#{H>vfcsp6dGw zYF`vD%kEL>&6ykG{sZCz^d@qEQL(pbduD8Pz!b4c zbmE((=NH4dIMFo>Y4C*=rq7j;+)PIHo*c$iLmF>Lw`Wg0I;RGVU!C~-x*+ZR@d;y5 zWT9vb6yF6?#`vR1Uov*aO?fsR@$57ZGp;%H@8l|@(8wqWYumg=&%bRe zS1*q4qTDBO&$W%+o-DUaDA5Z%UyT*+mQA(PJ)nUnkcz~}-~#l*eQX$u`9zy=RS>eJ z-Dl*iuW&eC$$d%67K)dpRA8K25`#sn=-w$+7PaFs$GXhW^G9HBhUH52fEMP-9u}bi z0U5siNP{^u50*~bp?JAWjwjFLP@?~Qf5J(-u)8j<=;Ap4tal&m5}9-uk|ja!I>J(Q zOyr~-U%v}AY;=)d$@CID$y^6JcWtt>D|Xllh(fCGCF521JF<9$7nHz@FMOe)^ZXNW zwjqu32LMlHm^-CwPk~QFsO;gf0$JwNfnnQzJPS-f`5(IrNP|VlQY2+t3Rc4@e2yE2 zp?WTNV*hqf$#VkQzdCP4^4;2s6MY#V<0`nqrhSU}+|~zWZrZoUYU?}vLwCx>D(4 zDe%tu`H4_K(jXDsgghKHaOT-0ePX-Bb;ptYE75((3xNZ4>H%}8O7Si0^|{qR>Wbz6 z!rZ$btB$l+^h%_l(=uM2#-NX-Q!Xx-RBAgryTi?EC_?vvEgEuZlETchZcS5)x_-Z# zo4Gve>Y8)?mzOab-A(&!91(>~e^wU#OBK#wJI?L#-GxdX{a$AMtyWiz{Omt3Ecsy# zMK$FHb1g>Hx6=&GvE8kudbj_Pag^naI#4yvK#yKKbOVuyqV5u(IB^DN$!h{5@EqM( zN@ckuNSDTUd?#@`aa`TadBR$U?BF=__LGQ2a&GrpZ(n*54 zh~^Qe-!F)48`_R2dc&tvZJSGE%$iPLZ&s&Khu@^4{nA(T{XdQnFUez}Y!IPy+FMhx z7_!J4tZTAn;Jv$d96XaM-o}s%5oPN7N`_Z~Y(JE3h z19hI>IQ;L_5S)G2}~E1^712zEWwjg=$HkbCPKSs&l5IxfTLzdq{kmtwPo z)-@)7L965BOSE`@b?j%KL!6UljKCQmylhQ=+w=LoP48-#w!XPFPt*xaKMCr#51z)$ z{KAz{Nk-P=eN%$ov>C!>nvoaR%i*H=i5E_PZEoEjJ4b4v%%CLw>+8P$!ird_t^_5cd`<6MOK`cc!miN)iBsqS953OfZvN(o4q?%#3P3Z~b?UP8oxrExWZp zqhx*mf-Qj-nsc$-adcZ>dPiR6b(iwGVNq@Hy73n`k$H&JD`g7hiWqJRW4!IhwG;g=w zW!GyL9ZZjx$Wf$&@wxT6QSrj;^WnQ!18~E{SR}SL2}wl*)piWz3s<%hbB*?46Rh-j zHeNz%Umoewq$cehmu2fO*bDd1zEWPT1z_XocV1F$HQXao8n^)Q%Zl(*QgvV*g%9Mo zhAJ2z+#1AO_&}DE@!Ho11Sluev8Uk!{PZ%H9BB>IXBH6v2|TvK-RnP%5NJQe^#2qER*Zl+K`mSPc8infOL$C1M)meC|K^8-=+ zi4juc0TkrT<biB4>s|bOQX@N&S`9o%%ln?fpLPcLuf^_r&1X6HHX=vdMK?HB ze8rNSSE&zL9_WW1Rst+}wUVeR%4VuDka~!fc-$S`z#}hT9w_Q$SD}Ig6XfM{kX6Ba zy@VJSJ#@&5B+)~IaVs$uiKvqM$Q}hXvjtA#NW4SON3s4N{iY+#l1Wi=G!(L1?%-p#iShmLJ8DUMf9Z|JPAB+QMPbE51QO18 zZT53&UZWo^-X7JRDHJBj%6%G`dX8YKaJ+`I%c|lPHKO{7S;k!_=y8fdfAn45=_O6S z{kAI_lS_(?V<$|QA$1Yh{ujP%R#gi_qthfV0Gr-4sy5nxPp z6@iZg8`!@-FjF)TQq2jOUPSb^*n(m@9y0pgkPb2q@~2k&(x+Crl%S~8G@?s@XbNS( zH?@kWSt?4_f0p4H(klyhLGDOc+sL{bnIe_QTR#V}+yD1;LA>ekB({LumaswzOBPv$ z{5&mHIZ^A4L-W`}6mtUFkVBV#!aB_;T(XPtsbR@T!ALjHv1odEMM*>wA3p8JH$3oq z*_z3R8wP}MkcR|~LzTo(=r0Cj!YsmqGpt$~W;cvtsht`gDE^a$!CB{jlCEj;&hEjyHXQ!QD zs#=f`_$+MkJkK0Ca-`=w_C-J7DXeuu`NjmJ#z*m{%sUWBnqLwVo(N7-^A0{)uBTNd zY2&7MRV1dFe@N5{lKhydCPBS$0!EV9fJklQ@y2lUGv_-_muM4A>2uZ%jn@N(?P@5B zAoyHulk3hW9Bl?P%vt#I_IB56Lw1WLgl7e*-6lE2XOIx@`-;|FAZ1hg$?D75J(By` zVl2r<{ha{CA4JTC%!Ehfv%F7|biE%!UlcqsDIajPt{tH0uW}1!9^YQGC(=UX8k4Ibg)c090E;PqF8-=~k3%wSGYd^eh(zni zlSM1II3SPfO`8bACBRu`q>P>bWEy3`AQfdb?+k6%qnyZp*ucB9)<;l$D-RhbUECBO2>^F@VA_wr9xG zQxeqay3z7sR8-^m>&yT->Yig#6bvNHMWXa7YDgPOfWwAIAPYK_bSI*~2R3UjzO`ID z-{46yWXjOh^74ziAImHH5A;)SSK>s1pq|!juKf-_!uyg8jrOZ%h9_`ACF7_JG zy6|d%R8^O~aq*E^2)nt~ckGIJO`4_V+!3Rg?!`M)$vF%Ge$L0|tDM8`v!QHh3FBD- zhOsOj?z_&0;?Lv3N^rlnnf0d+D-j?2oHI-{{IOcPd)HZJ!%DTI9TBbwKS>aNB!V+$9qFktql3%RpM*B(zxY5P^-aE zOarrtZqHgWwCo7x1Cc}5(6|1}0gE@y=l&0OH&~gCPqXV!g(-3YS$JR&RSR!J9kpAp zWl#;*#!a2YGpGNFN{qMkKrO5H@wet;_?K!75M0CY?zWrV-HQN_$>LNw zfjGp2G^CZqd6p#lB*Q6GjPusL`+)-Jm&tA*n1F{Do?MD}f51PJ16aD^H#2;_OvXcRpHMp}4$;*0TK) zj|ltld0RMFIn7Qr}Ed*B$H(n>{O+V;QsRdG7B_2?#ynd-#4|_ zPPIh6BdRMZ0-uzWIYj=?qM3E|>U@07aEV~X0*cM3Fxhmsp{ul$qUVRkhbd~X!!dE@ zwfEo9gs+dycPbgo**nUcM; zcI{d$giAbogNvHex^XjMk~k)J;?e`$LX;FrV=M><90l6T_R9NkIv9JZtUBc#xx{9N z-Ck@Fe=Gc&a+v*AQdX-$udQRzt5TxL!fT0dRwB7b$r6b|Yu%izD%pdCI^z#;C9VUP z?)Qd}0Q>l{jQNs5MbQ)pa^$qrwa*NDR(?Su#>(FxirCNZ0S6xOU={lGY@%x8rL;u$ zP}?cWwMz6r$V$xc<7g*DvLK-r>|0+tFfjRuOzS?Fz$CCpW^D~=H_;_OB>tX6OL7G- zyYJc&T8;m4Fy{Y|k^A#sJSg(}!SaWjB^l`kd*@rl&$dpAr&>8BLp)`MB`;qa8d_xj zP7x7LjQp}bE5*gkdNiixi07~dXfP=Kr4zAP5)B~=e}&B)ei@D4R0|8gn90$RWT6na z<`U(rFp#5=5endMxcvI^E zl7s^NnRj_j{h1fxmL1D;<|ok)zP8axJ^!r3qW0!74?pjI+V}JPjz!t2i}`KlpE5@e zjisU!I@QzDX6`qg8+Xr`Xj&AV_j%H&_cJ9%!TkXm6pZMFytFu?Nq;JmiPv`G?9yLv3OK01Mwt8LFOjz*cE$$>JRKoYzb+~5C!=_ zxJ$Klem+T`Wvm>fEpApSHz-;GHzfB$*eq^Cs=$t6dXHu#l3jHxz{i>;?Nexu<7e&x2570FtGoZgioPkY2VfUd za00D^J%yd++QO#?yvEc1!eZyLG?c2>zDI zKoX|F_mM5ZGc=qKXG>kNC!*x!BAQm$7Sz;%a=Kyl5D|SxF4Oy>5Lg z_%N=&GZHhx{+dA&AdHDfl~A4rOQIiTLbT&U7-p{BofYDAVd{uu(GGNlpz1fk-8+hDiu0 z7>IP>5@dvHsu3A4)mLuQsF%^-9W%Zfn^9nU0O0b6XJ%9#Z^zMyS$)fFgq7JQol_a`QG6g<=`@T+FYrD%&Z0P0Xbx8uwJy3YR9@=4n7>k_K=w!rR)M>as|{t z?nL>2^@DRm+|Odw8DBOsX?5^o?vREPHdMlD ze|5lADIYQtG76T-fGC1s7+874X67XN z$zV{Sxp9GX(bLmg>Mg8TTwMgQqt-1E7Z_q(A7<02Rx8|r6wfX=YDw05+ z+64F+zhghxj1v99v}r9$rloDJ+A&7xcvgSz5=eo4q>t0stN z5B%9H%O#RIQ2!^68l25@p60{6xq5Mtgsj#$@q>t&hM!A|^hQaD!>m#%e`xVPZjiIc zG|rpS3_X#47=0Cv!0Ysb-pxBtP|90qF?ak2I-?=dpFM@IqyCDyES*X7BlarEsUoTS zJd^B)@%tu$$)wxo^i*mfm@Ef1MH%SDg2aL`4iuaKtdYJ2fe9;LtmDv;F^1f=SS-5u zd|bOC`|4Xpb5WYv6Y<4?o{&56uOf%H*ZbZMkV5wVxyE5^H36`p7hASU*R=&hFx=C> zn1K6aRz(GTMYw^GW*1)C_+a9{fn_)>6pnNPkqU8?|%AneM5 z42*C*fCKFF&DXODTyL4w4ITAjm7B-Fed)6I|K^7G0iUTs&+25_dD*8OB}OoZq(p z`(~P&9e&>U^Jcfr8Y3)CG;8*?l3#E>DM=rED^&S?M7^qN0r`bsMP_K*7A4F?zN)s0YHH&R6aO-3 zbHeqzbm-8bu8;GtGK;8aZH)(O_HjKUEAlke03bW1uWn+qV{=S;x~AdDI}1%05q^bk z*=3oVLUDUA?_lfJx?HK>fno5^5C`TwY++DEK}3eF-fB>-crJArJ_?*AN?92=olNe} zmAP#>IyUI*-!PfP(U$;iQ14jALX{c1hc-qosa1aEZS2q}-^%!HfgJOm1dMj;ZxPE_ zJw(RC%Zg9Gb@@hfDo9SN)~yqsK0QxRncktCv60vG#$HM8?L2lg>TW(Jh=Ur)lyXHY zUT&n5Ky>aG9NeD<|LMQz{$B3+Ljk~39dVx$ar&f5CZZXr``bC+3le<|thU&ug^59S z&c>aUqU*i)fBbn^H+5;548N{jvu@|@yYP`KEg~IGRtqRKRQ!{=XFYxCa!JxYX;AJ3 zj#nsN5*IRU#E4C}=J%l1=ItJI^MRh-lP>wa^mFTHvJB$o6hpV>s6GiBOmQUoq>5{ ziqiM)>q|j7ZSGuOiL|z`u$VlkUPexi+OH_JC@ICE9262_4wSB%*6HQgzdc^F6)Pwg zny4yK^G{A+Y`d*u9*wF}Q^vf*S}P%^=E)WUn<3@9K$Wi7t*C?3$S@D}{vzTa==Zza z{&%}63g=V1R$XY45M?+e7{f7&ULP@I;iKWM0zu$wHbb!@EF4u~kkyNu zdaq?3q@+B~oVQkq1_*^BFfjkvvSnbs9)vU6fq^B*0twPzgsC#OK@;vrrNd| zVQJ}kt6MuChc+~HRf>!L;{f^NKb_Yss=iUS?Lwx;?29q3QXIjQWsBjGepSZ2ifxAs z%sGsC6B(jycD&1l_LmC8nhI`Q`gV1MugC*jS)YYMxY1=02w@PB?P51HOPb3%HEX1; zD|oCLXnRQ~YKsP>4pHJVDMQkvM!0M!?l*Cww2px0J#vF3dFJ)1hM8)i+4e)+#d6AF zQj{{v>)o%j>Nr=BJQ$6{gYX6R=5kIuneySQuO6LKrty3VCh*e0`DiYwz)l^jo7wvB zd(#oY>Zp4LOF4{`4*IV=t#AB5u2P)czJ2??sb4!jJ^cdFu!nf<2hf>Z4~U zcNJFfhG_vML2b6~+O?|@VJKVEgi%HtGcb6=O|?f({SV)BaJqn3)yL1TXJ9yB1YPNm z<4mrjz-!g26}8!B{$>#}ahLY0k7fKxo-HjwW(Gxnp^uS}-6Y^|nMYGMhlGd&8lpu3 zuGr*y=8VH-tJDq&);`u(j9|8Y$h1wezBDraaJ3cyfkWxKwA1U4C!qzA38@Pn+JtNF z&DKOaNhO`UijpfHYO3sjp-#z=_Xp=%#z4fx`mZV*)XR{p%Arm_K1AC?dwFViaa zd0Eb1evPwTNNzN`u97y~@Uqiw#s%#Zl_qeBF|iGNhnE!8+Dklwp$^Cfo%O<${-tL^ z?wqa{)@Fxk(3}x2109C66MuJF%iHaKt{WS5%JC|vEU9?KClcxz$W2qdT)e%ZozOP3 zV^{V>=nZ+pHFGi}!(bdyZ-qlz>dUw}F*k$8C^bxf?Crn*VC5fUM$~oR-EJAI zqNYJlF#|#gYz}i#(WdsF^f~Zk@R!tVR0ZS)FacMevdq;B+E~sjvt`R-=v4&7q2M%B zj?wk_^jl}~uA%boZYW}4FY5*^B$NT^3ExBvl5T<5#eYiNi4rt7FW=_QsUz`#Dc2ms zG<+^ynk@4bxxFaUHSPp@1crp<1gBcY?fABDA?yk zB@RL~9eBWG@)@^xcgh68>NLbriEq(UCU9|j$qS`YILI&xoOh(-XpTS9=LfFkJ#yfg zaqJ~pFese7Q8CK%;KVy1@Pxkl3A!soF*{>9|EAk&tTaLwQ3+0=8ABv=A=-9zSejJc zOCvKedru=`cX!6gh_c2ro{UZVSiTSd#>~Rv0PU_An-E{%iT{ypMbCv3Kndv~MB56gEjVIWCY3j2IZ)viB?2{$n z?9D9=B(oeITjU91_L5v4@drzU4&@anc6Z8e`at(V)}!dJrz34ez3GL+S!s@-$LBj^ z61P1NOh0XHSq-RFb0QvO*+^KvsE^2Hd$6sjgB|=Zg|ZAWq=X@5RjlX&L`u*Mr{=tN zyE~sN_o7pi9psDac&Z?|pb4+bfYLM##feJWC7unEK+{$|>?ve#yS2YHHOx+&;dRyB zv;#DPXa?lBz!Jy;LhRJAVM8<-S$4bF!C>4G??+~rxkD7tW`A=oET?y&tx9TMal6#4 zA;+cIi+|G?)@4%by?u`JJ?G`+kq^D(e9i0XSY`Hr0z%aYZ=u$UMwidQ-?9ul10e3! z{gHKcZ@OW!yX?a{J$idm`v=UpXzKD{t5Y37?dqkjQt;-cu(gG+D!%aWD%QAJ&oH>E(KCTj{p3s3H!NbZ? z-OBuW7BN_r*00wXMJT{11UNTM9QKVso2*#Ndl&h0j`VO+c%fSFaC~>g+o7`-Y1tZ= z-GQ#va4%~MlkLrQDSPy!<1P0L7>+G@yEEoeBP55KCPaO|(+A>Xx~d#9OfaL&_n#QgQ;K^&lXXS#IkxTS26LbWFnV}xuw z*3MR_nSrx(G^8gX7mM(pQ}@Yx3J*tVqyH4~awVSe=Z^XNkD8pRjyHckMY1>~6Nhre z)eD)fOjj>GwEiQ*w^`~uUNO+i++cWGS89?@%NQx->Ln@2cz%)J9@kigKo4!y*Y=%j@%wsF>x!)S!Mz^l4qFKvPHJhhmKRqx3wi!k!S^FqF5WDk?CZKjh|jw zGm7l7Lw30rA#sw}6tdjU&ri9PdGndTuC88emcG+gFZo!I`g6QL|FR@~i$2d)YzJ)b z9yXew?)avDw;UuZ|Inc%{~>!zoz7gyc>c*WGe>P#{H}YiCX@Cc4(H9mU?E-NM|u5X z9MEe<4U^|G3X^(2Ai0l1eE|r{2%)OKQK_rcu+~!f*8SCYv1M=g_JA6h`l}oxSt%EUL}D%2kh=N|<$QA+BB+s%C?AyUO^X zENVo1qUgd73|jl%3!#hLF6;?&jM*qDB+`@KP@8=D@yCY@TJAsr!A$bTVR?g}ecT1T zFKRMrl60IteW+8=Gh;~<4;F`o2Ie)(SRhpDYt5f-H8qpLB+%h(7H+Jjq^PX^e50F# zPfm)KWH&IG*f%I>I#>a&w#z2Z3ZkqhmcLsUp3pYZq&UF9)a?Cl_a(AL3{axVo3?r& zXKI6<3ws!nBAXXfaiMH-Uv!iyj>x$+0ieezeQoyqxrK}P!#^Y8vH`HH54U+g+#&e2<3)T)-E)SL4)Fu8+5 zu^sK^tk17U5BR`C=^{=*lX5Q^Rqtr5unJ*HS<>)9R}p_ zlhfVj)Ouf~uHW&z$e!cRG~E&bx`xk{D}&xxbUtd*>nuyh?A^;d3qrKW{wgcU7d07m zWG6vuUBB0yl5aJz^l7mPgFim@X7ES6d3br+`il?dW$Tpv0FfjWD<<|X6g424_Be>b z@>;(gGT1%xV!5y~#d%}XRDJ!E^kNUQsMvZ_0b04BwYrU7VcK%r?JS!yu2j~ckIQO~ zGUWV!mY;-nLS(0)rGQ(fftHP^r#ab1jUKk2XWXxUf56Udtsx;KH0xjVr?>wfQ0$^e^A-UjO^bxe!w3jHVHiuwmbk`2D+3flS{=hGCN>#7FSsQ%;N@*Lyg{~ zN6ws>p*3Z&vA@M-d;9LGMeF)-ESXRqBc`qd#Fz+a}g4(5yk)tDi&i*>MX+9U_*(Ovup6%Xe17{$awiJj3Ql%cp;l9Ff$Kw znV$;}HDN|tPRouc6zp-qjuwf=1BrEYPoEj6t@&KG29BKQmZ|F{J5!gQAkC>Zl5zNcaNRPz*7yMlP7OH*SJ22 zd&Kp&E=I)b3J@y{s^9Va4<`-phn7ZXMeQvAz*ZJSyx<+Spt#J3n* z%8e{~WSgVs(O+A8bBa(RVqufu2{2O$&|`gpkF~f|*_U4kFHX7mIeo3}skDhe zEuMlo4Xt=Jl>WsQQf(Q1duVZrdC}0%1w*k@P8NA&-@YRnd=|4b0}F#Ch6TCA)wy%` zzPHo85Sc`mZl0L|W+`Q`OnVSWi6c!QdDqedou@oIWirA9803 zN+7CFV=LpqshNJuGn{rzSEwE4SfS=onwgZ9qBd~|5;lblUz{HCnFFuyS(Ryyv;6|m+J`*f2Z$srbZ5wmmYLA2IqhUXz z(Jlv~uD7+Zp*-ypXi_LLX#|xX24r%>9>f4(q-o7NIIx25ec!Tl)ytx16S_KjvSHWC7DF2)O$Je4*<9een55+AlA#R4_`~@6d`?w zbH2znN3ZZU@j5U>xyZLQU-9S2Q#WCw1?vP`M@KTXL(po*?6hjz@jFRSlz19GpNY->&A-bO6S2-y+_WqR z?#%oTfkNzm+dFz;da;Qcji(gesK;(*c9{$?9E32A1K{%Q^Yg;zNLJ0RHiH)0?Eg+` zy;6Fw3k-lIg5FtT#7Kz|iKig_AX3Au$qm{`$e!%@3s>H>@_eOoWr(6l!$YNxpXmiJ z;N;3iMiUS-xrwqvfw1rv0hgy@azNImj6myr-_pmfC3TI&#xGiVZYqYOFM0mrFDKC7 ze`qvj*WsNL{`k3GEg+r^T&Y4-5HVhVP8zH?$c9*V<>_v{|D&r0*nGQ^L2!C(Y}0SP z$~-^@f(AwDrhOwPa$I74-nnb@rabV3iWxEZIw6g z9-FsL6PlISD4gd3xYC*2%2ZReV)DZ1ZEGx9vI~#Z9d$o4a)#)tdN)~w%BnJ+RQeEC z4FF23FVCp}O0xOm`*J>c0@_3V+&~AUbrT7r5rXxW?c$0OXx<4vt^zt%3lQY zwIX*Z*)z&3a+*gTAtfv+ryumr0B#ixfkXa9S2^V6-0OclMH#3z2@py=CMMC;Px!pX zQzIbfcKXq#jfp|8Bja4XOnN21(!+d^g#2&e-`7WD7uV6un3#}R(cGMB$u2ByPcZWg zDT04ANL5QgB8sf^!Qn%7oY!23sd0@gGidp)Zm(n-Y0uElryrOFZB5tWf)#XC3?Mgr zzHhz5oSi*~^_0!f(aGGQV)4gf*SIvJo48JLb90CJH9xcqn+j=#lzWr0_g`6Ew{!u= zJ6GCX3Auw<{pT;|fj?GLDEx-&lO|1`+&i;D5Sa2bq#-#tLU@wBexx2SoTA>Oepp&Y z0nVTa9LT#C^-w3IxrZS)0iD}%h(k;kq$Yp$aN#8lo6p<(k*qT3@{mLk#-dFBV{1q^ z%M;dccUVu7{jA%q4HU@MaPr6S20I#J+&TkT(9saT%M5dKU*aYNTt}orIM$$PZ_$z@ z)@#2`qyz8{nNoRDhVLhaoQxL<5CCKm=m)Lmek8@z45N?5X)3u8W$@dd5TIdl$;I-t z_Npw+qX^Q)S}4)g0DMjT9WGbAEGZN7u*|Q6FO(aw9S*?;DcL>~!wX}_sv1SWm5?j_ z&@3pMWHo!nA>yp`BCCOXS!1MV+YSpNECb-2h~nu60^usL7JTZ>?{iava!!>xB^7)# zVM#>b96!f)wdSvTw?%H(%Io>8$IPbhdVrZzIe%Su)5$CCH83GZhWCx0NHyPX_q~7d zqQ2ZyZAy@rK4KVLg62@Pf~4j6Q@Y~p$FM)t>u6snp8oYM`LwN^N^eu8 zo<|g)vF;5tr2-)R1qkYB*nP%%&c^)rD{a97!xBtz1EW2P7*nQ zhq915#$i+tA(2_dr;ijz5~HI;u0FnhjgY5l-@kxTBcg`avtDnLl$hwvN@0?%F{#|H z@ddVxljaLeOQ9?XCkJr$CHLc{)4Xz$Qc}*zAYW{{2rk9gB(x(1PEdmYx4lZK;KYBn20S=Q~bhW)D1q_3k5k*MKuYQ5S-qlHi$^ zIdEGuv>Kd=yoi-|{wGq~rW&c0mw0_?+qP{b4jRN?nOAn|<<{1g5{SfSRlZz#ksMEv zJ^Oq+0l~k9lo!1p)-Lq6emADFkzszTvP2wpQ~KPr^$Q>86cvX)w+i&CF`HY(fJyE~qwDMQ&>_sp*va7wmG3RN;$ow zg-Tt?asj9pWjGhfRCaqh0Xr98^EZa*=sb(4w`rJkGXOTb9&dPlihXOCon(8c;>moN zU0e_6q-3NM2glsUjgpvmWyJjKYqMVTK?!)46O5jbdnC*H%C+Behs+OOpmIX18bJ+x z`Ez#$N-cen{%z(^QW|*6|3*Hv>C>9_vg+&lQrcNpuNCWFwHEeC-JU`iTjgRKmCB1Y zvgZj^S;?S5A$2|}JdZri(93=;3e9G^5FeEAW|o%yb;b;@Ud?D<=WgqN5CJ^rFc&V6 zNO$x;9QaDnSDih#zfadcRiKo1OWzI)$cEvGtJfPX z{V%D?3^KUi&P>xaj-a>|wHS35SG`DEkr>~4vF&hY)-d9S)AQE8{ze2#+?Xsk0l$Dl zPOWMbnUvI9h7t>032(rPL{)i+TSQ}f#PrDv`@5ku5V{za2AHf>n%%P2y^o(ezv&j!T7rP3E*$uk)vm{jO`EPz-|&~VPlPEk)?;o~YXSaMq!O3$ z9vQwe<-;zltgy^GqU_c1e-W*u#TB(iZX!)2|D+k_930B=a9L&h&ACX#zbNlXviR|h z@01DJ062|H2h~60Z)ze+XriYO&7Z*wUAocwr`vGlOr|?2k^)clpE)9F9-G-a)mB^1 ztKxt&nMcCXKY!^*RD-XImuRW0=#%EB+}BWQD6M@!T9bit*_L$A+QelIGdD$`!{TfZ zt_g*Ss*4VcnEftaDfV0zq+JvMa;;A%FJuqX&1j5lIC@dd_1gc}*I75PSNkRng}H5J zf09SgLpiU2X^$pWM{k=_hN)XMq3}>EemaEZ3vhjAg8LM@o$tPl4r4>djxBYxDv__lHDSzq*J?JAnp)Y^ZRjFRizJ}K@_&1* z?zYBoCi{so<+d6THS(WdDnENd>q93K<*zyqy!4N?y6=e-CX-TU6I#u|SucowbZaPY zc-UvRuc^8BfqSfQDsU4KfxstHlYwMa)?{U1KK+PBoi(baeZrMqSD)n%kgH?SB6wLU z@yN_BUtt034rSQ3!veTOu$R`cc4#n^asPuhSI{yg?T8E{HeJ0R4V*(!44I-QYo6>6Ws*Ht824WsnFJ!WrDCv1zBr6(LT2`Y zLXB{_7M5ly|E5d=)DRHmzhwc2nPay^4fWpeWBsIE8ekVW8^^iY{DVl~<%++T>s`7f z^=b)YE#p?R4n=%A%^jj)_~gkGK(b*=J&s3CoLFw4v)WIlryGaaNo2)>)XJ^|!NShu z6`^DH7c^2_w&94D(FoFls%KLh`B46%to-ufT*(&Oa}KjlkwcmT>WKDT3?F}<(5oXi zXhR0XI$hnay(A{?>Q9gdm|c4Ahs3Qy|}Q12grM$31_N`S7( zPetuPZo6@SDKD*BljA?mwtefd;Tpm+K}MFg}zT$)=Q9`f?o-bJn zbC&j0Q^{71_^?H<;)7}VYpwM$G$}y{?s;kBiP=2Uo zoUjt7iWu>P`Vb78^t!+FFc9k<+QsSjDU6?Rc^n+B+)g5*T{O>_dG?E9%V{5 zR11m1-+CMm?Sc-F)1z z$m`6Y``6SAo{Tk4a_ViK*uzjaDs@YkH&YD0PHi8R6nD(zeCcej-nOK9C^Ie48W2b_ zkNHGH_uYC?-_7O9n31F<|CZl*s|r1J&2)t(kLqU>jo${9*HBNVFqg3qqweX8w8rpd z#kZM1AyI-GXN>thDV@IX^>Rn=XV)4je=+o9ww11Zpx~j5ml#eKM+{V1 z0v#vVKUz@(R~dTD4>IYE;&9j&q07w~J+yT4*=zrY4OP#3l?_!-Ljg2F;c2?!6B9c{ zJkuf^FT=Fe4wZ}shkVf3(4C&Fld~c;tCIw6AXt&W7V2LLA1y=4DxkSd&oJFKK-W0n zc z<@L4ZM)03Rf8|1ns;fj&1&*&oQuk0{Dg%m|ZH>y<_jqw%FPVymoPyTlFAE0KA1gBs z5mZ0M%Y4(K#ji{$rUVhdQ}$wTctM6yX!bI_UQ>#Xzqt-Mb~e1?QAW{#TP6p><8AX) z9glD?S;zXp)T6q{K4~7dpWZ5$nh9%`_nC>j;F9Xiy0R4qI%X--L?(Z z)KVx^j0F14&fc+WLznDz7jBmKjULMB{y%!gC4U??X||f7+@t@{r$svn-NRg%6T+f! zVRKzIwg{LL75;jF+vAfSgXh<)S%VI{s)c*odvwyOPW!s%E~F0%8VxN#QbEg|Rx`tV|L z^Ia|9U5nswMrg)b&EuvI1y$#(-%uw`w2Ls}OE+HZh7e-S3fjyzAE%1jCpa z!{ugLf3q``PVe7U$A|s3csma=d&e zjB(mXU?B*b=TxaQ`Q$1Sni=<)p{7ge573aCuUF{7H<@78?|eDkrqC3LPFJ^46Qo`p z4a9jNqQYJj7qIf@CwS=jaovDN=V1Z_e=2{_%u;Vs_Sy+OV%sF&$?iHL@Zrm28y=-@ z$=O}*Gq`1WkJ!V4g35dV8F(VHFYfOSZ?adEXS8o_eIV12NyZ}l!307@9Gc50PsJ^=Dv3w%PM0L>R-wIocMxqeJSS3CVWF#WBbuA<< zWWJL1Uh}FU`m8FQ?c081FMrhc$ryCWz}iIB_l!!6ri-OO0ddM3SYQxaUt#Ks%F`dVP1T_eB?H`VyZ`5r^P~ z$tObm9Bh5}bMrrCDS68WPKRKGX{Fh|lB>_fqB19Zy6ya> z3G*wapLY3t@_gZ?O*6C7H41A&>V%Ip8Oi#ZOr7*Z@{Cdx-RIOdh<$6hI0)gixg4GkHAdnN6yOKEwZJ-=+ffZzq>Z9zyi>}qkM z7iWsVCiWG5)so`!OLBzKkYo-ueI4S*aM{ zgNt4-zz=Zo&@-0GhggLMDjyayBlN@guJWZ@6flk8Ykbu zcL~>~d)D@4tSh6)sKY};bwKRKC^MY?EEa&)rgGOyRFYCe_m8Vjv8{PEgyH-F+s4g> zGwIIXPDe@*dqOK3A;F}X#HNZ7N$yQ*7gqZ1YB;q)FsL?0bFIX^&U!o(_|j4Lln1uq z6o`LF>Kn_Nxl}K>ScdKSCS2ZavY5(B`LKFxH~g_;*Oj4)LmO#AfJ6X$Hox7e@Kkdg z`jv?lDZT%RY3$eVLz}_v0gNLG{}aLKY-5xenP+DXXd!6@-s6sl{B`uz zw=YUv{t;x*T9+53b4bjzNnUk*Ctuzk!!zup77sUAv-@*V>@o0Zdz&}DPL&bYV)f+<70#I3!5qPB<2 z$>X)eog=BX8|nT4cU=+rX4{ldz?6;bPpX6je9%a8eyt4ChqR`Y*e zY5eTw26{c4SO03^Y~XHSNt%KI?!<0|NVF3wr$VeLT{?HZXVWM;ugWtJm^=?NEQTbu z&5>Vg>X0U#kes|!$8)Ucv6{JjV^>2G#lxK%*{XtZGO^Hfw+F#o0A+P*Zg?KSCpzIs zmK#o#c*s?TTddHj=XmT{{-LzU^;tFSH-W%lQ<%vW9t+vIp8)}ebAI`8yGSgSa;i!< z!P{^4RI5pSng5tTgyb2y+yuFyy9#tHvlCoI{u4VqQ<=uG;*gh{6Gwr7y<^bi`p;*!kqFGz7A$VqR%aTmu-`oEfrpZCA5Y`4 z-}oV)8D#bn$^}6!;iLgw<1-vJ<(;{DQGW&>j-%+>>$N9p1J|)Qba|+*8bS;Z<BYJk znNGptXINW}xUTvkgffdTGkT!|HIoK5T)$K|=Sj2tX3%XNjm%snvf;2a@4oi#-gkn^ zZnnv8gz?BO?8^KbHe_aUZ1@pAYzk4jc^_HnhRjGjK;ZGh%XJ;yvr6_UB0b(@{BmdE zWc4P9r+h?IF4`EPCWIIR@|u%|IU!ihGplr>dXs1pV-eh6oiJd_`w#9b-`GwIBtNNZ z*T7flDeJNr6ejlo{BMp#5aMwRw0bf82ZlA~J6xL|x9ce5IOTl6L3HYIPNNK+61QD5 zM_-E^ErtqezQHd7|U+;x2EIwHm_4b#$_nd9#krR^j-2qeoj@eT|-?1 zyc?&v&8S1Bmu_B&3A}7)YU=sIHT_0Tk&L2Be$}~iXL@cFs845&xGZ`LQh}E1bjbaU z>4eaF-hHjMLQDVsN)(GC$=PMc z+BJUBvuoGwYz`xaUUKbcsi@~(Ho9P45%R?@R{z=UGm9#Zoz2^U&m=Kd@>~m(CZsNG?3Bs+_=l2v1KM8 z$J?gegDGzW?cf`Nfy}Px+(@CX+LcUHb_Dv*@n`7CM?zIl#4;N3ETK0Ks4@JGUf5o{ z=7yH3W5KzEbE*J(YNSFHsY<~Puz zAQ$gM-!RcS5^?`Lk6sPH`E9Xv&2S8#QqPyE#BEWIXV3v zh4Sm`Wf2^x<%|Mo@Rd{Ar=Y-DJ-&;08yoTFVbwUp870dq(!;_pAq4e@q74ashL%H&Efe|~&JSNL z?XJzOh68NOA|l&t@*qTYN!ppU4h|Xm1!X(i44MM7tm5SE?w+=|mOX6c{eG|KMZU12 z$*J1vu~7ZvmwaKP6As;BU9(=wU)4W6i1cQs54YN96B8H%ktLG_vj;?c+(`?kZm5iF zCmv0bE|~MJbj5RDJOn)_MPaW76@RwY`j0LI4*R%b=*r?!OL_!la|f79ZWA{WtjiG z;A4xXO&0`yM?NTr)2PmFgvsw*{N-5O|Jjb1n`_jqQ`qks!e*N73F zwrbV;wXGWuoXV-rp)qcWf+p&h)Q?)aipbq!FK)d4!=?*iZ$mB9R2BALgR^1$mmvbg zwRu}d*P-eAV=HP(Dl@C(OJAFtR+rzmD6HFoPY6jzg0>jju9cfDP z;o9IPT8bM%s+tSeO3jqhTd;*_WIZ16ES@%B`93&kM9?dFH=>BgG95eg^T&yj&dUEs z6^Y5804Nz5Qh{0l=Zy%|26PL+KAgM0p*wiILDT;JZj+1L;ZwJqx*k0jW z;Ei*X$0jl4S@i!q=z3zBPaJYmUtQhh&O)7fnf=EX=r*ZOw=rkVIZ*kd1~rE-tZp?P zLgpcfb&Jfj1u63KZ<%s8=@qZMer@Gj?@;~LZ{841-r+ zEd>mr6om{(qU9J-j zLOeJSyC_LA;E#kiD>KJ!y7gkI?T(u_Zw3^vXchL++JnHoq&0W!5B1$mo`K9w?hNw4 zRyOAx808=R>E&rntQ?dAZwYQx&G6u_C=oU%MJJj<-)PaP42yR$nk*C zIa4Q1YO>rS=a}wPhYa04zp|?u(PQDGp zdhOr-Yem|xS@;Ek>?&(V;~R{y0adiA+r$pY0R=6)=u2N5FLOF6e^HmFD#$s6P~s61*a}LoonxWWuqol$%BzW)zNPTuKCl(p8yjfuQBHgn z$VTu;sf%Q0HrXU990pkopPs}&CoBnPK(FNY1f_?Bw$;6d4Be0ThG~)lBNM76t%p^^ zajzU^xjeZS%vWG?2Kx~j+|p{nEskUvR9_09?ax%nvh(*YquJiHeqNB-^xvcM9{UhV zTql1fO5XO&kdk&#_AXV5d;Trdwn;O3B9@RHb&mf?X$t;ph`|gfv_wT|f}R_T|)3z(d>#3dDUOJ+b;Q=HKKHh*i4mjn^^J%_Vl^8ZKNo5%H-w}1cH_ie_= zR?NsY2xBcu_W4+{7by*fC>1J8w9JfkY$Hab40xzq4 zwZ!5cnd6+(S*CUrBFU7!-M^ zMp0wyxyNo|J7?n2@ewYT8ri?`q3BRyWP{8GoA}R&y!#<#L5+2>PnXl}j|04H__o7) z^yFXf_o5y5CRx@~e%ZrUwBbN8%2iDfSK=sEMiptP63M-q#&&Ndl$iToiD2;{M5>wM z(-WYGHlgzADrjK!s4?NG+wS`d=jg6bj zp63+SrwC{ya(}s9hQ0o65;;?Mjkgs6$;*fVx>_(RRMrl9nlD#9&m$zc+~fYiX)%Qt z;S)faY-F{EFP*hP(d~ZfTy}&@v(G4=Cz%_qA!_9bAP?MxnG(J!?`GIA#c1=MvncR~L;G zSKtXCNejn>(H_1)MiNfzA@P-fI(Z~}*`0~w97+XcrWHygJN}RW3>0DDaMqM)P`6Jc zNAK@5_j?HYfKZ7cU^=^lvslc4ytfjbpC97y>svd>QV3YyYYC&04B)jx(Fs(=)e(n6 zLldmG(5jvOS+_NDkwG@DOa6skSf!QTPC0k#^(w#Z*X?3nd&{eNWX!fi*&D$jW3$n) z!7FS;DhgQoFa<0jXX%^FQv1RS^>ieCm6n;l0g&%8kiUk8b0g8UGRbckA3x(C9fmT7 z)@`P}WFU{?!(T=-Pw%f1ifHs2VCgu`gEZOMX|9=u6Su55aJ~YEV>0aY>@<5mQVGP7 zr2vQ{M{(4Wc%b~&%XKu@ZnIh+*oQC!=_rT2y4*~H4I z5~D);yuK&IC64APW!fZz&;FdhqQ5`wWLNMnFK9=ZF1J>r#=;08dWxt0xAh7ItON^s03p0Y)KV&H(iO6v~A5T8`+knkb(y!0N)r+XGyjXY1nVIb6NU;PfdI~fkF9MWy~nYbCpicUs4+~lRm zU(w^sFUO$)%(|11px0=f+_p%MfGn~R+JGw#RM#k;DP}I&A{<%qGF9Lq*&Ii3y@?b? z=IETE8b-|=_`JK3l`SY+!|+Y-kq<3T7Kusf3H3SV`iCDjzgoYMNm3OYXe8E3i7iwZ zIB~mkn`NFXUz;~OLt^8DS%u1*mUC#McA^A-6Ryi~7p-Hw#K?1@J~Sl5Dv34Kz8RHo zOMwxF+1%zZSERUAc%pvGkRcZE&}QWj=M5r0lV($>CUGTGM}*#%vqvtI5?e2kW0Ey2 zw+qb{E_ol~fF7PaBWXE`BZn?;g!8lQnbUXKyX4K5BPeH!o1d}HJ1?n@hR=A!g<^tI z03A@qW!#w5p8o0@jsbq_^Y-^nx1d&#e){kWBcn<0k?C6iz^Zv?t`yz2uE&Ye|Q=N65H!{-9rHn7+ceInMu1Wu~No-qj5wjV!flBrl7kb6F~xo^%MS&7J& z)zNfqLgoE${iVSo-WkPxOa!n!3!nwNKa#+%GR zomIUrJpW!AblTorD${giR-!pX-GX?pw+_=|1q@l5&N#qTf5e69k= z43|=u3M5*WRzt9!;3eCOWOnjjJNBx6k0O%Z3TlIEJ7k+bB2CbXs3ePk*B1gu`B=xZMuIJo_GaU;5e=HWNy-Ciy!^=GIRbh<;BhO7RMvYmmEam0aPOvZAqiymJW&ujNR&%>6))D zb=P4QW9!mQ$GT-qjMKk#9C$_sb!z-&wkd`TBXuW z1q4N%K$r0R!uC|}YxDH-YL$PNiAhlkQk#AYv*i`ypyucpc@zVYW&hYCFkZ%#+qZ8Q z4J>F;8g2ISkCoH=6c#S;(pb;_aZMu!IE8SLtBB8Y+=L1J)jyc5o#im|b!DMh#gpxo z)5_e((>@smnULYVZe48=D~N<$@X~peZ!1K9C>Xpfs`M!CQ2C;RY+;l08`gADD(bQR zEQ6^itb7}kvs>4b2`*ZD%><$yLvwb|VV~kmSPq$C9It(5x;M6gjgV_V_UBlDA<-At z^<^c5g;VkjAg{Z$MO&TLY5{oMB~Gdsp~ZgV9JU~@Ms>6JpuI+Xr1qL;eFcC(PT`ZY zTl?ugs{;v@Z{jLX_ZhfVG7-r|khDB-oV$)qm!`MJ@2qLzxKlzd(z=ZM`fC;i9#-%Q_DLO-ElbF$Wl5BugS*|_ zGc$Em%=(vYnbSnc{B!MfztS)64UL?|9m9;Avvtn3g=bY$5AGXj@tZQJU9)0P>!@ON zYP@{xA$V+brI?fXWz@0xoAl<{c4$O*>skmgvI9`nv*XuI^7DtGY%EHwui;0zVWovQ%o)r;?#2p;=h0G2%Qmcb_AJTfq=szRu%T(8 z4Pl>;Hg@1g4QO{WKILBi%ZH`Y(Wy8?El7U%)fxFcx^;VXe?H>xG2E8n1e~x+hS5^q z4CqqGz1yvsAcs@GHg*YMe- z6fpY8gZ~1Ef?;SL*3|FYG@NhFlRuFHhd}Mc6aecM3 zQQUHXv{os3_X%#rial2=yC7qIfXqOJsx5$`$#3R0arLE?Q3=MN(iRtIT#Vh^; zu|tZoxYWtsHtJP{>nWZZ$(NgD)`NIsc|zsMXlone51@9mh(w^JNR_WTgbIUW=n@W{ zoN6mLm9)wd4nUHyhcEq;YzX}QEJ0fOn_D@gj%2JvSbw;$YRRb*f%z*g8T3-gv<|ChBKGgw@)-vB^cl4j(& z(-*G@Gq}^2j;WJM?lMUcTk`v9haulY%3+f&?;LH6c`EC2c?Z^#;`bNcm7Mwb+yMWA z3q{5fspaF-aaD!C3iyn?)l-BAbVJuBq3nn}f^iqF*e{qIA|C#sz?cILYM!#hlOY72 zRL6cl*{)k&jMS?~^ZIU;pn$!QPpM1B6lOZ=vskaMNMho?i(m6sVf`cPqs~qZ{i|>M zgWlHx$4+p-z#vo^FPe0p=xo?GE(0Od1Tl}T5pJGz#cEDR?K zU)|<0(1T2h!g$O&b+>7BP7mRuHeUT)r4?0hD#jCD9IRjVabqNzv2fwSfRy(7Z6gNA z6|GV=cK%LDoz;K+-*`jAqwlu^6n7{7 z4nJrk-RCs0Q2=2_xJtNlL#v~>Ix3q~Mez|c{gdXOyqhc1u8>M9Lxr5-KDNiU>^*GD z_vK+`u{9(@=8*RfbCFs72t~6{_6tCNs|EGUmJt!hi=2yi{c>T1+5FH{0d)87-D`K! zW_Ho&UwbKw0zM3k!mu7cuthigYY7CDwB1&ZLxMS&T%>|L zq`8*o8~joJ=ztENm4|*w`1ne%-heBzVEvq1rK==7N=^Vb=kI?E-uTta^VX*pKfLsv zlvxptX=-Zz>3YauB8&{jf13@QwE{+wqoa+_N9$3v|0EdiY=EYrugs~UL! zO)+A$lH?H=d%pi83>qEC;ZS)Z^W%Arz_Avshmo@TmLcx9hv0fB)gzzaEzeWL5vuIc>d zMYLFulw`Vz6Q$Axlm_2hBEmfEY>(^$pS5RUMnLijI#fJzCr+O}oirbPD?!8~U?S}N z19v=tkCGpqc$0*A7ehieelp(he0uX<&A0^5ffqAX72I9qmXt}MV@#3IYOTioOSYKY>8 znBIJ+1>iKJLL+Km!P2?9YYn7z#^l<>bKNjbvC3BW#sjt7G)zZcvGsc}BpbM%S<-Pj zB0!}>hz(j7y0Yis!exGl0T47@VWvHeJB^kT&fR$(GN%~z5K|ckMaU)h3>1r`kGqzq zX5<1FUM}y_xpR($v&(ITr08_`d}>!RxR-cTbICCfuzg76!&PWRn2^oIfGp9)z@dDY zOh`i>tOU0gR9^P~o_EL!Id4F}=-Zdih;F`^zoxGJMKT)|C4qr|dV#s+{|gOE@9y1I zIEJdgPIqn(6yeeji$2FA_I1X$|EiSle!->D!4--`$!N&i{EW9sxId_Jc7m5->oyu! zMk6T@nTa&Wk2w@#JHZ0(1p|PhV0^Wr;2&=T!Z~KDq&8_^fF^r9SrPGc`T52v#Z4z} zsWqtTW|U$o{BqbR!0w+owNB(s!QbqU9p3NV<4=DZl$-f(=n9@zekkiXyMViOTT~MA z`N$26(l4w|Yj@|zBE7iStRjQ6!Uh9zHA_Fh`Up&zu?@Ue(q7Y$3{Zb(c#>ut02(sj zu}sb)zjnQ7iK{#%G^(VRYAP6?>&vqTa|jd>I~?wU?pRrXARanJ9+-zHs#jDjyTjkE z=EQ%VPs#KbyVT_%qQYojYARcR(QLaJ8vvuCM_Igbjn(zNd^y1N%`1~q@i)oxF8;tW) z_RW6|0$F^ryuZDDVf#g{7ZI;n6S;ah2x(O65~D(-R6o;F3XNIE;?jF*%2eL$mhIXF z{12s{#=+XvFM;m)C!bg>|E;s4xLB%<)U`)7M`a+G79<1jf<@rsL$?taDEFr%9DRkp z2yKs|FOqhs^X6*}<2un4OWN3m@mCH4$rdLc_VSbK(?e2dSqgP^X%jD-sOI)7pVcFI zV$ISPS$vm**Ys-jYr*EI*r9p3SrO>W+FVZ1K^LaIcbDrqHi!~CqomQw<)#AJ?8E#jI$A(9K;1!@jh zi#Y6AKv8_Uq6(4S+^9m>^fw2N=AzDVhJINFPcA4}r{qBr1>GG0Nc>2F77=3Ew#MXB zHHyKiA5aWn2yK4cv?(5n8nO7%&w7|hnh=HALtN~D_&viiJ~*{?R>@?@jt}0Bs^}(~ z=lesOTD=6d57Ap;`Ygj#z50P%{wNrcNQ#VxDDUZxj*bcmogWjO2^4n5B)TAW_1*h= zyvaVp-oDr&L4LkyY9+u_h@PR^akDH=b??@#en^N@?1AHvMcP04{_}c}cEhpmH>0rK zy{*Wov=F{Zb{_H*5OtL_YwlB8GiUa6#NIb_E?&f*rz5G?HQW!NzWDGP^55Zvx-(Bz z&6UMpixG$0Q{w)pP~G(O?m2S(X4e4)aw4y?)jD{WCKL$jT@sm_$GGVCGg)k{j;oZ` z1H(7IsDbV3th@A%u4_eEM}Q2j)rVK7f3I#2Ofx5&5~hSO)?nVwOjdQ$LWq^mZ<@0& zAFo98hNi99kHF~M>Y~htwtQcSAJXq9qjQ-7Y$Y4Wd9%YNG1g(JKMwbuP2PwJjnbCr zfS{lhWC%}|4kiO6wpA$KB_RT)=uPhe-JT@OKS!2s;7DgEkM)`abtmEsiSDJv7tcDe zfRgxOHgqF-F|vnGJeMXWCK1s`j>pkj5WcY>V*bi&Z(U{-t?s)xQAd_YCD81P|9~wI zomXYtos+~uxNpgXGL6>QAO&))+hU2 z#aqVeAo{(XIwJfODi~QxW6v5I&0R^@BDslewu|) z)LM?&@t>;_h0?53<8$5&JR$wn3AXPX4@XiKh5J45!=pbaQhs{m>_pRHyYNA!BuyHYHt!%5bdSD$r{FANY5U#yLnD7?iyx*G zgwTsFxz`}McY45%LF~WPYroyZ9)2wk(qFdl5??h#-j_`+I^DOO#HctYIvmbBm`oX| zS+rBHR>5dc&A7omGYaiXv&K$z5nam0cdx~n1-DwshCbdd<|0VT!Ff?uQGT{D(fyqI zuds>D5^7JfgC)clo=h?a^J916G5C@L_o@V%RKNYj*A=Nl3cu?Ds>FhzzEy7mPv*-JH*Y5xA zjpjl$C8uis+kK#_bncMgg*@n|4&`eX88++HYW&8>8}6sfC@-BcF_h5y$VwA+km)Nnqk-^?-c- zM|e(5z5v6FCuxTv&cWxCB+3z=E+X?`uPX2}WbJ3MBP0(%d!zSw(C_~nXm9*{^LNU# zEFK{WpJM0{8w9p~(?+bIK~;u2W3@+0oE38)|s4WdA=@ayF8-w z>rRY*#I6Ko6*r31U7LAYYWh;N-qcz|^gJySmP>MB#-$#9U^MB@xuq@`M6l%WvOzk| z4{MlBoI{m|Le4Q2dV*DPTRIB5$W`h#S+P}ue#bF9svjf}IjN1oR6GETB@%$d(UQRP z%c(-EGfWDFm3(j_U6T|)!nnL7E`WYO_8x)5Oa3%6MSrspyR;K9!CHft8cFDjtW@X@ z7men^KDdIPiEl&-G-?-407v}ZZ%3Af1PxhX8d9>5#-4AGGeYA%gGEd?%0mWr7}9UW z%G*+}CD0A%K}5I`Yc3|0w7}TyZkZ0&c^B$={ng%yg$3CToTLB+YmmS>-do_g7-@~z zcDQK14gS;eo`!}+SH>Qhd6eq>Q%c^`vVlvti(2y5t=9(Z8UDzZ)-Uh0JXxmPT&`?= z%3H5FC!V!m6SCGlqdOI5V&j%UW<6UWnOH>lQ`+=}*IDKz`3frQk{=fC52+}1s|=N^ zhkJabO$QB)N8-Fi=OmqTb^;+E=T^O#_pX0#8s8apvTsn}83=uun-~7z-keA+g#=2w zp5tf@H;KgvW6u3YPOBVmzk9lb0{w_Yc7gtpvEqo}TNDhGPY01nJ$oU~B(sRJl8xx{ zXWHzlEk=^`33gAkuZUm(v8REE=;W-)C_f<1M^PcuJ5m?-z`Z5U9lvDBNf;%B^?{Pa zhMw5Nmw;k}@@Ho;&p1A}8aXkaC5?Aw{}=hH^s4A(%P(ko2K7@O{0GKrv>bOIxzgE9 zjxN}~`tDslDO)bI=MqDY%2$#rBH#RZOTwu4Td3Pq-mbVW<(aWfRI)jZi>Dxp*+unw zW@P_TlIbP$--)bVWz8jI!9-MDWg0+7Tur1l;#avisk95}9f_tX3)wl_Bt_#g<9&iZo31c$_50e|TOX08raBt? zuPu$pNVcpjGX?5hvC5LwDcCsSHJwK8Ya?3$nG-u5j7uq~;ODf9$R7v`a(Mqu_rR6E zR-D-r`AX}v+vO474MqZ|WG|4^3(-H*wCv7l>G<%L*VUVqZYjB4SH3xzSkK&Azn(@} zOXPnv{S~>U7Zb_U5*P;g%ZOTa8^_bO6r(U7LnGiu*xCfE8d~At5i@v7Jb(D+R>P3L zOVUOjcQ!p@6A)*mw@xpOveNH-Qu#|IZ@zcbt1FH_`UbfgO8l>64>*qV7hR&PXyiB8 z=^q`BIIPMfq*2^=hr!Fev|M`R2t2PmyRtB0if6sI(Zd{etozl-qrs;&Yt{I^Mat2` zVY}K%WqYKZ}zI;%5LEG$=bLf&vS)(p0)3@b?dFU0g z_mqF^#nOoHv3usks?EyofiLnbE6rqunXvw8=%D-@^u=C$X!5au|^$c zz(;_Cg7iz>W$)=vI2)zjURhkIrHKX&Tw#R6z6}e~ikFio12IpE|xE>bJPK z!bfdKH4IJdrSdi{SWgj_O+5FOHfXNK%Hiu4x$vXM&pqUwQPX`(sqAwl^h!ibY-;PU zH}-r-DuO!Ph58tAT<0s{nY5zv(Wyq9sjcCj{+JN1X*j`!#r5aYd4a7&|CCuU5}4|b zX5N|X4}Uaw;dUTV{gtO2`8|@cZY{r3woGkQUKcmB#nC0`Cn@Sq?B zRamOp4q36pbb$?N+VuKM&U@30!!d8M8=HZXtFwyVh|D!vQD0{jwb89{I0>qq;$D}}K6(*v$$i{&*HDTAz$OVZO^!d@;q1^bPLdj})U)ZXD=@5F7f zrHZ}sQ0gzwJ85WWO*1#|sgiD7;O8$aF{cT-MudyG5a^KVnoTz<+dh=tK}-nyn$*-M z9;|!o#@KE9`fK($dE&$$LlyJz6?b6!%EcmDMpAs=TL-34)TD?P@AI5mBWu zPqq%Uwj4hE@@V_{Y2i*R5(|qW7Xl?}9&c6>Uv8NScl%bqQ!dag z08LVxUIagK;`y_F{L841G&EZD78RT*U24>-+d6Q#Wf3|*c_JLO&LXl`7p@)a#uOFI z{UIPL5L6#^@)6{MlA}+IrpiOMQ=ZnC2gXavXw`ZQN%NOwXS~q;S!{(^(tL8ym_($1!<^>0)~K ze8a+1`Hu#{#M4`zJrtpog{T=s z=qK_F-dj;yD*^?1LkwR%tR?$?dj+Y*mxvHz5C7&%^Y{nD9NdEae0+S4Mjna2Bq)!> zM?!;eV%2L~CF}188P!g-I_<>Mz7^vk>FN8L#`-9oJ zMN^u!1YoEDU|{UmjZhEUp`o$VkV;#Y=o#e;P0G9%hm!oM+%6JC=z+3jVy1@H!n5~U zHeAmr(wb6V)%YZJkK7Qm(59&UP<`Fz^@#`A8@uSy(!p?C2t2I?xj44exkV}1)YZ<} zTR?XFN4MNr>+)}P~idhrS6&EF+4xNwa zV{3kA6c9=i;Wf-HN_?i;fweR`>Wf`Pl)B)ZQ|7~p$t(uPI(yyKxvHsrvNE`8YFdTW z&u&dM`KAv^CedN$x`M%TS_Sxq8CpN$^Q1OY;*k2=?Kl}K+Z|-ol96dsLw~n=Cn0Ri zzmLiWt1tW0^CD$DteXIc7)_3%BsCNDF{I(Q`oA56TfJo$igtLUu;q1sz+5Ja)$FkD`>2Sd2572RLcLxAw4RK{qcKxxxVaI0iTtOeZDv%qrzCm$&+`ZoW8vJXz8MBKYk|qJ+b$SVUj~w zmR9KMk361tbL(gwfQNOmGo5Xa%8_czwZqYH23Z6zvnVLOvW-(LOYrWs_W6{z)Yx)caG$rQZ!4`MGnQALP4D1@3UhurVNR%_41;& zXP<+LlU>XL(2F1f^!3lEqbraET3&A%{!R-3N(tLWQz|QU)#)2BR?t<8osM^7wr%BS43q-ySt$YU_GyNmO0q#j>t*!)h(sgiswMtK&9XLFq>L( z8AuXk?TuPE_kBbMf|KJ}Wue+eOgn zxioy2zlnDovjgutX$@Zwb=HWdyLRqRFGjC!YXviru9 zlo8{tHx0zg6rdDvsZLr4=N*3?NDsnj8hdIa@Lq`b9IAlkrl0z~$WJ+ffBTP)BVH_y zR{sA{--+wW5+FoLsh5p*91Wgk3f`r$+N(!Nf+W4?xB6Yb;9f~W%rxp0UAJl~k56Wt z!{eE8s+sYE;?;Y2iQbpNfkXj=%*r+?agZ{K7E_wOJ#f?r!Ru#^INc{nU{mQ>VXOZ&?N`nERgj2Ef9+~!e^ZKJ6*mOc)rg#oNGc}(ZRyT2d@8&UA5)(+! z2<`a?Q5A>SPL+AG&Y4aL*KVIJaJ>L$g`_g)m;4&Gn|JImCFun;w6AbzojuLJP$V9M zgP3V#@nhMw-mZtl%{FQ1i%~%?8Erv}mPMoq06%Tou6gt3O~~@uLK~)<%H%_)owFz~ z60@?30ZbaF{Ovsa^S^GIzV^?K$}hE80`d|L0WTq;lFierLwagze=;acFP8lb%)Q&& zdx?J6dFnZPKhw}~oP%IU@@^%2LOTDiAQM4Ja~YSCNn@Qaq@{n{S(-+n!j?3SZ}7gj zkv~?AR{i~m4Ev*%E87J;e7WT$1bc(c7q|X7SXo(+)$fP%MNp5neZFxg7t0T4DkqO% zCu2EwbY-F`K$dQqm{q=tAyFVgJgy9xBG?mL6Ws6qS*sm^;kjQ5`-!AM^3_n^Q_p9R zBth2$U4s@KyzlY!3152;&b73w#FP>V) z{&5~74*kTgy3aZFj;XJra<>%CV{{cZ6dnsVizH@TyM8_7K}c}cxky-Wq#5VJ^AC7i zozj{nATSK=DR~D7@R1FrAWxi+*c|JL*jUEf%#MDh8NBjAEq}-#w2`q0X!eSuu7jcX zMbpp!pz7q#&M4b6$E9S3K}B&=8A15-^&40n`xneLu$9K)^#UBwMJ}o`^v~eh;OawV zlGC!IHS-Iq8yQ#ri`Vh;7kQult{@~vTV(kvvmSC{KUt};cW>(?Ra&NKlWB^uCfaa^ zQgT}juc7gO<-+}#819vov%CC30E)l>!& z6XF&Cg9JTPytfw8!G>e^)nh7=3<~Z?xEPna+(%9llPGa72oI&$gg@Rs zL@)=gYZTWG_fu$}kQkDfCEA?o1rm;T=ilIu(X*cezUJ)%xu7nkUyobYf8?G#RI z_LJr3&GMBAHR=FCu^U6&GSB>;zO0$Ih#^RLL^&1R-f->SqUM`c5dn+PP)6gr6RnDm0hI8TiE~EC)CpOm4Bq2m zyf;|J_Qnp5mR?Knj82ESHJM|qp%pxQ+u4N;CnMu$9a$L5%Rw3bb=G`Y90H6k02?0) z-@YlW0-!QY=zvA>9r5#pB$w|e{l?qaDj>z>X%EYt=mdeO2SBy6mUB9<_pFF~a3{nL zKj}z=jVD#WE4HiMs^E|@!-_f!YI$3i z)#Wd@uX#9uJ^((xADW3wzR5DE&z0!t_st3`+MvBg^Pf4Df5)GtG&Jsb z0;2POz!;a`X=X0nBkhLPV9;V}jAXGpSJd>D7-XSj@CC&|{0xcg(}QWpdvZ7OD?FO^ zdPQ3vJAk{!;LjVKMB1}c#*-S^Evp~ok+IY!)xq8-H?Blz#w|Qsa=xkxJbQU#P5DvA z5nRy8sKWUvB5>%hHGUFS@>NnK({I6#=GlZ2x=>hEZPrQ2`Z}q zWu+>?C0rE!)pay3)uCTVp-B)vGO4@LDuE{Oc^u0GjhixMF5aV$d>Pd~>jlUwUzN*| z69|tcm#I8srvH7$xh5>=c7F9}qf?wg>A9ZsHoXiEJ=Ru3V^JD4&51Z?02f8sFogt~ z@eE;#skNogE$=z!*1&j!X~e!~rtai8MDtrVj2GznepaS3(EzLX^^1Lk`dyi64vQ-q zbcIx{pSZw-fpGWa(JJGbl6WIRL=N^F_^+W6krn2R5#^UDJ<95ICW&j6o&s>PjjEl8SKesz?g+ehemF!s;IHrS{bGQPeas@y)WaT3& zUpxIegU2J(76PAqdkL12j0q99Sk=&2I)#Ho4~GH6;x;UHRuPctVXx@NQ~1;WB~`M; z?RTk?YXeExVYE40R$3S&*X%y}PL_ZpYx*%~gflFQAN_!g6IJ52C8do70mlzKkKNnQTZ!j9qm$|MNdb^@+%-`n8VIm2p|p znmW^}6XUap%MxE@*#m<-_wFm1Hs~^DryWSilZYvY*o(bqhdeuZ3((QZA_@VaBVrGAKRcqU zy!tPm8t@p=<0)!Q==~Sh%5TNR*_W)aO?!*3@(#Hx_m-o6c)L7wdtnbCPic3SzrJ0; z_D5l721bXJc!vz?5a-=H-!>v5^PXl0``OWCS1i1hBH1j6=FIXDW#;J3k6U7EQ*L>| zVokKcQZt5Ucr9dP&A1bH>d-MiAfNU;RL>%4Upem*fhW|PDtloyVe6A&)q7!2U1Q&Z za$MpLu9n%0^Yizk8!{k}s_u#A-EmiC?OyXa#+`$46ogII*e)?G|F>s+`bOCkAacIS zd}QntFDmz{B!CV7p)RGlg%l2HbA^@in|Anm&iYxn4YL5`LCC8xdt1TmN#O&tzva#G zSA2|6PvWks0x5La>~*bS#3q#d|75})8iNiWnk>e*WMrJ^Pmm#?%1e%q|AvzGHJ2N= zu&~`p-Q5KRWTZ|Nytst?5TcH05Su3;-9x%%7HLQPDH@>Radm^gfOg|!L$InuV=;yO zW_R&#|1smw?`l1o%Pf>k0U78@t!77?PU`0n(s7~wC8aeJ`u{!~g z0}jZc+2wF70N3g!^L2awH0fgL{@x-UYU`YB%;3RnjsyIUGn zY9QKQ8HI{}=$VqIiMc0ZGa(coQG^Whi3vl7Ul$gaVj#5TVXN|$YLU9 zV!55Tam70~1LM3{F?lu;POZvC}$ai5q2{q2(#&||L06y$0e3~ z__t*P5|@CaKA*GCh+1*5^ls*O_P2@bmEJGl{P|h@l&7LXe>tTW43)!hh#PLa2e_;- z@ye+R%_CYS0iD@lk$hs}V*e}=9P=V3N|+W@kB=DcY4be{hm9Td|DVuqhdC!8Jp8`A zD0EF#FG_HdTZbUjLn(O!%s+niJ{g@}Erp1$M;w(kNm=5Koa0vEgiLn7ac*B)SLt&l z0vpH3?~cZISjXY_DO}-~K&NzuA~I2~uKQ>KV2Ks{{GeePSt(UVkdE>nZRZ2VyJEtP z_Qhs@cGAS=p!Z0NUO;ru;(j8RBf!`9S0Sca^rnAcu;QObGfb*Qy_O&k+(Hb&W97A# zHU=eN0D{)s0LzLKIlgnA0usr1|JR&8&Vx(n3l;t#u~kb+dG_qto@LNi(s#XmTY52% z*uq_QFw_zhCwBO}po@z9lI0e6z{9c5VMRMm#$%5`gF@3XRC&3%64!(dCRgOD5-r)T zUFxCe<$dRu|AHb}B5%npv3OKr6h<&9w&{~*JLIyUb@F?iQC!<;U>o5c|R&AjD=9mK$MIFaQiW65&2muhj_84qqhP$1hoa!a$1?j5T#=Py|PFulJAYgSA90f$uIK?NFDnWwM zJ}}M&`gL5CcrudkNk`9xxRMpjybV@3(F8nXrze&;I#tjp(N(kc{WvDoM@wIM7uNVc zWTtIjuKgEGaPDg1lnZ;$xZJ~)M(5l)=R({Xo1)G2EEAh$m9)#7ILoZ=qkO9hiNC2|nS zKfk@Vuiq|bZk;5OuE*0YP8L^``qQ6h?*2@}Jr+o6j}8%viDD~Huoo6Iqq4%1PM3-0 zI%j_hs4W+Y=C9VlD^}IGnXUu*!v9KROsC=JaM5=v}sPX_PK+C2Zd87O!DN%B; zsr%e%#RyBz>Bm|J9|+!-bTMKh*mnm*^G2yQ(~u~W(zC8jW%RxU?;VIY07KIYkl3L@`~dw zR4I|$1P(W4MYOe@9f^sf4E{H>*)pI?v=%>-J}v6SHhYm_B|?om0l;_}=Pr}bV<|`6 z74eSarq7$g@7Jfwe~kz*rp_#mUo^Ztn$KDIJy^?Oe(ujdmxH+6tT*b@>cQ|xw2%*+ zGQR&o>Q74EVYJ84y2hG4ApnIPAfi&H*WI)VF;aCFZ+0U-L=LaSWrAvqbVbOJhk_vi z8d0&)%QJBKkaN<+c=uCOScamJ>V8 zU$!i64UdVi3m?)cXV5c}+?RbPWd6K)j=Wk9AwvlD#wYrpK!J5=SI(IrUk-5w{!psK zYsy+mBsI3BCDTlAS0w2>H~u$-(I{$Cv9`Zk0d={Z?r_uP`f9ESL1?o6CqlFC$J>*> zsVC>j$Fl(#(78oB1(y%!6g9zF-s>po~_o8A3h+3IeIoTd}YK*5>K8F_aoc4Q$+tlQl&Wgc(EgiyHGpnu|?!*-o3L{D;JR; z`es()aalqk;SMruB@s(IBv~+n9H5*bSsAI$O;TpeFKbZ%|T`BtOau{lY__1DX?v<`?5`~GA}5tEnI-;Xu- zlKznyXc=*1B2o=UP&y&2c(G=k+T=|SS_Hz>L;6WrQ=!OfO1_D@Cg$pj^I2%es{B(LP4RoY6RjG_$uPWLZ{ z2urY{P_J@Tf8bcS*I!Vb)`cyo=wPM!#aGvQ7n2mV7=X{uVe3604#PLkN6HjOZ)jHC z8&21Q$CK{^gj0ml#iETW;|&uTn9^}j2$$nBl<)(6ey@;9?R}|500|W$k_O%`e=h2w7so12KAtS(%1u zz&DpPC@2$YC=h3v(P$a6j$Rf80%lkF_i;_ihAz~J{P}8_6D#gN)XgZo>2ruu6aT)< z*x+`cuK2=8Y?vki|J_=hc}fS3u`D<)EIJWII9a7e8*R>IuO%u@9iUOX20SbOj(!gSu<`uWh}^2vZo zaH4v@BpP+x>KERnO* z8*RL*+^-U&)B}K5u2^Wz>;aN&%)Rqjt5(+1%T~Wxl6pWQReyC&M_G@h1L$_Ovw=O7 zBaDU^PXG=0k)fe9bGBTOEe%LM2C7@M`1gc$%SlEftYb`WJ*!?yg?)~RVfXRozbTg& zOke;J%`?XjY1f#h8%f5nVPhb}BNGGkdBNGh0GfCRZ9uCNnsZhSXEmQJtv&R7L2A2@RfRr7Vu8D7KNSlsd{pewL#Y=4A!RoM88*So9*?1{ z?K2)RXiJrU#CdH`jZxx)mYR*|`X9X*DtCEFB>_umxjyi=Xc(>A{Ghrc>-eLXB?W^+ zKjuJ8v={FSiD)UZS48gLqo$;eDd0t0m=*>R$yt{9$hisavA8?nTErU*x~l0*fCn?r zUFLVal<$u*vC1OX_@$~i!Mi96yd==qWl!GZSXZma#_SiTuemw9yuPR+s6)IvR4a_< zsIV{`7e(Q(pHA`~kjX_MIRdmJlEcgJ1DlL){}^TGhq_G?QD4uFyeIWxyTb4)BznlhY*uR1y?p?`DhAXB>y-`DzinX zDj_#XDrl~)JbWbshKJ84`uB~vjtYrFFUyaDSCPa)}q(uj2W}VRuM+n2^;v zlxT2~kju`YiTxB6SNvPw-065l zO0&Nc*GJRxwE?pvAO&v?#z5UwLu}KcxThpCRH9Z2-VKA$G^xCXUGu`A+E!!Bq1L-g+@AmBsEbgdiDqm zQpp%(9aAh;N}3bB(*pq&L>te7lfHNmPIp5$pe5^nr4gX>F4m_Jkg$3b=m?s_I#P5^ z#PuE<+_6ledJgvfA|plO<`k0V@PU|xdAo}Id%$s`89|AW)ZJF}DI5!U<|X>q!g#`H z+^5TwiC_cV=l*i_KLpPX*SoMXiDX9!xuy2_;QG^yL~HdC%_QTr9^Jlj!%Pnx`4gT&HOctJwiX!=Gp-S~sU0VB;#+qO}a zy#EL2XSB1t!87IIj@l<`Tu~%T-%}Zv9=UP!tgde>-C`bG?O3lxVvD*hn$_PFyx_pN z&cQz{ydU!P_*IkC73X?|I@p|gF}FN?LA_vykYHQ?7_+3rfiY$Sn$11q;q`OF!wbLc zc>MUWKJ_w7#}1pRGMZj&P%AFlX|=`e#-%R9vZ68uZQQ>sU5Z1Fx6gCpIC8N}rvS53 zxmCmnO69KKoiL=_^hj(k8X8{S_ycD{ejjvud%h};W$>3=@6)+}`K-IDFr;9{Ju+>; zp;K(aG++Lw$nOMV9&_VtYCihI{^}Nquz0=)yUuQGLU5+olcXLC^`tjO_SyV$OE(G4 zVs8}hq><%DvpvTtKRCr2&rn(E#mZjjN-@x}981;`(EjpIk^^kQO9U|7L#0^OQIuIT z!s7Oqh?XA$hvS!?3fVwVKs=}(vtnlzOJ44PrLcdCHuYrNde5TSCCP}EfVS;d7h1gV?894l z-!|j$P`2_g`Q?G-+!YzEegh46ADlLd#jMu0ZbOHfD^a2GI$>!AbuIRPv|Pl$`Mu_C zZ^Zz+sAgu*{fF%vYUW^5WYv8$qZOXjnr?w1+_J4LT_ezMK7NBM@zW47j9A;w0`Bo(|wwn46Zuxw*a%l1EXD1GB| z(z9O9BvUt^rVTEB1ts}v{hUZ=S;bpr{C{|CEeXx~`R9^^VzOBM^k-5Br=tTz3(_Qn z=1HRb(BYs68l-lZDt;bQ^JVKfR$+DB+ADr=0G$r5uMXwx{z$S7(mMBsjE3WQ^yt>!Wtu3pFB=cUWmR_>102dc#vb zZTKp!^Q&)Jg+%2WzS5v)>+9oO%DbQy65r8xCwA>PSe^%-HB<;S`qCNvGnlSh3`LVF zbe!Zt;Y&ZVzw&8+m$xNDoL~9H8Q**4~IZlYS zti@oW7;B4g#lsh&p9;NDzkRjZ54iPQUpv= zZG^Av`gv{OR%vLIQ2!e*Uav)a8d!3M{IQ%3?d%4hA0GVb>5CZjs31Vw^UBtP4Prm{ z!|*D`STr}==#G-<(XZdU%ZxMian>2GM9`e}D~EJcacOwSehzS$wt>UvvxvDW_o&Nd zM6kz>-S{tPM#o&e)o)^|!2k`b(CuW`eM6cyQx)o zle3`dDoL;rONEyoeibE@h5yTCw?Mz%qSFk`zdc>v{fjR~e3D|;+_~p1kK&>yyJ99v zv!iF|Rjpzz*V zf8B^@zwC#bTfdu%wLxMplo{L#%##s&s&64a_j4y$wPxp~>0~90mUHA=dQ`J<6LzKCv z@`!cHnS0Ch)Ee1@M$5z2Mn@J)^}p}hc)`U7y?Hf`m4>AZoP(ZR5MdOG$I%`FbB06m zHcK_Jn13SVaXIEb>GmL_%`Un|3Zx-nW~BO+#n`(Zp=V1;6(zND<)OtU{;88nA`bYO zPOQOUv3>Eg4&fKAcd6ADY3cC}58fK{oOoa7N-lw*@!{p=!Eq{^N>*2gmW+Pom8&BlAYQy!zc2Jp(2e+)6TbSv0;kcJcDP z!oqDJg>f<<#FM4Z{YhFfUPl!~3jkF$mLEaZ&0Ze3m`sKt_!uard0)R^GBPD2Eo;9BtO*Zi;;2eAY@ zDGiP&gE3$AQ?JvP{V1}MRag<41*A_SJ^H)8S*1h@GMY&u6Oa3(^LhNwe2TLzT}ply z*P8&=qDK?kDSOx!Bgm2LF0tfs>?POc``&m>I$P3ehBNlsLzE=6hf*@iQ z1$s!{!D;flUe<1TQ@)WL*$+>jbO_0bOIeP;)4(IE+14hzb~peN{e5<>+qm&oUdflu z>pvf4_;4^7l7RAtAAM5>Pgr`fR+ZOy_#)YzNN#}!D5HNWxxev~t#VurAVe$6syucVPTQK|S z6=j>{AX2+TDSYMX)x0Iv*+qtX&Q#u7Mn+{=+xgCDG(7G+bohqflN*2N2W6Wu^(<<+ zgG0OG_VLA%ZM$cWSFBMd$^jE4(vG#mYHr_!dx!8gQcX|~+58s`*Y{ul^|&)>$(8-) z{O~rvd32V4Fvr(tD$@c--B`j#g|o}*ubLoi<5ljNMNsF$;x0-odzl|lS$?r{+JXh0 zKkf5{4l+@BgeW!mu0TfT&zrSJXTYjYZu)fr{iZSS>o>w{!K|1SZ~C_q+gz~msCE;0 zDik{=6u(>*nMFnu$p@4m^qj{1r*Mem*~Jbmn!s(Xq*7gH$G7l>s75_<+V^+A`r;zw zJgN^Ol}M75T_un@yZEL>YYZ`!67HR57j&j6@n^Jb6fETIqIS62H&m<8Dc(}IgSNJ- zd7jOQ6EANiv|pLy_V_5h2oXFd5jO`=n1rTkJIKy_n@zJOvr5UG?#@gkkr3&TYd-t* z)1-$_+a}(NUv{T;md3;PGs~}%wLesQQc1MN_HAOTqM10(74l!4jI}>q=%XA_pYMQF zL=P()VEM;o%cHubqjS0a#x(vSsz@b;cM!HW_`M6Afy&wRS<+h~Ue^O2v1+FQy_VhJgwP26Ff z=A@MYq9=cZNu7pOC~}lYa)k01r-cU_lMKs-8w-AFR4sy)qpO@%7&mEK-f1_V~})5Uzph6fM%E)##s6_jhfDHk6*AtYQ(|nM@G2P$FA4rOTI7Hs`9$k z{{%25#oS?=xHjZ6QE&ubpU0);17OK4a9bqXZ~F0iwC_m`jrOzn&LksLX+h<&(L>7q zK8oj^Q?myp>0N3eu_hk7Jv|D}QQE2P;jtI-nE!T=q!nI1`1|sw zp5z3GChBxAk2MSjzoPP0sf;VwpfD?703-gMuCSj$xyyc9weUuPiu8FCg$IbTvuXWm6{UYBSmh#4Q08U-#)M z?Wm#!K(=hpoP$J+VJ11koN^}Bn&K<;2dCV_7rI!;GPr9TH6BShLr=)_cYfgD;2=VL za@;^lWU~=%pTP;I%0FM3Y~H^8F0y^;FsmCa@f`nfAP(=6ght34z`s{L0)0k?Wp=sG zz$OOu=${4Jmdn!i#roz#DuO0VL##dbXK9J+c2IQ zdLK=wb7{dT3RNCscYk%Q_ES)b0tShvl}US?2Q1~IFCS+Ap1(phY|_@$_7d|ccILlo zsk{QxC7Cb(_FbpmqNT)FB4*D9Dm8eND&8K-ti+xkEVjLR0ax-E0Wf?Ix>yU{aemz@A?uMy<{&_~l3;Nx*=gdjtFSy78!BkFt3d})g8fBH(#J8Ww z@pgz!(9806_`L$0VelVuM`u_B_o}>=b>Ex@1}9=v*~>%aY=#@~Dr|gZyWTEk#m9@* zjA4~dNp#7na?j|}_@^R?J8-~tx|FY-gdm(`e(I3CeC*j~$S5vfHOz{CSr+@<$YDWX z$+@&zCHX*a`t9N`V4^0&iun1qs#UAP_)uJHE?vt9FAdA|>EANKf8@*Pr!&=gqaA-2 zeZDggp7?`7bmAS2s18+;+6-T9B45_*y{ePIndJxjAcX|&SOkw zT{v(4-&<=etc$~b-HHMMoyOkS`iu80pos71zsQhAfOlih_OrmXfj%Z!)n1SOAx|EA z_f(PCIu~cp{Wi5vZzyI-4Wbc3=NCY4Dnir21x`G#vpXBwSh~${NWRFbz(I@NKWk1l zBiw#K3!*n<`FRNnLC1#Qn{z4aM!lNX%k13OlBKnwsg|{Xc3rNq`df*BX}ekSuP_E; zLP&au*j3uTj{-P<`xN(bcqKn2kvZWw!d=i6Guh)Q`*z8N*>Ai!@kEz}JdYAq%1ySm z{&Ls8S{h3~Db7zdr31D4quaW56nF@vum8|*G{RHr=79<4^@N&c>lA6ZbM-raJ8Mt! zlIThE!BsqT00P6F+@K4gU$EEj)XlNr!7O+aqJWc`Idxen424GovUA*KZ3Abb?4+F+ zQ1$<#?N6Y4ywm@GJWA2lP8E%%#J-nQ1PQe@NQ8)eDT+u0A+bbbt6FLgf=H~9jU=_i z9<)@7ipW}mASD}8B$jCSJ)U=>V?HxF-}67`@64PtQ!2^(zF*htx}Mi_(eO}P32wAd ze0xoKW=hgKhSPqY;w}Mr*Fm|0G?RCTS;SFS_$VOD(5Y6_U(Hcb0wCSFW@Hn{Mh4k>UOF?RRKN4~_& zoWk5LD{l94yY_dhi1HZu#h{QHTY6r*x5HJmn~6dGfev=X zcQSATKl!Crypkb)uokj=55#=#zp&0BT(FfJn@`3%Tj9ExT3vRp^yOJfocZXV7oB;f z3?g3(w>xgl%bVD)ymEx`0 z5G5tWSfoMhupLS^4OpDAwqgsPeyD-ge-Dm%e*A$YE{zuCuipR$!nOH_|63PQX zg70SCNYBjr>cZ5T0*bFXa-RiMeH%qgzIq;QEvCEhfk<53WUeADw)w0-Z)Fu6=SyO& zJB*%diR;Vg+Vc`1o$X03kUJ1Mr}eb%6p%1=-5}ChHs{QJ)`7+B;}ZAF`hBGp4Wa;$ z%{5ss^_8*!0+m8-I0;FXz&SU}U%5)-w1mqUOGg#QIZxO(wkO<+lQ;MEPoCAhNt6EA zI3N!=$Z}E!d{XDhdN=V}N3;Q1Zo^W)DDOH9qkqxYjTml#Yj;ACn>K6Kr^UwXKWde@ z)rgs>DSmKij{xVdyO;A_10SY8*22)D$r!B@Nh_{|O*VW?PL3N}i~!UGMmXyP?ed&Y zsrmMIuvo_dOIFlibAi*R`u(f@@-2xW$dr>W&ixY*Ira@xsFiB27=l^L8g7lXZFd7N zmtf&7G9#A0AinXX_tx!y&t&R1G>%Nj#tU?y0#Pq)$5CcpcmHr|Hx~5xa;!CbyX;c* z%5L0Lv3Bj2ipl$8c%@^_E;=7d3)%1v~_z<-K=+TFZ99l=g%{E@$Dp#6B;H`ua@HyA?X6J8Dt=6Lbe!%BnnRTqKQ{8{) z2P+n({YJA)Iep0z3h+Hk%M;bI^l6|=`WVDh0bb4etJ$7vvym4r{ojb}Lo{7O zvJYWxop{n~4jLbEVr1in8FX&y>sNyaO#sB`oOg<*@QZsbPTNe&cy##cByE+*TiQXZ zmtgrt=;U^}`|{bnq?vQw(@fdrY&jnvs zsa30mkw7whVcNBBEX@z_8@2`>%2PVvTZpCPmZ|nOO8hLA`#dbHLOCNvy zPqD1uyb=GGZlE2OEbEj8>`5MYpY#$@WK%n-YT}r&sadYsXzSu8_NVxRU9@mzWl;Fg zsACEz(H`(a`yj4(BbmvpafQ-fy%~_qPNhzvOCq;IYfvCz%>8|e;D*8}3Bk~+W~>-! zIt@H~3|mokyFM?U${8$8jd_m1y0x5jsX!?~xPwEi7N zeHMs*8~@P>EUxR@uyM2u-BwI8C)QyDQs?3nzsEWTMV6gi%;<}Mp}$M!3VM0w(1^R_ zQYT^RK0NIt<=Tl>y6nR*|HOaC)_*m_%<-7$>^b*iTMtMb95Us^WDwqS=~b&#Nl3XK z>sl*+HZo-M$<|MQ9~;@Cc!@24{yEh~+LGIq+SV6-%eu;Nj(fk$7&-ntzq8yNIf*(Z zy{6LrABYRI{j>B>n{9+RpUGwXyEmqAGiREJkmjf}Dy{QB3{NGCm;iCtdU2pg5x~6WLMbo&@#~z04?uRq<`|3LXc+o5OgKITy0qQ2vI_~$D?(k~ zLs_=v(z%?eo$F0ZITQvOf*j}{6ojSgmMc;aZj!x{_M_~L@}VjHVphE8?adRmUIDWB zOg?J6hkUT%gFF+HR`q!+!CMT>dWJCTPey%vh1*}Z2x`=(|dI548z=JEaw zES$yHmg*7iY7QSbWeC3D?aJ1&*R2x_uf=f-ZgkJjcjPd+9OW5*Em%?w%|6J`ryl;NcPK2BrQ3w< zYpJl{9Vma+-3IUY=b^X4oAP>k5x0WUO3BMRD6<%%a^r128>hh+MQ!2c<5D?|FZS)A zib*jjS9Y4(ON9J*RjFDv5W+0mS@Pzb1;YVLfE@StQjqJ}$f}EKy`ilvYtJrEbIgBv zse$;K&=<)vddLKS2pQ~WE2%T2duc~!IED;PtnoH5fx?t28HJ$ySbo+Xxr_-#x|Q!x zS@B?6w=?f;Fq6=t(A~}vrX+PU&QX5Ecp$L7Vo0-r-V?~?^jhhc}%U(0or z@Cm%s3a6;;mAh6f2>4CpU=835=RK9^4iCkwE4!B9ffWI@cuNFJG<&b04F%e6|Q)z^Zh50;ZbV{g8pD3^zO>a;F%w%jNe5^1Tdk08I z@@&&=XT1d{U)=lj1{+XXx3#%XJdSdD9iNe&Ya0K%wfnrp24pxMi`tQX8vHLvCU3+# zwrTUE(dxRsmYgyWZUQ*8t1DvJocZ4@n@W~BKO6UN=X&kgg^AM)VydlSeB&U$F_w)3 z?3x#lsRZ{)Z~*PNMwHl?lqckBMpvQY_9v!9F?6aq8D zJAh-?n@yQ)U3Mzy6M{(MMVbSpQ}BvKNMNfeQ_7;MEl2KE@jJ7myqspG8P(~ePt1pr z7ox>I5RS)FQ&0sOKk;rf{fdgh5-Jv!fUsFPwB1afe&S-go{ld`co17|&46ca5w0hw zOkK3N;%f)NXG%Egf9za>d~;xqP@gd+PaYfyiyDW8;Aa*|N#d?{;P6jSX@w8` zXO1ouidMv*Rnt5Tt2i}`YPJo(_apg4JRn(QXRaR)F1A@K87IRw0?Nx6qZt>AxR8rv z8c1J&eYQi;nObSAn%0gRLUS3|W(9U*hAuF{bL6hMm%NM)d{|DmGe0$gdO@Wy{G(%e ztvSR7DP>`Ux-@!+uTNW^S*F@!tbvq9c8r+qLP?{=vXU&!*&uR*3ie@V<}+?0YdFoo zfL6eAxN{F3dz1tU2^RPgLyt_|!F1f*kO2PI6}^{NKzJ>9vQ(Z%=z=H_-U0uH@=)?NWa@e=?p7=0yX8WAp9| zoaIbE1J`+j+~3R}dlyt!z3>J87B?+7~j_Zd&>-4Z+` zl*0o)Vq((eJft#iRX95Hxq7lOXSFZ9Ra=qHVR$vLPm4fdxjE)1n;987OPQY#fe$-0 z=?aMnGWwHY7r5IJ+h!vp-?54Bmj_{`cJzVvukLQy73wvkZS;uz)LC5BDBlXS9pFN7N zMo{0%4@P$F!YB)S^w+a%DC>3Er?VtwNnN5DD;L%-_JV1GZkf$N&YY)QC0V2yJNQyv ze*RxO_|={--myvVd*Sh=E00W{{r>ylJT@vc%KO0dB5C7x4V}phN-AdfnWQ;;qxW&q zTIMANgt$iKGkPZ8 z=Su^@8zksnw{BM#+_hqgg(BpG&Aj`ZS7AfC%nrDn z%tau-94$tgCXl0vmKBO2%5Hkw>QH~;*#+$0gUj%b(a?PY6+LoyS|+=b$+>yEURYd7 zE7LF<9S~B+&qZch(&^mM$s_q#3*8%SPqTCuuBwsR?kAhJvmbwRW8Uimr7z2wJ-&VE zx~f@Y#_Vj+ckAAPVM80E5Mp`LGjbI-{fIdaA{7ht3SKtsFJiHwRqp9>v1iYof}ZtT zq8&gQLkE5Arxfd(oVKx@9#Y1%xuzM{h6yWne&kw-$JziVaK=%nBv-2!J>3**yAVQG zwcz0Ib)b)sDG!UW9;u}wCuX#-P_t&(#TLg6fe~;1=WSB=TjD)f$OUM#dg2_XV@1f* z0FLcqm#HWICdTSS0$ekJ_5*g71KB%%m45Hd^ylYvx#N=+Fn!$$_;HgFJMaqZMf6I0 z`IT}NxcXR7v=aL`@7K$hlW9GSZ124^c716eab>8%EaE{EntY^Xh0@hRi>=!B=IVo> zIS7_U=882OR3jn>BKA~UCoaZm7GGxX-pGcATTkeE(Zh#y;y~dvvw_hE7A*gXoq!o( zBcq1WZAL&+QA8p~Bn0#I=o51nt(4U`5FPI**Ag`#FP`x>J6_K0$38%L|GAvAKB($dU&P6+#!HnFWcX-wDsPMqh z^y$qm3iD_ZyxkxhJ&4!y{dl4d$T*eGH7Lyrs*R zlSgDPW=)m0!gz|>TRsQ{kNpoyMd`4j4)<0gVmNxT%!-nQdSR^Mmv|pt6tNuy=9+u2 z167N7H3vmWhT#WT=xbLD{8NO~qNr5EC$ZdiE-J|^sG;F*^AbI(Zn-qR?nf3a5chM$ z=y>Jj%Wkyj*u$`33aw_w;IO0UD9;lR1j48dlBT?0iOAY!Bvro?x( zi6h0q%mx{nVxyZ~jN`$Z&wKT)9z5GPv2@*864r7nC|#4UEp$*jHk&wfTeJ?rOsH8A z#~V)fW9-ckDIRvsE+s;6Wx!W=P7e1Mz9Gll@5)=n0w!u}Z4<}Uv|H|_`rM&HWj*jh zq2r!3WI`qnI}XUr<4X5W^us5U7WTM>+v=lPaFT5o zW4F)f%r@;GF|TeJQ6CjDq09aV-@)K)tSfu#c^`jEM(X9i;pbeU!9iI2`=hE~6qWRn__xlj7aAz!93UeLPq3UYaaX>^jo374y(iohqx zP@0i0svrai=OT`QYwd5=TNGP1F&t^0NDv7-Dh;Aj^VoI+G>F5+AG3b-e3vjO(r}YS zs1uAwlvoyq9APtg>8N1vU=?%&?X4mGmmIZ)Q!DU^^%+xP#-de_p!+KrTr^`LQ)$_W z_`Wr;0S(bNnv29nrWTUK^9tq>%l1|Om9B}&!#pO77OEdxr-8Xz%{S;qKE{YR;0_*J zn~#fKtf^yPuXMW&I^Fy?G21G)ecN1@`SF>1r+09?oX*B>&&_)r$q`X2^J|pnuwtAE zWZ)KFDulwy;ef%mbQo+>?WvVMeyhYw0Oj5C-3QV+tlGmH7f4sBRnFLp#XC1*#bLZ+ z3*LIgdKEf?@wUC|SLsS``j@tcMD7IwR?5g$uct%e+kZ9%1|{(7At@l3Dn=%rg)Vw) zD#Meg=LRzqFXz4d&>@2&MheuKeB^dXUNcoba6_JN@{vTWxB6R4_~H&9VWm&%gc=K>0O0>PTISJ@pkLX#1Ing304Z-w#G)A z{>bxbqwCp7Fel@CFv#Bdv*!&g=(vxtAETo2_BP~z7+W{pS}@*h;waw$K=*3QJGEl@ z@(y?MD_R2i3-aR!6SW%eG<$f0bm>KvF-sid4{A?f8y^U=2 zW`!n?i2SSNVaL?j`s(6%zpg#!S*@CmvopN@YImUFy3X%)^IlM<+rtmOwEw8d-AWTb zwlDKx-R)I>NorCxrR%VkdG>u*gzOx%FEYq^k6+S91Ai)BGN5i9$BGr|?%r9V!n*mr zzPG9NbMs=}M^Db1_3Ni~J~;Z*I-8T*A_p)3=JL&#$DeiVu=%$>kIU#Ttx~)8s26|j z#mt*VL@cp&mg>9tEED$x9db!u6q>+eyE-(!pl2Vv}mu3oBosc&Gk8DQu#?lC?o7vBHiNVr30Hk9})grzju$V?wJ zZAjwup&tH~5BIjS3;*l2>`d6mZ%rDU^0Z?6&{f}~fDmy;(HG*bvy3H*P`Z{0UVcb` zGY%e7+ee$M)r8nMLDmK0p(akwN$^Tc0P7zKHE!3m&6vigJP4n$#hdwjuLw@uimp+f z&c|nj-VDr2d*!ftM~hL#S&j@%n;Y6;Ybdrj`@)~K{tb?@th+MHbo&u8$#8ZviH5BC z{RvkjLc)5svm^|8BwG>)WnvQC5SC#?vI|<5)3mc$Z9PON*sGOm_pM6QRmS=!NOoa3t7Njys%8563ZTfbC$vdH|_3DrP)xJm-s zWIYgsn){%{gD`O2ISD{EHLPzU#RPBMDXAXq2~8B7i&!be$t|(z&j6|O&Ekuq4My%7 zdc8;DgT#ZbHfl_i%EGqEzwn`QejH}c8-;K>KjL+MOEBN30d7-UoV&`s<2Z8U-2N#V zyoJem=Mvb~m2w5Tg=!90vjz?B1*BQ*E4b#lCp-As@4I_{g0%yS9O*q1WtywDj4zd! z74qO(Ncf9B>3ag73`&_Bdh>9iYkHsTft|Ju&%V^RPoLi=CYQ078MAc)oG5KL0v)FM z?1d*|{rso$xo2v>vY+?-Ol^&?^Gi;}al|u9Qx;P$<1n~Wcemp=j19m$pK065zun=X zusN@|%G4@!?U@_Du$ZtBYutV5 za^y3cg`Yu`mMFBE113Xe+4IV}S{cRDYAHtJ*X_h?$XcEXI4&M#}&^XQLH*)umhJbPMLyS|(z z1KeIv`Y8>UERQO_s8(@;@qf^L>SrA}>-PIM4;RNVNIozXY5h`+jHOU-JH+c zwx{uXvDLs2YqYhnE!C^n`ezf1RX*ExNADI#yUDY_SaiPc-QvWbU)pYJ)kT}C%qq9` z=8sRE(a9>ua$M@8@*b8EL7Ao|6>sswNn)xwY3{T55I!8sDu{yO4N=P9oARKDk zV8e-HeXotfr!B*3S5%oe7Mcew;5{axedVufLH~1&44~rL*omw6Vcj)=Z8TV1db=R0 zZ;9zrnOpOjECDCt$SXF=ta2gcknQaj---OUpu+glOW~!QmLlC`OMZd)V!QS>0N4n6 z#~s{pX!<&$Dx7alIG^_F*o*jWuL4-}7>ec(Yh*UGez8n{8_H%lQN9TmR&Pu0Ijm~N z+KGEEzc`tSu=K{Xi_LjA){GmH{_X4k_Hd1V=DT6UrR1HRD!K zn7i@(HQ!kA0hE;`LI>i_51C4Z@{ex_ZNZz3h}csmeyyOE&;q0SYkC;#4&?~J1ZnR& zq)`=bvj#1?ccWidj^yHgI-F3U@a?BmPaktaOqvUl;)$kR!a0R2DRAaBTs)E6-`eVYuE8v})9;0rgr zJqOs^$7am9H2_RUgugl!zMj47v?qs8>1im2V}6-ic<-OEy&WrSYJxE zs2k*dP)>qd(^U8V%O78#et9CoMKS6#tNgXC$hB!a0o%I548a!U&_Cx1xTDi;y{yU# zZo~Cvy8{CJ4mGRtVQaU>bs-aC>IYE3^jwtt^Y(4H_OIuGtkp0_-CX$LV(L?9K(%Nn zaqz5M6J(ds*y&4&gYnyu3Ydr`>oK)o7k9E`&R3MRL=&P}2}{2ndX0~}o#&?jmR!MC zAU6ld0|GEp*dwdhPiqhUh2D^^J-xw=22-1`ZzeX01#U1rUF^+EQ=zT4T_$LBC$|4K zsa7#Iy?TBAZs+#XZC`x|OAy?4jN~jzIny{&bIQ7)untdb8%9=R=;ON)ubn}uiafQ+ z8@XhMrUk0vZd!fK!na;)Pp{HS|LYDLlJnYBm;{!s&JANe!mT;wLCMhh=MFUMy~F-j z_r-1kwhipX=q|XSYP483oE0J0OJJKCW>E53<-l#RhjnGk6&u^E8`3aiHB~p^!iJ{2 zwS!o*SLX7FM_ACGqmoOdYK1(ZVo&t9a_P|8_0gS#JY4fLJ#l2xRt?fZ8lt0=?YAB74&L&pM+I5uq z$`CplM_y$Nth`m0I=yltw7S9o15!-bGcJl!1;hFskLtyD?z6+ z|8@e!&X(-=AJnUx&W##l9Kdb?6p{fVpGN{g2$ATWe0Q^*b3a{^+Sbd$KC{XI;MUc}F&x3GFysA~-}Q*1_WE>qQH{uFvbLo?O6gtQt~1-T9aZ>eq8{T7_cH zEb-e@gW8P*RU@4)R6JuSC?RgvydLc9S;O=u3oxit&IoMD+07{AegM{?imsQldVEmd zh{%ZyJ}OqctuFT`X8a!Ec~YfOSQUfRv%R(8RoEpfx?JoER98dbXHu^mS6*_8(#D23 zJZnSQSZ>Lhsy@e&VXT-SWzWz=*Uj>>V2w z7uhi0S|R1?n6ss|G~fQ=#r^Kw=^Er@6+OnXRM>znT^7*IIy~4V!O+rl7L z{>td#Sewu*d}CSfj^FcZ(bb%f;AOp}-sh>Fn{h2eIHw^4kTP&O-E~z^K-dP*+}{(E ziBgmg_CLk)ecP|uq>HyiS`yvUtjkrh?#@Ylxs?`;TI<1+y^vlj6`)Na$qeG z;S&#Nb2BG#9G>eQqUgPq4zCDj56hAVYeD(s2Uol55KG8U zze0n=s?iT-7*SI1c&r@QGTrWtDkPvB917Vh(TFv_*Y1>oQKTRIN?Ig+RchR3yPq0k zT?jg9T!{VLO*H+)EiDYMe?ocfY^QV$_7VSQnFEDwic{Vbt+5@A!LQ{N;ZSjKzQZ z!x$KsR+F+~^0CYYGA!Y+eeNGWM!8$O%=S>prJrD*jVBj+1_Vq^H< z{xNT}*c6hZJb27Zb=?2(r8=JjpC}LR%n`N=z+7hSNE4OW?ZLFVUIf-XW1UriyS2!k&F` zY-Ub4Rz%wDd#C0^Jj-VSqqhZUR%isIl9Q;g=CigrU8Nq6{uvU4V_B=XU$ zj+UOePAgYeX1c#W<7NBs_k0(>X;FLk>V?j)_2n%|>;CV(=;PyaF1z#mVo-H%PyOAg zD_|=C85WeA;(bu()8iL+oIiWTytZfI+aTQC3uP~cXZTajGZ#j!YuHyxCW_E)liime z#nICu>*_ADpMVi~BZqHR{^2k;z1na^dL2&vzIfU5Z@2(+htby2meSdH+&o9GCfPn) zR_$8yI<4ptk$SCd?%Y&hn+LmM8HwizqUoAX|KDZi95Ek9iTJuaG*Khn2bdPJ4fzX)Gda2XgD_d?lgwTD{0 zLE%>ZZCT!YRmub90jqqyu{% zCv^#%5MpMYodd z0o)&}02Ahz?Nml_E?L$ufQ_=7Ij zJU$U+$VR#!punVCTbH*u_SGjN-22^)=Bn?oC;MId)Z*n-#2M^8Vat{Lyj;@ub=<83-am!Ei;kp1>eh$ zER)8lYo?}laqqepm!-e1-nDGH?mUY=6WR_& z++ikbSfa0d(t!b!nSEr~D0kU>)L4N`ZK7h?9^1yX2Gq%altBf3jNWl#oR>-1GB)#t zHTsFXJrpm}Cbl%P@@>lJ!jWAjZEBQGx5v;%w-W63f4h~$vXJ*aliz>;b-LB~$Hwop z9R{Q&d{Clm3Yyb`MjH&!mMw$z}%{A$^zx7{i|_LLzh6m$OkWm#5;a{z3ELo zOT-^RHcM)eSgAYOeY51i1bX>nSPLW;RW1_`A7nVd(s*Yuzx_nr(5S*4kPYJi()YlC zBJSgxGWKI>C(AcwtOZpE*n^oU(4p=Rf8SH~vuo9JWJK5K9bY{?0m^~QoG2@XP!!wu z`XP^9eg(A^sY*<8MPxQj23Fu$$vr?>w*@3wAO2za@;va(Onl|zYrp!llsF`waK2ao z1d2%x7OcQD%^-ga9(|5|LSj(g+N?5@XKh)$>I`dBFXm9W4uUAAubX>_wqfqw*X1#6 z4SFZ5z)1{Ad|4n*ph1W7oy~xU3VYEmG6dq*$>MH52@~e@wpY0gm16CA`}EH-(EJT|tEMaB48&Yx=me1HGWP8EGfrW;Md!{qQQanQc5* zUw;}`&4_4b=|ut7eLBg?t;S<)U zaEIWK_PB8B8eK8goh)938I(!me*lOW<{tHTGI)JbrexWT-CEF786)^gsmF{K-6BZ5 z4bBhYHC@SX-pDr4Oar(!x_3*&A|7~QlUG%XCu=OBRD| zSvJ!$x{y144Fgxk_i=YxjkdQiwMuiXVOfrn-vtWez`1_7Y;Z&IAEw%)kDqwdT+Nvs zL?<8}3a7j&!i|bO%XPDYlrC;{@rvJ|bE(nE^PmW%LEE>g9?FeZz%(`8SnW(FusI|k zU{QKkd&n=vXs%2-JHq%8iRdyOHHoGdxzKy_xVIr4c%q~0pEy88DC*@(KLLe z8L4OpZGLs{(XD7`qF2Wzh6|(@7YHbkvt^oJsAZQZfMU`n$!#|7kW0Si>MF>}f&e?} zfv3+n|AQ+lk6M1__K(UKCWL5P?i31O`n}V!lVq06%AQBicje)U85Wb+75mqywz~6~ zZr!{4&$v;{yglE%+OWdPl{N9j}DwXWdXy+_<7mSkV}$2Wme6NQKbgR-G_&(3t( z`t}P?-)+;Mb0JGw`z_owPBb9ggg>CFpge@qdzs&CAjB!%wawB#MK#N*DjC0(-4f%M zB^RsKwJhmo|N2~Mwpwb9`%5tB(M2Q-^gVp{uxst24!1@=E9RC#lmkgPV884ul67|~ zRTP*GrRWy-`@gr=AF=-Hc6qF5`=@!@wl3EdDtNJI7;qfK6eW zh~w|9C>7oml$G?cSyIzVzG4vmCz`*x#*K9(&47JNcFR}@cD-8yHPZIk@_`bzDZ?l> zO#KEAZUi9rt4pO1zyId&lS9?JL5DKp8ry!v4c_OhV_&=?D~%1V2ss{%rs#Dw({#DG z_ixAU{LoZ6#FBgu8sV`40HJ@5s~Mtv8HeLt(2VM7%nL^j*f0O;PaqOGt0WM_V2Hw5 z*GOyz2hn+WP~&sAKcFD+W%J3F-YE(ri~yNJefR8xgC)3?7Iel}xb9gt_VNu20qO{J zuR(;3>YO6 z*d^(_lQ9wA{NlS`;h?IiTrqyZvLjiS|L%>};9lZ?r4c_qy@@n~YZ~_CW`}?dBBD z=TK|T{ni?z*}5A3)LcltoPFII*>D3SLnN}x9}ZWVVr!OYRcp`9hqAQctJde9(`d4w z^Y%=;5*0=RzrDBM^u**(r-p*!=&l!YgTApJd<02ExB@0Vy7SA1b-Rm)q58ZxB&t)) zRAm}4%uIBq z7534&WPunW>o1e%|Lf|MJ&fCnUU)fZdB&ZR8+ z@-tjerw@L=ZOy+=0i%zap*C+dL!g+CQ$4T3%jY7!q%P~6|MQczNMAYoY?faq-HA}` zG|k304ld5k%h{X=jHx(q)FrkJi!J?{85f{9u?6{RK@X3lt(yMnfR%-cwn0`o{{H^# z%YW<9=_J_?QuGQNrvNG)mdQ9jX6DKG0arcI*c$-oYQb)3i+da{p1ACXANn(kD6Z+> zYd0@`SlF<`#!LF&3-{O6=DlwW)n6xY6Psh?yRwFPFOm9r_tSB4+9TpKu>3Xm53`sL zk}ch!@`u?n7V`w8`87#Uw;72I2kw;hnX?Rn`4n)cCJo;!QFmn#65{(l-wT#jDA675 zJeOP(1AE1e9)G?pXg=n>Bt}A)BJ8SF3mkdk4p&Y&yeQ|9#T=pG{O%r7nK}2R#6gqp zQBr*DpxXHtuk$lt2{$G#+K*=CQfQPLzj%-HMt}bs8Lp6Tg9-Xk6((^^!;Ujt4tO`N z-+ukE0-6D=x43WVYzw4R=ySVr>YYdvww^~yIL&78V4xoNZriN+qyPFI3M#KzYjHE6 zU~*rO4Y}}wP4d*qh?WeS|Gsk{S8ni zBIcOjS2Q6>DXpqjJpXqS!NQQ*A~c$rC2)G(g*PT|yfl97TeDSA|W0Z#%grUwm|Md#Gq zhQ~L{-mNGDR+$kXHI^>vL4ng>%eSe@hmr~#srB%WhZ`GjQ;mdzJ8N2fJD5*PVpZKU zuG-pir+CN)nr^^502I{)P-H`=vNh{DULNE@Ab8W1Y|pZjQcsQm16~CI2N%Qa*)4aP zyS-tPXo;(}69LD~SN|_w-|1FGigeF^=$xMM3F?B7`$S|iVJx( zd6KetA&ryhNf(4z%ea6fV9}&uLdMqk%niV70WCs+8b;Yi(Q?>jAHnLxgUwSfZ%WER z{F*4(=_~wgy@n@-4Pt{0n}I#tss4TX^yz9h{Q&Jv>w?D{PpvQ7*!lZEafm;<&C(;Z zkQdSX_>H-7mRzIKvQ9qnsE0?+%@O)`0SWqgmWw(T2(7#ckTmBkVqegXu>n~xgz+kf z@xnNErD--P5f{zv+3+DJ%NDEvbVhM-9NXq^bVhA+z?4(xOq_;tqf4H}I*$?Vp9m9X zkBhFgI(O)jZ%jQ?mTOV=3ScEpmLZOYzYBR85V|hPZlH6Np&+Kr@ET(6a|FK=VIQno zg3$-UHCQNL3~X2%+Ty!o-^l%1xA~m|ek@$@_c(wFWZ{5h^9?hJs46|W!KPsIxnW(i z9{a@$^2Wj0=Yk7Hl1abbe*Sb&6AlAbBNGU%(+^D=2u_@lgW zfMS5z%U-w1Hb`#BME1dR=_CuY$q-%FZ7m)aav)^&o@05O?KhhYBsiKPcz3eCUA5(S zj#ti{4VORmyY%G$X=O(d*fwl4!~vVJmWZdlv%W2RA9q1n0<*WRZ&R=5DtX>yyO(kD z;-+|o*bO_*dVbIIZx_~szKO{UGQnaCI-ab7~a&)tk_ZV@yi15gt`qf>6&(l7z#cqyDTA%tU2)~G=qhN<%ZOLJnM0G-?m(9MxRfw$>-D*Mjz@02dqQbAJYyjc1|XPsiEr` zC<4@K({g)whGQrH+FkTXv5_Z^N*UU~SQAvwu zAC}|lPE7;bkqwXIiziO5EFh(@g;FDvt+MB>cAYaF!~@cGBCBY?Xf{_FLngM(oV0aY zoBw~W?Oy!7wtM^G#KUwM;`7V9TmQ~Y(_7Uvo|;pqt+VcYAZDZyZKJ62_F>mV9@c?^ z4A5Focx)Xpt8Huy(tXxwmaEd$N*xB0aoN4x&|n}3_+(I75E&-dUTv<4pidY+9rK6a46JkoLca3rkwt@HOWbDNn@}l zW%6-bosN_#r<$KiZD~Z0?RB1ViuPI)T>g!mxr1IDWq=E%Azo?e6I#P_IFT|5P+JhN zV-*>M`BPJLUgwYbE6wU;RpD#%g0=r-_T zqGTe=I##a@Hn#kG@PrPXzud(m%d@QhMToXyq80W=pB}V6SnluT4f@YsvfI2}Y5QI7 zl@=S9C*OG2Nt-_~29oQUK!f0B(mYjcYJQ?DD9TAK=RR8AAoW$8$EoBb|D5cfYM;FE zN6O@h$^d}ek%52S75p>Ftg3}yV2JWX35Zj;<7wa5rv4)xns|9o#T(b`FI~$=C+d|XOVAP>SllWg1e%hOM(WpN4y}_R>1MWr3;NX= znU2DK&y+pO{?`r?0y0tMZMBHX@&o|kl!9bW2&r_*5y?5!1@2BU7@2wY#8mFRE%Z?9 z#8|hXk<)1rhym^#cDPMzpT2%)Dl4ObD)o&7-k zdp^=USlouBq@3>#?E;mo1XqUqHH+>*lPt?6_EeVvg(Yy^&?vSvA^cCn@dY?E!QJja zcCq;f7DN~19iRgrG5wOc<+MMR@?|DimMRPWF>=lWb2$PAI?Qiy;Bi`d-W8wsJ-@l; zysM@HQDs}sclPOncfBUN1 z7x;~3HiMIBOx0#`2nCn)=~fDUc%~2mxP}t`HFo-m`zkxvqII=07ycb$q!t{OSH+5@ zKUZ_M;56ExkotUhTwAffVL2I*SG^AOBcy|+{q#e%hHm99tx4eL>P}BLO+NnM3&`(n zojOFW4DqqLiKA?la!WogwrIc8$sg$rfw z*Q)=93vfZE(r|As86D<#@?xm+VdBIwv;?syL?MMK3z?*96XXJtB6<2%`w!^wQ*gt1 zD|Re?LVFRw+Tl!nTUkx=k&$AuHFN!e3s^(5EDPgP)!7Ai_d9qWi*fCsrS0Rr4@MU3 zEn9}X9B^+m7kG<>{QUFJZNg`wJ>{!&V0yuqkUT-Tn1jL(Lu6rXmX zwJW1K%Oj&kwBnGPAHKd5aD&yR)Uq2=f+zN&7jC+oe4Hq=_70Hn-q+_q0b>p3p2=mi^YiGd7+ea&IO830(nLH+Ao&XHcJbfRq zGx2N$4K7X$*_%@`$lksVfFs2HEowCLl;5Z25W@kj2BXE#-%`7{NCr7OXH}o_Deu6L zr1rt@`EGry!wF-iJ$X2xI5#Npaln*@gC~8!T7ClF!s)1LE$m>*GDLx?j=qQMV))So$loTYkdS_()gPwhjknO|tM2Jq_w)0aLh4mP2nOg^Udi zWjDFR$Z16fBPJo!h;rw&uGL*5A5yY}a*-eFGK91hG2?zs60zvNrTWlB6Ag9iBrnxyZQWp5y^)FrbMK^wZ@#$zr4MF z<<#Wj#_-is%S}>(f1O_X(r>Ism6MgJq>#Dnpb`7W9OVs{toYLS4ki_B>^j!|7Ytsc zdt$9EJ(57tcl>I#^wjh6`aO%L(5s*~xkE2k91*^8f$Qo_WH!Nz$ldf$At}p5YZ;sJ(nzeY0MgP zFHW_IKdJyM?4IJQPq@*we5U~6%kax&MGr%#=|&lGE0QGhshIqb06a)d4d!ApLf-^t zu%(F%pBc*8)`*jz`nq5gFMAX-bN$!v9c1#a zB`!vgfS-frhV5YyJsINMdq57gX6s<~U z4=rzBlMr^B#8qAgCqr5l158i`H^xpzW*DXM93!Q8e{oB{{(IYW9r+@0SQhVp*G0#TH9m%_Hi~r99*kzS@W$9BJ!%no+-d&n=$lbJ zdph2nQ|asIgR!les`cU#nCOw(DhjXo^>!)B8&JAY?(z0aa=8XS1`;>@~`Uz>kmbMu>f zFZSLY+Gcaq1Z$g{Yc^jUI~Pb#*1Wk$!?^g%Fm1`^kk(`7b=R8FYopJkjF0Vj^-$PX zW@9XOoo90LKHDmM=+|WvM_8Epn30ZirhZ;S#%Vt6cK%m_hbMRX!xKb*_3=w~EI6CYuLxK#Ubh4$xH%7(agerLkA;?;Uk&q@$yw2oH!qS0DA^tmmR0XbLzfd>Qz_ zgAMtaLoZ+X=7&S!v*X6`lT@7d!6kNkmuVvgVVb{HU-J~bSi#a~Yr*}Z?mwEf^HjZ) zbFPoQk-pC=+V`O8g9#xmp1q&&y=#j1Nw2M?zm@f#L|%Byf(*SHRT%KDkVmR#!~7>7 zu?YN>Wg6ILYySn6F%PWr;rFQGTf@IsjDoyA|A9JGp+O;qAH(U|l0(GF&NZ1@mM%{K>#M~S)P#d5S?{DH0WW@Z9k%u>qMHv;RqA`a+|*zoX-Kkq!C-P*=K7L( zx4tXS_uPj>f76W$`f@4O}LURntf4jLeV3yJ@c+EC#ZIJ-a!3{ZUC!(3dCC_-jBZ}S=<8N!hv3)5G2wkgS)M30sIC|Hy}I;RjS=3f_D|jp z9H>m}46JWoe*eo(Ekal_PizpBj6gg8P@FJf zq`X`@%Hh^=<=;Md(rx=SYKc-SGk<6rPO!%7XVR(zcg26y^2By*qi`?-w;v1u$$W-G zK#Awyp3HEGG|4guHZkws>$|P6DI_v_Vr=@%i3?m4IGxPbmZehn5e{(*o9n~OEP&9L-ZfV!tuUTz^n8Y{I+Xw-}1KIfT!%N z3v$m`%{>^YhkG=)~LsA_cCT8cQ-$-LAqH9=lGvR6@Sp=m4jH)>m`lH^O;%}4Rt zs0s+m~CWC!` ziLGhU`T9pCzw-`28heI$YNk5H8wJz7~X##i$f$U^fQ>lww}nR;CyxeZiSkXjLdsl<2SGhIIeb9 zFTR2QG)Kn!eHs=sm*>A*i(36wr8&XJhk!ZB-RrcUj1!fXPKwF|;Q4c8ot zRg+RC-)gdb^gn)Br|2W|@Uhtv}~I! z1S)6h3MSRa`O41kMg3Nw=*ZO&km_FCzw@>9GHi~dHA+r1d9;_p_OIJ}XGG$A!SnoP z8bkem`!Mfpi7vD<-9B5nK??Ygyj5S{Xel29@ z%n#M+Udc=EnN*m9lY9ho865M^xW{X)4m$VUq5o*0Y;1b>9$R5h^B)&yg?k2%*&Eej zEzl4b{q%DD9UDWpefoG#g+zrlv+0#bPN2gb-!uz3RYRxRIcVhU?le(tappe;hcpj_ z8!Nw&a-x@{Ac`cJYf*D%M%4<+Z+|TNm=<=tZVGLUh&H*Sd^N-ATQ%0|`!7EO1^JDY z#y@>7)z)=1J}-|$MR`byPu2nDQ~5zVNsRzJGJ`zg_ah$(TTjeCOiUU={%xdWnUZ6^ zg7SbfkxR!Cv2K1DYsPLry055VS@(0D@N1+0t(lb0OZrBR9byub`8^2y44AU5;d{Iw z;=OA78Q<8A>-M42IhC?_^U0zH*#wp)FjCZtI*GVdF1M-QK3U1c34F%-D+~rMsK$sT z4^9Dl0AY8F806?!^Kt$?@+lIarbOaT#Ud<@zjF08xyp5~TaoS-?U1;BG(Np^pVDA7 z<|;;>gJNFk&P~}gP5G^BlP+ zpN&c$8&>M#e%Tht{}Plnwc=|3_3Hyr(At>4t|ie2MV3e7iEmj}_C=Gki)d{50J_f$ zkNxXk5AV)Dl!nxz(h$6k6_adn903C4J-|d4Z)35LYMLRBf$*dEYA^Mr^vTFg-CJe%?Xc8l-m_pMn5_k?*RFs za+E>z!W2SI4~NV;6mZNF1j@xDRb)0pzQ4;(&u+f&*2hNJp6V%%LD_cKw@=vSHIU1eQy99sWw8ov zSU#J1y*#kw9u(2WRX#*8Fs5qyyW#%lRfo;{-q_&8HqshKvP=YqMeAe&Du2NlO*xx| z8dj&Tq($Z9HzRi)JTpwx3llV{C|cH7x?)q;EH4!QEK$5*%g zfz}h#AI9nlL{Airc$$Fwm<-0wgk}{;87ns1BQ49&|7LRx6#aCAiy9>#5PN2954pPhCO^q%W;LbX0H;i zxc(UQl7(wg^b(w2v&PNfMo(gTqq$*52LLq9sbA^8_ispz}x4)NToQ98E zZAy*lOYt;=HGOvK2U)VmFMM`Bd}Px68$7W8cCnZ&ZdKIQG+mXJA!QYBL?8ez5yh9> zE3F!>h5>G@oX>;!3;cd$L96BL!0%wPcaG<~Y$~=WC>g=w^&mn*%5Xjrm1gmH)~u8= zz70VGjnP~UjYjht`(3w~4-h3r(x4vSWe^?2XEQ-*7H>*v-IEV)93Q0QcCcUDptG{+ zlGC0@Ly{Q4>0ddV>(3Lq%0bp=7>bP2qJfVFYDvq9T-;2P3ECdQx&QrS>b$vg8Pqez zC3|?F}Iq*~n9bK1lwX%#PsE zr#jp@$zSV3zUSk+7d5)8|Gtt!Sfr`UO=V6)`Lo~U^UfjuvlJ`(L?)hig_QC`maW!m zyIu5(hDaJ^yDxcxLc`c@iG>-COE{5{FN0qux_3(GMt$QgKE$K0Dd8f8hCyS`lhz9c zCy@MxHG8lUR6or6_215kS*3m;&0+w&<5$TyM`f(Q13U#ziH}%Fwlj^U&?#50Afu=C z=fYm>TVg7ZxU>65)aOFXy$-Vvi#*Cb;)376-E8`!v|IUXS+}}ZK8x-=eQe4h8q~}c z4S1T}d6OvnfeyY!BLH_jh6_8P%ySh0jJNZTbK>j|aCGD%3~m>goV#z8^|%Y`dxRHr zj)8>ioqcR^@2{`Pyh%lwp~~F9(#G+Zw}z?Y>k%LWo@`kvcpn|Hvo`5CD!_wjXk%z3 z&Q+hFURDmMN-f^?@HO~yHuYg3QaljTY6Y_pJ^$Zn{Kcl`@*7~zX?F1ktHWCmiP9bm zYOcLM>_315wIs7S!eR?KVbo}u8L&=ySNaHLF}&(nU)Q8Fj}mg{tViSm(Qf!|LPCU(pS63*)&wq`@au!quDE79mKk&!rSFNE4+RmzZNfE1S|Y>~GCZi;w9mCX zUb5xOxXbM$hx04hbScAfr=cc+(B*QyH3BP02JJng_V4d6K|Z-^p1&W`ewn`P9^ig9meebUk@|{HnZ8`44CCU0DB- zngD9_B)Dwnjv|iH!yt}a^*2&B9;D1hy6YVDp6~c|r^38t)%1H)hwGbC!v>2aZ;kbj zs{*spuf*$f1m-!jms%OypFUv01OOO%<@BG< ztI`sj=WK8M_jo|?lp)R9^>#aQrH(exGUa2>DI{Y0{P8ZR<#~0J&;d!<@av%mp2u_O z*_>(3YqS}^LR4(fzh1&q`QHPlM6aRtHsGbV%k$jU**pNv}9cU4;ya3|;5? zBP_mCoiH+CbCy_dbw^A*mR9H7Iudwi94kprr<-g)&*&*Ce`cA4wSQwCqKKfwn||}1 z3&*7neF{aUrty>pQl(mrfG;Da3X6a9TxP3Z0h~d)IVhK_9V>3Kbi!L0aVN>=Vf4Uv z!ujLUaKnkmF6^nBX+z6DsyR)bl;V^7!1CNYEDB1xC9ZKz0VE1+db1+St+9#@DSM33KK>Mh)dRXYbfZFQMbjGUlGLKu(!gwh8v>@ z#gz$2qDK2^e~d1h7Zv!#sJ-=#Y%4`S3Z0hg*214|Rebh>*{Xc|lCkTd!Y`Zt=+SR( zrV_cyNC94BpY*f-+Y0Va5EM6(>{{*n+jm}fnE2u$J|4f%!@lgyXDK3&S6b$TTy9Ch zq(>dfn*?aYQaE|%n*1Au<8hy~f0(dNJ@sHKP!$K2O9ppFd2T`+7`y^#O>TH{oi``+xsE*DF!5Md@9*|V9^_WH6Zov$3 z&H%P@=_~)@@IJt6Jac2&0&Up3HRf_z-;Qr;suXt&PjS>37eJzpFaB7kkwY%hQWeD% z^Zg#O)lKV?CV6$t%{L^k+tQkHXx|7v|I&$cX1e3qr@Z4=wbLaG$EVX3c@Pt6VI?JE zOAyMP?Q8dCSy7ibaD~PPo&!70B2{db@YhhjV_GH6LY+HNg7nslP75a{&@}oAPu8Wt z;)2)?0E>U2!&bP0Fz2bO?P;CAHq*3iR~BRr47}>oB112u)DFW#!j5K++dd7?$@(FVbbl;tFr9$FuP#^d}%e}A~ z>QkR7JNeA*skxu0kF$5+tci=QQ66G^z5GW~gd<1oIby8G6%rB9C-pPDSjBKaw4qP3 zYE;yYq=VVVQ1)$MwjP!K(!`h6%q(-wwolKlWjZWidm4WwU7H( zAB`!M>R{5jBVhvrn6+VW!g5zp1N29|(aPd|kE&%#*0;=whh#UT&`!+X>%a=O-f1P z)N#)+JpGX2%3|i)F^@eWU-RlKkJkDAw{0uKLzIvl&eVm@5xHw@cxxM~WE>!c znb+}ql6$hmgKI9KD-&qylwoH|k~WJnM!Du)*)D^A-jrv2W95P|yMpL}H6D!91hW~`7YmKuvob-E#qXTQj0IRS1r5G(inRGbSCIc;2q5-CwG3V`Pp#|{do+4oa&X3Z zkcM|UJyar;l5h;90c-ONflrhEHDQUgYKCi1{tpO}-3fv2+C>B|VW>&Y6C|et=mfV! zJ#6y|qr0f!s8!#YVBm^x2Dng`aD}45rnaNQav$Y{BXpAh{sspJ7x!kcp~wiS5S8#m zN6}%@w}=oGHl7u{3N6G7o7FdcK;yy`101KFOt*M!=YPCcxNQU8d}hB4H})StE;2p_ zvdmZVZD7o|1~eAZ+8{0Jq7@OxXev&d92j6>4SmqSgbdv*iffGESS(>B^c7alT{_q{ z3?rWlXrA)A`+6zWA=3BiZ}Vi%;GVP-e~#x0;VNfYS^h#6Ap4b|)| zARobSsdr}OML)mE>2KiM4Nu~gcHPK_XZ3PlywC&?44C0Igj1kba^t>Tfdjcbop5}f zG{5`(0h*zNI^Wc0BD(?tEFcaPD%8ul zt3+t2RnM+&7O?L8w~XVU^hyM9@9Wr$0&BbU!03J0wCo4?uAr-i*(6d0QP;NM>U^|&zgz|`kI9@kHt zt^__vvpEN=aeOr)I5c9_n{LWR?F+1{3trYX zJ1&yjEbHMNm|=5h6!%WB`1sEzP@2fk=n1w1`5XK!IxLS9EAqg zprY(-0u?3x__bF_7CPP&POTO2lP1iPsf@44l_&2|0`uXvvKjj6*gY}DP)ga1Y7`_9laJ>^}PU_O@q0};qgCd-y z<&@Tp7&4e)Ou8BygIog4hl-8Lvi~kN>iQ=CgZ|GCj#34<42S8T;EffUIRDI{X6sKh z@4+`zf+Yt~0<7@!r9o$pi)CE1$LD@W>z|bhX$Z!B2zw{7NF^w_-tVLmm)I=9V{q-* zh$WB%+2gl&2bdb;|7F}G^N`JuNKaDh422D%#zEeRkvkkAZUAr-8mnj4dkDdjarDWM zmFPxDk{FRG8bdOs8{xx)0H1dBn$xQDm^t(YdArt#wv4~c>@Kn~?*Yf$tE$OloYv@< z$uBx1LkB>C`%u5r0`ox%8AB-)2*W`U_-G10L2=ba&=|t6WPo4`!Hys_N8@?feK@}X zYnmt50B(W#X1bB=8t+!LBlH6hIfe$~B!q(RgV+Zk`dZ44J*f=F17_7JKulcoYJAwa z3;0HRv{?S)da#rn_INYl^M2b85 zd?ZWB1D=&63ez`@e8EhkmnfdSf=>eKl?DFx;af#;AH+7eF6 zEQBFpJd8btv3Fv@Iwc2akyp<5jqS_Ksy4D` zc%4Xj5quP}qA-OgbOMbU_zM4ZMu0RBmkAXY4gT{b@KCxZSwF75Yh2~tRJ=5v*~ zh>{6exoAoRUr?TSUAeR2AZd}zs=R-p5sm4e`n-QmyHS`Aa!3XZ8`MzfZ8HE$NERM_ zsl|2i0i>4rzL^?>O!9*)K!)Ym6ZThGCAAGm3<9X^X9Un=mIeDY<13hcg+d6}I`Z!& z)qb3?D31w}#ms>uIi!Sj(SM;qxPda{ii#OvWtt#xUw*8%7$vQlvojoJrP&AJ;O5l0 zXWzfcBtkb5g_JTF=>c`Vm)g}AIgSdo zX>s_gg~dm@u;+lPhr~r11xUo+AgW@!Iq^kPM>LfNs4V{ZYSEELikR64ltdOG)JVP&dT|ln zGk*mdKOS*d;sM`V%7#C|jPmag$TQ3wP&(g&cN>{~6P{a5Qb-se6S!184byxSil1*4 zkw*u>Nv#nh?r}wA1kqc2-TbYbOec3?+Z)THaLv4Q7_?MKa68gKA4AoXh7cq{G~R}w zTyPd#Wc6f=XVzB@Eo;)^0KVS>8Vq!0nTp7`8f+&9|8?FtXu2R$`0{@?T}m^n@c4zvsPMM*BjS7U3 z7h!wYmZi&@h)OOR!8Y4D2dKxccL!3l%bkI>AlmLv6=SLWIC6=Y;(l?Yja0p1eSXtl^49%t_BHt#_q?*uc1tR1m#GgGoV z=i4BbWC*%dZ=0uc!i5&ngIh3e_+zkVA#g}0TBrn1LBQ}FnU| z*PVNvFt(&VmzG%BX2=fAHXyDSb+cCYn%%KF=~~@*BJ74jX<1_FYRs!?3y`7(-boo2 z9}hmy$wm)I@H(mIS380!st%et+s;AkB09-K4`sfOsb>#-Xb2t_(L%BNGRcI@@c_hgN zr6wzS#h~e8meS!2=7U|==M+-cD7{0RYfL;!AahSLxI|{BUqY-4kPo9~Pp1J0If&Lt z!kei=n52YdW8}*#*v_Sk*dJ+YY2Xsw4v$*aGhIB!$N*Em?)CN41fnk(mSw#4?%AH^s;bj z*f9u0mddGE23ifmx2Nh*C2vqGP-at{VFJUd1)!EeS1oXG@H-3|XbhN045$Z7|M?~3 zcZEke-x*I|-E)bTMw(XWKQJFSJ-a#Qo?0dWhNuXA--%fN`B&(pk`>bt;+h4Y$E26C zE#@AoK+Kar%YFv`6zVGST7x`8?J71fl`4j@49&)4_KReT(yh~uuMVj_@JPE13M#l| zuu&jG$E5-4Cgehkxd81!(#gTkiL_i$4t}^UXbH9WuNZLxf@TBsjL^Lz2FpY3?aQ5auZzif8ZR(Bi|SaUMb0xy8z zPsR&z&SEN|h{;Z*+1plC8YCR_a5u-?5cmEPaD2aTD%PIN^G>;k`*>ZScy0;lbL z%Z%^FbW1NHS>dG>3_W(gR&^`>P#31^wBwC%(_$b3(Gqxps04Hz5jpWL+cX&i$o>id zFVJLMnRQ>Qfg3q3PKXEoFq%%%@#rfJ>*oWeroI}ZQ2JeZH?)unNP|7+_jlzf1$J_Q zwIAy-jil#6+oo8pE(Rb>D^_4>jxOb;SstrcE?jjgCf+c1Xc?E5&OE0pW|VFbPg*oC z8kgtc_ix%Aq&th4Y>;r2?>qQ7)XkB_c_|b$tkBA`IkZzuq*jv%;Du?Rn%Y2}aKrQ? z4*EpIxosYfE%jUHc`n~jpw8e>)voLII_hWD?r%{JjO63Lbh{?~-R|Ojc=t3BZ6*2# z88%@q;XC%Eei86IO4Gh8DmTh8~+i^KF zf}1t^D^)YV*8=Zl$MiM3Babsu$kL~wr%j|XEIlp`IQS?1K(xWK#$7-S;}F=K`3pBq zWvHAaW`H>&_F%sLVULZUTbQBZX=6CruWqk}XiUFP-qxU@&^;kRiO}wRxoPHfBWymu z)}*C3sxfJrHSK0tm$8u%`RTm|icZ*|!}qVRo!ykA)EviDCe6pXuS8R3Zw3fTe9X$L z`kqp94WjId0*NG>y|1Iy#6PteYsHHLW^l;WM%3xsZd~!lytehzk7(#CU?xVOBXMrs zm0iCTqNYN+Mgqi^+XBtZ_1M6rI@#-ATFxJwe({V5XIfH<%j~fuGcg)sqr-B&hk};4 zJj7t6%OUUvu#7)y1%i?WhJ!Qfz~w{YL|EjaWVr;>ua7ckF`l(q?KM6+D$1z*u>AHx zp5b<%G2cZ`PPCKL6X$`^V%AriKv$ZSy-lS}u3Ed3qgBxq@ej1Mh4vNQ3h+xVuyoqo zTw0ll(<+MzDcLgWp-k6QQOO-KwhJbcrL-?eYG%M|;c{MvU;fV7SCMv`^h{v+f;Ep# zz#m}&kyA1DMNuMCasce0y&#gB0^#&*PdU(a-)d33z}e#BJY1YIc+F7BiLI{E-pMS} z8MtPx73A!u2OP>>5vIPU5QrLW%9GnB96)Fi$jDuDwyj_9{?5DilHAdx zxQxzy>0kaFwKH+gai%4KK_N5C8Y}wT@V6`$oN;m4|LYazHFX4iF@H}%>>oc@{Du^v zP{eG$vkf{K`ydTYj7vH&sItW{`6Wpd;xyoB%#0Sz;KL~EC5Wsu&OaV8dKplM7s}Y% zpmG{3sY+lOEe$v}dmlJLAPUlp zPx8L?Aqo-`P6JUGMlVzE=*Njz=y{g3xdv9R12}p+rm*W4rGOm+9P~)59l{W8{%{I` zetFsTqTt(b&*7fMp@Rp{c52VY;^mz?cj(rEFI0jTEc|&`3y^fg$xdzkoSmaUsX$i# z(|To;F?^Xahl6tj=6Y<yzQE#duYW0mpxLrL_2(lcQPoeY$hd3LhWi;9DW%uY_E`?Z=s#pi~sLZQ-*SZVB6> zc++&1?vE1F)4n(3>0CX7invL8C$8P0rK`Fsa`L!Q5vs1Ux7^Y8G2XdJN~zFz)5u37 z3jLRJ@phSy>gwG*=KmozXH>voPcRxRUIAw*X8B0QmWZ@ zc6Myeix)4t?yVm;c zptdA7Hda_fM8nD|9y(6D1Jsu?Q#<54znY`__U$8IpBNv5Khjyg*Ve{G|;*?Uf#SO|7qz8i8Y}6 zsX98QUn{6ph=(hIkfq1zk7;r2Il~86dw-p9=8^9cBQjiFDlM&D<2#FaXktNm^ZZ|I zFKK&%wk;Mj+uU3gP=OxEhR={gY$n})z2+8jma?$2FOMj-ZL+V@shzJO(LPvJ_>QiM zU|w}jsP4jW5! zi}G4x)Hi*?>aB*HXc-{R*5s7*7kG9eHumfxVjE4l`EXu-BCCD(QfqN2C2O1P&oYi+37EFaE)9W+RDmj#>m!+LHRUWcIaMmL(JA(~A+EY*3siqo-TAq6D7Ac`Jw0`* zT9Y-;@vBde2G}Y1zPNPjG@lr4+p=X#>6G|6f~Pim7uMaf9^vBd&VOUuoW2Kv;~XR9 zVjZ8DsP^4K53Iu5garNbM|H;Ueeo%)=MGXRX{-|s->%5N(kS4V;5SeP!=am8hb)$? z;_B+4U=;v3>IqwL#G`6!3RJ3l0Jb8s?6a~;QCW4lzOL?76Yrte@DFL0uBTlJg)8r_ z8YkrE8xB$=zTJrU_&nJg`%%{Syc(9#r2JZ5JMjuZ$_QF?yn{{MgYKVL{iEn~^9M|n z{i)-u9Ut`V5AM^{7OFmI<)2vNOw7Tl&_p!5a^*^llpYpBw^>-k;&E_Cs`O`8%RD8xh{IEW4(Ik;|&UX@Feb_TjRbq3x8rQ!kgfG zsaj^{gCkHeYU+VMT6BE8Rpu~%yuqi%rKMr*?FfCoAt;?9ac0rFSHyGO#Ln^3hDHtE z1mQjW6+>4U1Z+zdo;r2P!`s8+cuCIft7iM0zh$4WXXy^KNd!E$b#&;2poT+} zpMQ?aui7RoEbP1KMvPR#Sh+l(rmoT{S*erHJo+FrCJ%+hKYv{23MP$VzSQ84hJc5E z{%&P!*z!7a{jMwAF`JAI98e{-PU2(*4CbRMRl{fPj1UKf_)njVaZp(X!LhMhsGX|n z?Ky&nc9~}A!`-?wR0Q0V;&_uHMoOe3vWg9lk$Sp){v^Y3WukzuaWEb{m|(tdpNH}$ zbASsNxzXXk5e}9(c;_lRFvm;$*s)_YE^EWKm2SwmUZb#c8K8qv=|n1O+>xw%VLd%g z-!tOF!e;Y)`cOQI_m_=^ewEvLd2_ZbpHK&)#8U8~1An~{uF3At zOhR`tMc1Pt(e4w|!qAXhSmmkt0kiCj?DS?&E9r%<7y54q2MiIwhhVD~QT`UvhSH6j zn5v0MxQfiXAv_V^^B7N4g2%)&vlRFK4OXNM^#xJiSnc`QVsY|93cVi>uHbj`a&7AJ zK0J1N%-bN6Q@0&9x2`UUwmc>Cifi|k1ex(3KV-=6wPr$z?YEJPuAIsjgy5WRe_zh1nx)y znX`riafArAs4*yaXJw(9$GB93q@=~K9&qE1dAf1yRxey|%$M7bdLp4ZDC8Y5)Q~RY zP8{OOUH|GdGGjx-ty~G6INm02H?g<6GW<9`@_AAV=cJ=p07)oL!W@lai5+Aq&Lk~k zDan4x;)@;s6fQ?T4_m%9&+vaypT>(TLX)1?vnY7~vgol6Z~1m68J%Ksr3mX~Xl11y z3M>-ilHKbCu-Dz)9RW6~EI(h2v+2e*0{5&(XaCu9@4S67>-4-yXCf)g{gO+ibn1`T zzAqZKBzie+CQb=~B-0MR+>OLTH;9yt$ZQ0UiV8xINjJ?nzfnTeOUDF{e~pEO1;yK3 zrOO<);66*s%J`-3C#K$w(>ck``h%A?(k)9ibpO(2%a)upAM2jyylPxTSXg#y*g=7@ z>aB8lsn=UcZwfQ4ND1@Ix-C|7pQb_Rvh<78HvsLrZmUy2CzrQkx$n!XD}%eR7etH1 zJk&wpMwPB$C2T+f^7QoF+uI{AcuFEb1>ckAB4N)>-u(Rh9?Fv218Y3r+#IT^o2czk zWBH5I!cv;}PG={jrC>K*yd7rk*eB@6T0%e&T^jJul~5=vQd#*zcIbMMoGDY#KxNr# zoxJ}Ee<%q@CNe#}LY8l@@!!)f8%tuV*@I^5mQ8#0%yt&P_2*Y#zI(|_FGDrxt)Z@N zsJqP$*@_?n{$ayn!LyY})mi)#AW6c7sa!Q|+V$73cT)PD;Bmg@=vT)oZ1#-&w^XD2xQ}opDNFUO z0vdmFF!|`8=8h3~0~CFqscAl%;23p-KU^`5-$$sSt(+yXtpxCs*PRj%%+Jbl;f{Q| z@%Om#$HdOD?=UZat;7W3DaD>zxEA>K3L#)&60q$ej=+POH6FQNB-iD&Ago#e{Kc*z z4cKFtCxD90tYhi2x#gs(0Zo^B7#gG^Y#bz?QD|~^qBb%IKoVM5ULH-!#iT)V*RBA{ zwfrm&W{+xfFC^t=2^|ewelTy6k~NBbgsL5MR{!}UaXx{|e8r%Nf*Fv8TE6MuSZjo% zUXtzuUb<(ZT=rvq!I z`1w|Xm>iXzy&iEw1#Cob?id&AJs?UGIM+&|t!vh-A!0be)zc0>{=L*JVhPH7Z_rn) zN3@q=PmT+CpEted-SimsY)`^)(mr0)Vaj|LzA*{8gIv@&vwdXW{V_g9svU~~efQ;D zaejWV#@xLDu8Y6QS$zmx;PM`?jF_beVN;mV)jvHr)uDfuGNqi0ygeu+1V>ME{?XhS z-`lx}CnEF;iwU&eR=Z|;=Q)H9nnSBD5Ipqhr z0Jp%Th^g{b#trd)ctDiG>xT9vdYHm-yo>S5f#ggn^9_2}GTq*Ezx#`C9 zXiwLzyP%}x2H|^(pn9VL7+uxTcHYZjEoE9P&ZCGoD7Le=-_SVv!p)8BzQT^>eXSs3 zTcj_SKl|}tkrzE3F5;E|*%H)4zxXJfZ(a~fUsKH{=jHAq#cm%eR#!ZRr&}{b;P0(QuoFzEoXkhphDP!$${8>ZVmA1FP%jJK%R!hsTzP`RStt{R0 z=K&lP#hTi801KfY5Q8>ZzWL$!(m8w0`VQdc*)z>L3?A*f1wnW2;ln#kSP_!MC~)d5 z3d(3OA$>s5kxj_Z&YNA;fjQwq6a#ygOmVDPSyce~P~`q)=I1@;O8*e3v=*rrZ19>F zm%4hvf(3SY_LYW+UJfn(RmHU7LX9-CtK>dn0fIYRTwH7vkfens3TGSrID1{F8m^DF ziGfFdaj2wu^3fje>lqmeXh(nbxiPN4JiM2Nw2bX69kBjyZI9E9#E?rz{C++OAiRDZ zWh%WdVDOr=)gA&>gIES~%4|X6yJ32VGL0o!ih3DmQQIVVvkjL^r*P!)_NMBEtHy0C zbc*NGKDg_M(W2@SGLrypJtSfaI0t@%P>`Y#`{J_?76og#sMSFc+1T0!;YWL^{aag zT`^BvM_$rx#}_%Q0*-TwuCG1FurOF91puCJdelIrBo-MGvMN&JsVtx2hohB`<#kw( zCZ2iJ-{k%3p|Li(T6NHBh|3b1_0^+vECs?wW^K5?ck%sjA=jj1l7$9?Y0%eF`Qz^& zi+)*YimADI5u!dE)b|9qEy=H_h=pNkx1PA)Gmf`zSw+)r);t_Jf%@!de}pVd{6_FR zlB6Aa499wUHg%zpCOl-$?43F~7oL42m53eTtOzkWGl1APxEoTpC4#Jr_erVnQ7#{w z^J@QgZ;Wa^l@k_`DrP$B$}#{&L~7<;wXRkV>hvA6vO%&NKwdQ7s0U}sWnVV_ohg0| zyRezd6qRCTSl2?KR60dyWZG6o++r~m3{xil{@>Vt%AZxAt)09=yK zLLvE3c33ubN!%kxc-MVYl2ler>BlrC>;k4CCz_Irzjd!c-*l3MAdxGTa8bcGOR3@w zStZ87(aJ0v9FrQiGRd#Go;GZ8V0M`J-slT+4po4~N~ai8w1oJpc3%^sx@zano$SvU z7yYhNtPd4cxeKZ(>9(6%WWmmP9tRO5dzMhN*l-(UH3^?5wXp6<$epqr@@vvIZ79$b0j~>oc;R!9{p|Wh$=hK%k!hS9i#Z; z!0nV2o$#!en0U5=CvjFFzj8V*!{OQD6n^&bAhr#w}K( zg%s{cmyv}?b*9o$nebilzOFHMX;>9FH1>;=T>RiH>3#ix%zj$KaU_w79I#PEE8d1)IPf;RXT& zfvg09tiGvXAcAL40XvIk%29%6eP0-t6c#2`nGgN1V@5(Lv@gJ*GILfw zs8MXse`&O23L&(+qi)~U1o829E;1_4X?R@RLeAY2BfZv13olqN_+`n@yC}IcqlpLR zdI=4%NRKr~)INp_1+@pGm)BC|oRZPD04?}S@d2zTRPfYVKxT*|rXBWqV#B3nWK09x z7Jrf3n$bk{dnmvnz*GMQ&x-Zm#h0H+aSt)T=HYJ}hy_GN1PO4{Quhu7@(+C-%jvo2 zH*WMs@B&W9Qo4iSrH-1-O)NphHKei85?nnfx;AtGB16sItv4#+eOeq|ICuRHe@v;_ zX5iETEu(tPocHou24RX)n`x243+tMcxbXu{gm~JzUAuO9BL>Kt71tDEd9?H*ff0k__ldpJXs= z!bnfLm$++X>5W_lkQ+E*KOY}jaCC#Ap%4B_m456x)ZSSUPT~_r)>_8m(uqdWECW=E{W7zH8o96()D>A5-9gxjf0^7qdI zg7--;TNd^2@WP0Gy$cT#(V%5CqFGEk`r$ml1t}_d2!bjpE!`O&3?K$@y%lk?)llCK zxER?8(r}=o)*cG#x=PyYab;>0 z;|d$Q#!4(=oP4vFXQ&YngfmYpPQt~(NR+jB^Bo;&H2E$boBkshbw|TZtp3&mv{k34 z_%uQwGw?={8Oqnd8ngEgPf_tPM`&OgrMh%a;w3b%STQrh@%_ao_;LR^RDIzDA~X*Y zPPb^3OuL};B)>a28C@DC#u>P^e;W*3{+SNeBcjoS3esI}F_VY5vKOmPo%o{f048H@ z4V0I}FOyW}%=^z=(0Ix4ENvGV1q=#y+Z?2@YnZ5Qa9Ud0dZ)wa{76Ezvn8lEruUmy zZ$1g^1A!p>+|H+38P~2{5q_{o!~d^pBpGQn00b~%#-VfV0lkYcRKeBWi-BE*b8k1Z zi|gFm;asCP!sRrnvT^RlE6!Vm5Xd$&HGP~q#Dy9KX2{^-I)HKr0|)wFjl!czeT{<4 zz7lkKM>4xA?5esd!=Y{h%z7_LKhf=~{Fc2O2hw98c|h#X9P-JhbE=uC-t${PJ&@V< zj?=wBy9#)FD8xo4=~2h3sx{EDmcu&=yPCz7m6ie9w)Y*&W=H+NnjI#WbO7n0{Rtxv z(M@c@r$$RkIjpBwt7QP7Z9j6P# z5|{t3%^T|+lG#+lxPfrH3cxI~XzpT*vSWeWK{o7WXO8oa4FQK=n-N~7@BQRD8@=?C zR3jS{SnN3gDrm;fT_2d){Oxffqj(orRaxo&@>B-Q7R?#p0tCMtIH8^toB)@p!yb^= z2FXU~q|`6ewH=qU>NcnkKOL%}}3bCDH z1Blxk#wd26;1YYB2P#vF%G3^W8DRb!%rm!8kz3(DKgXOBn#B!-o%7T!2l@M$q^z(Q+F^5pnM zK6y2<gQ00m8dev#cktkA5bWga)oZEr9qpT$=@svU|iLK^M}br z{N~v>4H};RbC$C1XUIHA10JGQV}&CIe0rUlU=ItR6ewu1c61L-?a4l*V1g#o_SP)L zqSw8spZSMB?e1ODjdY7$F84-e!h1uh2;DedqqU1%&sI=MfPq6W2Q#vy#eFppP6QJy z5sfo`NAZzYqu+7~cmRf(G#8#VpHFqp`{q=T=5FAM*Dv)lv#_8UETI2Q+WZ@ly@B-T z&J6iRT1d4Z*cZdzgaS+5v?kjV+-)U{a1^G@Ol?O84JtQc2$0MW_dm`Y-Jd>u&)}P0 zY*SbEETuM6w88rNLI2VQ&oJ!U=kk3_D#LlsJuRJ({EY;KX=hFFb9u~uP^0vhkH+oN zx?@-_oBTGiCwS#B7|Ug}=0)zKrxGC%BTMZgM^gF@9HvEV_o<=RuvWF3ce}qnXu8NR_VNpTp3w1`B{5jl%)O~=w&1BUIb-ORcwfiz z_J!*sgf6}?#@<$}R8%(f&Xv>KVy#Nhu-_o~?+Tm}x!W`eFK`pfuTkh&fnX1TJc z6LA8!oEdntIJk=aH&mc1y3MgFbx4Hh|Ljjr&+qT)O5OtS@vlUsT7UIWZUG3R9G-}V z3q&nw1dCw@+LM|6g^mW=6QoQG3jwg~YkvO-qXbe>0DsBUz(6TdV-paip*m9ixkG2X z#L_bEg%`%LQgc_Mnn3BrAX7MU4n0#9rth(FsG2?{N_z`JEw)5nsZ9^sJo}6`U+^}R z8;H~M&TnjJzC;~A?09khu46(6%pgE*A|Wb-I}+=f3n#9Y4of4zrJbcI88=8f4WK{L zuj)9EAPAbI1;KzN;8m@yvw1Dc=W;kxyaM47M|p36o0@Qj7OyMAdW5R{|87tQ3PZ_C zltV;g+#q`NI{7T_s0m&zha)D7LjkIm`#^gF(h(^(Pw3GU0?C(HnA;=zVc zpI?Yw+>yz~h->UJ?x^J1s{7s@ur*p_*z^}L<@p~OV*L})UKghut6Y){Ik}WI_Z4{$ zY-G3FZZ-wHcIEnP;`Q5tRL1O%63Hi7aZ0i(I-w^YhfIZ|*qmq-zC8Tj@R# z)D~rYL-}|GvkW#wj8OOCL0v~5V%Aa9qc#Pw%B`-91ulhj5C0vGnlY*mj>@wA)Rn=c zP_&cD<(5;wU(+<$N?I5+RD|R5O|V9+MK*kQsAMQGv^zxNN(0X-8?{MsLBZ|-S3&e4 zr8I0qRea09oS(r~QVh%o-}sakM;+(-N0;R7lbK3GZQ0M3MDu%0p7m9=s(9M8R&;hc ze}<(IWh)oQWKC*va&vQ$HSZ!r;BNCgtee1(zE~~O2~6N&m-QN;B59aj+dv}N9GwK6 zC`l9?jO6H4KaVXxK~BPh`!Rx@4?6ZaR-qJ#+Ax2T`rHfKX8RyZ{G!ibsjlr$l0tcm zU)f8cmZ413wbqMw2~-}pZ8aA1p;FgL_RCQuUIvJRw1Yu6Yy2-LpQbZ zyJk?0!FNQh0Nal!+A6^!)agUdr#|4Te6_}~x~u20>Z5&!ut@3I;GYgBg+r%xapN9U zH=pmyir<=Clbpo{G5ad9et%@{a^z^<)FtT+FUXb#2-igLm^e({;0);}!Gj*bUT&zQkO zlqTE`OmVA#VNS)HY(NpN2b!XR$O!Ohf(FX3-%p5KLtCsJ?t$rkKY|{Kav1_5 zG;bIhD(w(o*x^_$7;FbHV3T)eR~JESzxYg0A9#MD`WOzTy+1wgmc#dhv=9lSD9LE8 z_)_bfX(j=#OVAk(fWqfDvQg#lCy?gp8$3CDNmf=iMqPCVN?Ay#=&dRPhX+fc&52Vq z;tt5jCHW;D0Xa!+nSTj>su=aB>t#f?FY~{h8zGU=u z`@c1PAY>N$&`x7`XwS0U6HsF)w>w|O>T1*3q)#(%|lXN3;Tv$vxNQ@Jm3G!TP+M;+FU-~RWY z=JY8mVZzg02HRsy-nyvw>!QxL!xSUD92*SjxuMdTHf@@0`%6RMQ11O?R8zG2e?2#v z`+?p=?&gT{t~Ro@n*#=v&8}cyDA_a5N$7;AT?9KaGqWo7x&vfAh!!>X zbW_*NH4~!?XiA;=vkBgimX{Uk|VSs_PfqkZr6~IC&c4+QqGFZY8EJ;7MJalsH z7`*Ffk*4gZ|vVAZWrz`Ad!raJ)J-Hx5FdRf74rTdHli(q!W-+=d#x89>7pw<@ z;lhJ?gKywGF?^s$AQ<|wM~@jJ?B_dnpy~k6DYA3-J9MSkJSZZTvpP$IMiL;Oxw^W_ zi!R3|Eo950)@r%{x}P|vC2#KOkefHvoiU5G!Q4bUTq7OoZ78_5$ns)tQk;|UeqyxF z=~EIS98*nXDFf_eD0Y&Y0&6(l4ovh{HZ%;y?WD@`7oWeP+ZixtkEHW-P`c#HNxrCy9OA-br9+*QW`Xw!0vP}Zq3v?WZ_or;q? z&*ur4AFpT(qv3)BU5A6coqB|kr(^Ek)oHf9_x8b#V`6W6rp^uQhb^ydM#ch%5TmPO z^3sPdZ#FiHn87lr0-G3va8#RUv@nO+1v2X#wTV%?#tj+jTs4CJ;!-pehjtx)wHN9Y zvf)v?;HY^88z#Bf1Ek{oG~OYgas~^ZV>oGG9LckN#ujOBSq4iyYD_kP*XO>;!XfZ@K=M8g-{1l*XNCcdLFivq&{ zLDZx38>I2;Fz8vZ=Qoz`38=HJLpdEPn;a6dJO05R2*U?ZEm89$3s(QA^TQhu`ZZ;q zD@IG)B7Z~7OPY@6*~cKuVO7uu)j1DFPf0}O2kU)ZGq@)hUC@{%++)YU5YNR=T3Wgf zIL?v)K)va;W7Q<3x`%rfGZ4uyt`NYN85xli>8tHU*kEFGlPT4;k{vd2KZq$* zJNjk**o&TSPL6d9AvWl0LhvHCT#iXPSTbQC>`tcg^%P04AY!ezpJpV_JmFVErNli z7Hmowq8Vl^*|Q9BJHu^cEdmC;odxREE1vy!UoTY&v<)AzYB5q(^M5xmC;Mqcs!wSA zl#a=48RU>dNbDcaD=sv2&8l&=#Ipjv0MW7(6)^7Jf=7f5O|5r?7}C!+4D-1Br!nEi zl0YpE<)Uw|SB-;0!^A~6S;GhOJWg-Z*N+D`3lo-iX$!&GK!=BXo!z>U>Njq7SLKbG zo{XCtHCYBGovv!rmOA%bauOHz+=no2FW>lhrdM&bmtsb|S=Oa*8SwzPQJjAyEClF^ z0zh0Hq%J@cWZ*`2Z4CT}vsDDb5)g0(LE8HqlY_pw=RK@ffUmI$-5?s-8iNS~Gh$7% z{|zdP)L~}pN;mA@9iPmAN2rfGK|g*zxnfTyEw%vPyRyvU3LcnmwG0)ZSag}7`xg~q zq7jPfPM|92WM%+<{_3cYf#cfyWw{>@;yn-5pDcmRlfE|jDFnW569C~saT@hHMrSx( zElrM}KQ-~1U&ybM7|hZs)3W(tq$ZcoW1d03LE!)OaLA0G}$tj6(nGS{%L*!<#+h7SxZ*nOE}mRh<(Xz0N7 zP7~cbb!YO>O}jepR}sv``m`Bip_MQe3B9tnrvnW6twePkBlDKUV|(xsaeQ%(h#{&@ zzkyf|0Ciygw2D$b==-$WF=4_JsF7k{2XOMJjKkxGOk5%G+qd2U97YX0C`)OWt+q_J zZ0}f4P|ef`K;>s?++qOs$aE&Z(|QTfT$ELh?_)0O&0L}7v|2_^ybwJ&#obhLxBay_ z7i^z>(EY*GK~-a5dfxT38O~A$>x@mTEDSXl{Cq69aO9#T-ZaT8MN%J0&jqVsZ&3|-=o z?aA;{#^de}dCc#AGF3g+{?YCC+oF47BGL~RnBTxEQDwWHxkc>ISiK|Zu{sMDzA25~ z*0F1~_G-5$37o+ryc5_){+Fd%y7;_Tui|VpuH5|9p=X9v(~2gkceA7pE$Ku*$o5A% ztONL*PbMEA4?M9M!+#2yFcwc0;@z<49Q6F-L1rzz3Y*EmqG$(^ns|;8ZF)ji6NeOf zq}C8RzTxKPmU^|^T4cw?iGGLpPVL!oQ6y(^zI4TUf&{2#7&K@YJQ; zjdRK4&dh9az+wY!QnTG`!uEt%m|2edX%KAu&Y%CC)8(LY_>L}wl~kd$Gb2gzA@J6~ z>aHhEP8};JPM&OzbQq@YehZa6c?^?Lyd1p2MOY{A0$rUmZuq6#my4iX1Q-+%5#VAt z_LQ(gl8+rQt-=s$Plvl=RwXFqBx}@qmoaS=`3|9Q=E>mNt%Ks6#{5Ze1az8&8XT5L zK|#~~T2`K&`7G)EK}#_;NTpQEgh_dC!VAU5=N1zIAyKarON&SC@|Un9TU6G$H)&4O zE8o1imzRj=0@nDBdp;~Y8fe_$x!Tdj4cSM47j!&tnNTtaro?WBNy!bEWSqQQcm`eg;#d6HSq?4fnC@dJ9kE*gf~Zr z40Yu^dopP*=c5K(p9nD6)gheL0OfcO-X@&A_bGX3pi+dB@?Ly4QuXEaP z^1kWAFMJvuZ_1>^U%k|7KZ}oyPYQp1hv4nZ=Q5Tc)=C*)^&)>xaq2vww^({Tw82 zQWdGbDXi{PnOkQyUW?>ciP~=unG7&LrGH z)M`63ozlm^Ysofz_wZ5hCATQIS-;KP!h(zquF)xMy0IH00n#1;{ml@?w&1noWY9{P zM;ru&M9wx0Cf^CNc0oKE=ri;UPwX#m%s4zs%o+!<4XZhf_1iz+%W>ijpO{LdOA-_y zB0-RREfl>>@q|^m+}kJ|;EkbCG)L&I?n1vh&~H0;K~V&vmZW-d?vFkh1(MDwnp0~6 zl{GkO>vnu{?tbwzpufkeIr)LGC*nYy8olnWt(@qJvxc%W2~p{Dd2|bT`>12GgvlqH z0EMoVvSN;xECY^uI@x{ahTZIZ@i01Xd+zhPrEwaLS02?RKy*GuvKpB%`yVF}|uT;_Fx# z^qiLYEw<~L-q!B!c)Kt0d0ek4^7Z4oJ6}7OK(x|%&3%t-! zlMayjKqWdU_OT0upic0IDCWbqxdvj;8l=%;UpT8MvmC@$fes9%K!oOB ze14`tp$HNtQ(kyyEiD)lcdKZH&_l8nf(qj@jr$6BbQfX?hz?h)KawCO-i*jBPAdn! z$U4Zl-P0E}!l|J2m(rj94m*kcHjw^CPCeatc4_fSfZpCvml^G65Mg~M<41;6cwmIH z{rrYG+@!xhb4;&kT>Y z=9D|dR*zC{{ZbWJc08q5Y1WFu+h@AaudVMCRC$C6m>lubEKP1_usDtimd zW^cW~4)_7{5YMk(vp8GtwO>1EtfEzL#JHhlanNDjQo72n${AtftvZvhnrbNCea|1T zqU~Yh(O#SKc<$-28Bfb-?T$dSbkGYO zORCYds}EXK2Xfm{kb_IG{Uv?q6BT*qBmtenAaQX(VpXc%PysnuIPTlOUpl~56asyW zZJFc;BNLP8$jDR9&cAqbtSqsQ%lf$Vd}>%*hXO>%)vF@Z6&-Xe$z8299fDUpwA}b> z*>4ZueU(3%B^d!rKNwZQaK5kbjk@Ft&ZdaEs`@Y(c?J2~CXx?hr_%*$+?S@3eD)MXa4ckCgXy?>7z?&MwMN9O|=l*-9}E-JQrg+`FPbsuZ2~Zjhc- z!TVe!KJCV-&>W7pQ)g{cNvg$}?PX>4xhA5G-N!1<;P2y3U0z#pW7I4TEElh`>n{D^ zRCv7`yGSwCB6fk@7v~_J--`1>RFGO)HWs|>lR$oWXZV_35);V6H{kp&QtAkR<_u|( z)%pJ31Tu~NCU+NP~rco~cAAKr(5rcC+DmBodnb2*)Rc%PguPd{}YHjfyZ zh{(UZ=he@M!*^VIoi%WeJ9% z)F7%%ok#b@D_7<|OQJg@hGqz8K0up;cXY!JC5%nBz+yfmEZwih#7rx5pDHX&)yc1Q zwQH>``^0}F^M63qri?^k@h>+k8m@gqR~c7WlX0bE5BghXgz!498F?nM*ojafgf|(v z*P!;@3I$Xuc=g5ChpM5Aq|EsC??ne^zeJi3q)(aN0K>J5w+z>;6RXs7aCSvpDoeEr z2=lQ_TYX6HTj-zXzbJU=RHdqUOV2M6*WVPyu6xTjramJxqj{8tY3FKh-;3T+yUjA> zvm53LS2Rog*>2k*8)vD0jQzyVJLb&+P?*Ut|-TU#P0IS(Z_6XE=Wg5sf`f#)Ebt10x9$xvN& zSf$vGN5bed?|objhvrJ#>d^ttJ>PL7#6sY89*>ArG{w>T%9W?cP%LC9EYrXu)W2>* ztIJ8NtV)AFxr_uA0m;_)n`}c+Kh2`f$tFF8tiL|=4>2n znWB@Z-Lz~ZAIm@tX4X(sCPR0Yw=N{tVR3+BGzbc5`{2k0(c&}ZBA5w({xnl+qa}>& zg*^|ZCrnOrio2DPGIik;A(&7wy^3_&GPPE_bf~;8>S!-KJ~FNsm8UW#nb93Lcqz&mLT<$hzlOzC zr@7H=PA~Vx*pG^D#ilJo=}?|xSu0wEXvdy&;6Sq6#oKu~22DSfPx4$p@$d|aq&LF@ zZk1p1in_Ru>-bqw-u-fy+;aZ2DBv+L?=ao(?*dW@HuiqPUdg)Tx5YyA83f=C3olmSXzApYzCEiqbUaMz@c)e-Q zBKQOv>xCZiTkyuPa-P#tohH~PaBH3y(?9&IthnKzqGCCJ+Q7?<$*UBzzDJgi z^XJEdiI*3#4DyNR1Jv|_zrQ)14E7z&bcv({jyQ37k+Rg_kC6*Y!PMNogvAq4y2p)u z$4H5LxwK&hs162WoyVa2)y+`SD4N0v1snhey3`@ZUYVun6@^-F$d&C?ZYqD1v_;Y0 z;jB~pH^1qbVHqlud*6puSlYK<$ZS{~7h`-!rMsYU3ts(uOa0|3mSxknDqde1=wupy zsH8ZyV^KU&=@GR|gSqu#@&%ctY>;jWIx?)Zv~9*1iFU0xAloZtO2#1}FoZ!d8q-%t1DBXyRw(ShwQT zo8nhYCN0$<}RD@hJ*prt{=!R`OI5ueZe?!;5 z!)m%&8@%9oasVy~1g=9iE^Q_G3>Kw1-;LMDm^;42! z56uG#0;(Mz)63%kxiKr8mL__k-ubZ+}*~)2V)guu-kei_x?C_ zJ?O1GyMYnwWtCOl2kusYQBHqZ?PQX7&pCS`=Ry2j?7CIqz4d{|oe&7!h7=2f$ha06 z1|F3iHqL5S(~XzIGmg-A%YdW90gkp6jY6A9zSR5zH`Db>p+5&67&xuyAlh-NQeObPKYC9qC8<~r{CF);G;Bh{f^`sj5`GsKQG3Gle_f=rIltvm9XmigU7(n7XpCgvW#=bx- z-DL!KJfcAiwf9FRzk?&NdnKf%ZC5;X!ja zPZb-6AD!=oap2t2;)gdv8tt2|%(@;P9*u{VQ!TD?6$=hGP>0BD-yMOceYxg);9UR<(uUarNd5Ow zgdio6EH>k^4Wug-(_r}Sp;-LX@}0JQWcjid{sa$)0X%flA10RAm$$N<%m4XN<97vC zH#&}`cj0p11k^oJ&Xa~16b(wD#`!zZoBPZ&*zW<(Vz>fuB!AK0Fzi*=&=jKrqDd>R z`YKJ$3nNF4Y?n{)LX0ebvBCJ<8$cSj4CO;>25y+Z|2ebm$I7Zp%x>h=Wi<6}?mbw! z*Zz&Z^s@M_yjPcp@h-VN@xER#^CtIgf&iy5sbs15^;z?@2xc6*@cWgWuXlFET9@&2 zWD`?wb>%5$d{`;$!!_+Fo48V^Q&!6=PyJp?YTj~7)kD0)oWe}!F8$VWo>j@IM>mpe zEspC6VIHzm$G*qPltx;R14qMHt$jQs$~+X%<7hwj34qRw1U?2(o5Kylu@3S0^Wnb1 z3rp-B64k`vLpGbV?!YlBi*^~5{S#=+O8(r~!DR`~L*M{$n^wI3#iG0Wc|X)B2+Wn7 z(SWbhsQu-`!P)b%@=JVpq^eW@nW`epoEr~$ zt?>%?%)*r)r*>9(RThrU?DcBAvrx9#X4m1T%WZ78pOt;^J6h){^6kzohbx;3s9f|5 zIG8*p@2Q%-$%#t6G}V;eJjZ>O6&X4YvKM#?bI<9EPqIm=ad!wU|e0ORKwr=<)e^w{a@`97?y9;R_%uOP#%O`bz_BkTmdu(}|8Fy%A z-k(~~^VNc08Hi!`^sKzj!UszgmG#wUk`uTVzRz16^4?%{ipx-F?FwR~H;`g(g4DhmxD|3xAe}+UjVM%z?8CI)2|=K& zk!%TJBY6-}Mttm&Q<7s!%{{5?JJ(_F1%XD4a0j4jY37;4*9kPNd3Q;-!utPF_9bvN z=WYAPG8v?-BeYnKB}=llXfeaYAz89TDpQ2C?|Zfyq;f*LERiLpqO^)kr<79BA{9z? z6lvG~zwX}&^Stkv=l%D2KA&gC(wu(3@AqD=`?{~|*@j)Ml`X9=Ho9KDlHSrvJwt2I z!#lqHZF3jwY<(-q8}BW#kmK;)*Y;&a>E&22mCe#RyZ`cNe30^?W!tHSp7<>|MfW34 z;c~O%v+t-n_1AWNY>Pj%+vs#|AHPkpdv>u=&W%;o775ih3D*6hE|DvuQnV)AHnM6x zvt(Ig%1?=QU6T@Plj1+-f3A7A@!p|Tch*_7SbrWgjBhK~vvWgP+@U@XQx12#@y>97 zGFm3_ecc}Ykt-q-IO}&fUq9GyakB5hn|&cV4#9mrEsh2W$!t z4abjiNXulsuebjk&aSu`Deud2XC|!h_6<{g*n7*Xx8j;&3oo{{VRuyB@hj4S9a5HU ze5t;OP~E0IXP#;Fow+ea3WCAhu(-H5Nhx2T1Bmr@Gxz>nKag36=%SP(#e*Qz)KaSv zHcjL&!NhuD#CkAPZesj#WM%WiM%aO*I2a30?L$4ojB$r3>y_DbbStt>!gg>0ZCuIz zczN>D!-Roh<#gi5CPLiZ8qiVwjjLXZ5$zA7DCUNNMmt63*Tv=u+TRXPV4%d5eKj>T zlWDo{80RZ6pr;D_6D(yI1FC+qMAZf0ro-ONuGvnB%jTJ*wDW`6CjLNRuGnZLNl`(H zB`ZDQhV*5Idv2J9+C(b;7LwTGCB?tDJ1RdI^NI8I#m@Xizw5WKIa1qYit10Ry!d?2 zDrCDu@G0IIKlXy%dlqm2dIye{cZx6DFK!!?d(nm)cR#Mqy|Uk<$oTc8GrK3Zwaoss zZT>HXo>dw}T5CdY&@UD8YHk2ERp~t(z~-0qWH~OKzkAOeTfg&J`dVF88$T8JN33eA z@@U+yXVCtsMbhz9uD`?4<;G=KTwR-WjE#)*%hs!$XG?sLx|WuCm=Hllhj(malhW&D z{k1Ce`;HU(?d~KWeyJ*%o;uk$YDd)&j6>GjO2*$tr<>Rk;9>nvH0t>oOV^v@%ZegQ zwIfbzDBT(6Y9w|F<@!txRN0hOX2D`{-u8$$2_t(W2Xc_G6Nz3zrMm5zsY@Xa$1ZFQ z65a}JBb*f$Tie+94qJNmY@QjX5|egN1u-nVJMv*=6xIKesQyo?EFQEr0-!7g+cfjS zF#ZQ$T>)RmwND{DW&QDf@dwgCfHN=*!B)Knd3Y)85g5zD5!^okM$jl9U_>ZR0>)f? zXa+2!eFLGhT<%!ng#kG^yeafJ5-TRQu-TRBNI<+nfAda7bo9mx`#7(nFXmf9ll^j? z24>nW4%48_PTY?Yk2Sgh;a;288cH}{A%I|Og3YzQ_N)~YNA6klCMsu0aTT@%Od19( z=}u(6d&WYmPtmg}F>T9#o4^gDa1sVk{Aqn@(`3uiK#BMe+tiqf}hn06UI#h_x{Y84b zh;809&KTZi&6e#U<}aF7WXxaKDCxWGogQZkehKK}72X*XdA_{nISBuquii*{$C{}} z(izQF>|&o;!M@aWeS^an)4ckHjj5@;oh!Nj`S!uoAlU|pWdCV*ZST*5YA~v(px_FY ztX7jgSf|dYsZdn*qRy1@1Z0hk1jY+|4J|WL&HM!mHW(W_riKsI(||ABa?^?kNWc1J z!%b25(LlxlHSS<_=2?ms^tS%_>r$w_0MuAHoiHz&xMEL~{9UrGL@u2=H3A$I7>scL zo@xNIQ+s6+&$uUwttK5>&~PDKaI{{AgAR8cnjL)XU9W3F-o3EzFK5ZA7nLqbNI{+n z2iStlad5Z=g~`BasBa6*O;ee#JLQG3caH`k8D8_|=O^$kUYU}cusS|BS#6oMQQPfs zse+@wOWAlYlnkO-qt|w))O8w5Z#`R3X0<+g}x0_eX^~ukJ|w5}x8!dS`F>+&dMUZvRt=5(EdVn@MkVso%Wk7-gI2ozfZ3sgc-1x4vZIt*S4HDW~z-KO2dNx*z;c)~?- zQ-F^s2yi|1CIarq%$(+GSRgZC4uUZlgn&ITnJZMlG(05a4(NjaG7ayVv?7}t1+iA# zUzxwZJX=d+Qe90I2LL znX^G>-IvE>l|QGu7QZc3NLseFICAqG@$Ks!Z)a%RoSK!VsJnYtAXUT5?j4wa z>*@V@GdY-x&*B6wH|L71m5N;ArKmIUqFLbNc;o!M&<8uXi9E?=scVOYi5CAp`(mVK zxcEF&7Kw@7i(12?>!TYTg4yq-Y>un!ir(tiU+lf~eb>k~-!+Z-v*%qvVcFKOaKx(Z z4i1Uzo76(`gyHoHp9$2bO-~<>ewm*?jRU8YW!j6)@Rt4q0>N=f?T*w?@QPhN&ZuVIKaW4|JsiLw;k3k_mn@PvXy2W1i& zT#Q|et_4lZG|NFv@4h!Nr;W=FACLFlrv)ZE2xBx9qFLpU-qBvi+jf->bGXxRO!?D1 z3J1)Sjhk56ofN6`QHfJ>!~L3?tAi*9IG(QecD$4 zqNsElr|V^*=uPm8EWJ7dpGpOXyFWYQ(0=FP!A~Py3*4_SWOHo$JI&8X2HZhU)7HGO z|59y*%kSu*wj{@0__%n-#>pM+B{TW$vm490R`G(7ocP?l~KunW9clR>N z$Dnjhj(oHunhb15oH)nj{_#La%mI`m(joh|Sn#zcCZzo&3W z%At~%#DGay*kc}FM%`#(3~321kIG0>K^uURT zdL_={0;KtRx&EqeTlcCdNsV>V4_u^RBw9WrzR^*gF91yO)E5tyQQ*;JJET zQz#5F4E3-wc}bfch0(?%1FAuw>3UtSr7 zjJMosFpHh?cdTFNsf69uF~9YA6V|tS`vk0tcFUb0rNy$ zd!kWPA?~s~|5UpQXjCv)6r4Ydq|Ao9?dj}wVTh?|Dpq@9-zTc-soB`XK?Rd4tADHI z&km58TjR~-BTmaCt_2e~PpQR|Si)>QIb>|`trvsvQf-qoVF25kjf+U;Kx$_uGnU}O zzk$FE_wLP1=5Boq#a~ih`?TTKJ3v*DQ)ckBF3e;mAfVrV!wCk^RHoHqi7iEmi@n!Z zxAoBgATLKodf_tB+TOM6*U=k7z5d-u;%jxi6?Fv^ib^%<0JhyoV-M=WL13NF05J=P z6{H09@Ya!FgmI{}(H^X~L%?LX4r%{A4|fYQ&Z3v4aa!=Rl6KL*l($k}n_<@^NEVaI zN(xjD;p_#YROR`*1db#JTxP&+$W%}YUK+A!Dt-+6^ScE?#b?Y;zE_) zUw<$|3|~}w#BZZYZ}dEAY38s9xBdp#GXRt0mWMLwdvD92rswzFXOLTHHO!nJtJz@= zJwSa&iHFf8u7S{*fd|s{0LA0B9XoiJe_pi>6AAP?Xba>~8#0PWSgD)0V8Jshk-jV{ zHR$2x_%FizFzru(;|b*^Bv*}g==WkvV*$H139l9`Asl#$E8GX4M8&wkOaQ(Am!A0B zJ@P}HyT|e4eKKFL#G8X&*H3Ry9fEXc1cT3`$1m^^VmzC;sht%=?NDlz2qe9tGR|!BDY4wB=TK z*S9WT#>|1vz(0MtxqO8od-p;VmKhlwEMS*o4ILL}Axs`GqiEq{SSc5BltN2s@?`+8h}+YTHT*DvW(#4m^2FNUV=S1?4u z(%{zzGnbYm>g2xBzlNqoegoFJ^~&PHB#KQ3`JY94{x8kZwD@if@CTL(c@Kjjla* zV>l(jAale-9Dg?K$uY2?n0X4`7G}~3xpR?(%{=wT5rm%{w~ z%P1HNCk=TDP63hWogwOnHlKE-^*^;f5iY zV9|r6CkrRp&8T|?L3S9KD#OV(K|AvJGd@!)Qk?yJsR+~si@iY_i*l=)?gC80A`!s{ zXfudT|}y*X?2y^ zH0s)b#T2|s8o!3KN`4nWEIEcY!{p(Z`|*Lx$TUy5utK@#UpV{Ey_Ez*&PxkPf~CJF zum1%@(DGJ=FX`QlC_jo}{&WD0k*6PRT2u>#SnT@ihi?p&F_8C?qQlCJo zZs{LSex`9G9Uq{Pgbox=>dp9QGjG|lZA6dKWHmf)?8r73$1>RYJcUtudx{UQy6p3I ztX>_697X6*8B*XsAEcG4&HjRn)Ju&Htq7C2z7@oNDF73v6tQm$axt!#^xv-6FW>2g z!h?V-;4k`N!34;PdhMHe^Rd&9y;+^#YOM%~nrWpmRT7nvpwvZrn$AJae)0Kj`lw=m zV3!O@ev4n*oAX3q&Unr<>>Z=Zy75OjHCnDF!j@N0C-ya)o z-C!O&wogSuIUefaP>m_Ytn(1}fnaDbSBeR{FfJ?^VcaWLk+lp8W_Qqd2ZPv(0IK1?n*noZ(nr55E^WaM5{c8uzXt#Nlp=11Ige&{8E z^+Gfi-Jl?UPyIiWQahA@TA}ag`aJd1B;gD5wXP7Q0u&T|Xy8wUunJQkVr3v4!h)zr zY~ErMu-CQyld|H6=CuAVhBYf%W-fU>eNyI`K}UyYE;zC}dRIi;_8T_w;U%}uSJ+q^ z-SKmH(Qf5fu3KIa@$uk1nVpWOiVCk-|FsJkzfqaBHPe;Q64{kJT3! zS4vr_$xJ(Lz@43ytXo?xK5I#fbA_+{;?8E_>a!S?f%E-@Zw2w#=o(Qm+L?3iZf|lK z_s@qNbW^aXsJ+T^*Ast?L6D}H*OQsn? z_aDP|W~GM$CDBbl=m@}G6?9&uIlEx)eZwnAebzp$q8nbrJ%{4=S5M!osIN`!{|g90 zK6sLxQ$N)x_t?18f6Z!8`;2~z3tiP$E>U^G8_^e?*)>k%BX}*`^taE!4$5k%1yVcP zBmFXxRB)3qwjkoFWLAia*uxJNEDbERy#jTfqaXSu8YcIJxmWcO6xS=Z1^A0PbN^s~>&MGMjlWWcQt z0s=d$v15u%)&itUX7MI%5w+|GVfg93-b@jE=3h?ZTr_XTunOI`h`9W}F)+QpKJoxs z<{}Hz-s;(^`G8h7)Uu9|$Rw0C0&>&jYs}=aPERZdSvEc%q4n@zpsA|QFmyW*p71YM znxaoCyr)i|#!_>{W(m0f^`|lT|8Zi&F>DV|N5``RVUH9hSmwN+2@M%65ztr8WG4Oy!Kn8~+> z_IHNT+80ymj2{tV6=bCt(mO{+M&+ZDViCV)yrqmPseY{S5}#DyJQ4aBC_^jce%EMi zYrA>r5-hOIAwz>I^Z6RpuFXtZek9!h{Z~kRF>5m8S+cXlgrCODKY#9=zebky_s0&b znra7hB!$xQqd+!eR`~4aS?Uy(mmB{}qY?S-p?|5@?Z3si&4Hd5K{51?|jgm(6W7M3rrxt^c zyf^@TSEPF2QVzF7cq2FaJ(pecd@3Q|2)Hqd#PU|Os`I(%(#5Ybv7}{+;un=lUG#I~kdW{8lKnZ)mlbPY9WqP= zf)Y2NM}OkP3ECNC*J!7b7NnQB!s4)Q8SMv~JVd4TYi_7s4c$pRe04*y4yvyZ9TTwx zupwNJ1)pu~X!exNVA(Ga69%7bep2M3&0l*@md2ZwPE?K?4Bsq;d+swS*&E>S5CRD2 z<{y1!P6+2Szb6)f@Wlr}TY#dmH6hO#jB>LKysOgVgVWzxDV|?y0S?Sy zeuL8vfZ81hEkC|zaEk+ZZK2B!POEL9=yrXH+2n804GuXWMCG`dl*A0&{`u{>iJJ!s z3aCea@~RTyuMLCvHZ*A2{OYJBV!E`4fa4mi^|Sk5Z_VJ)M3t)^xuK(NEqMS*9nV1Y z)VSf+R#yHRzpCOc(#{sdb*x_SG-mn6%r|<$`^n;2%zP+T6i%u-Rrc`$8+z*LGi&zg z3=3FwY@9bQw#9IMDOgZ!K7pm5EcWavpR^}5p@$5SAWNbP+ZiyJAkEfX73rac3Wpo^ z;lm-6`c*1BcJE$MS7var15ILfOhm(b9HIti92)4)OyiKPQfzzzl{p&Wu~L4JC*ri! zsrFT=qShn(X_6yKeCs}iE#drdY2o8wYM`Lyoxdd26a-%Y6ioV29BF^!Yx?ng1z}7^ z^c;$fSXD19fn!Iz;Y?QbZGeWfyF8;7=Y&c{Vb<(9bLVb>?0v|QLcj{qJHhPni5C~~ zK>R1(ZTLUG6Z~rC7#mOOo@8ZSqjv`MSByM=8T}0ga+8c8$_-5%Y)50nCvK@2f(t-c zix_w1)Jq@=6V@`-8@>Hgz7;9?0<`o-$s?g)L9S5}ZPC72Ve_*mx0xT&#$q|^Y7ogSG{<+J>`8UbuSLt`vUst zdoaf0$7IVe4?bGo1I0Ze3XF(4KAo>@lnXg)33hS*ffrzyj{D-I^0D$EfOC!XIOC$8 zLFw305wM+q^w=}U3TrYfGL|{krd0)JiJ3lc`-?cY&J&z zGGCTxtIe6%wV=@~Q(gV4io;lKCht`i?0k>y%h9^9>_gSyg#ECP&k93O`|G34dM*?>Yt_emR{<*TV#6?KPku1vJ zTQ%#h&xpb195~e57;K!CcH`R}7-*Mp2f#}L(?bxOVo~O9hqJr0>JO;}XU&0IR3)J=^1WgnSIO!6syofI8CG_;L zoFoOuVW4j(u4{xSe$b!o%PHc^PJ;ji!Vg6v<1+4({dS6qu3=ZBPKxb>7U|-EoZQgp zY8bcd04VcSk{dD~K4l+^06A+oIzxmKs$EOrcohOgUTzqp&Lh zm~!Mq)`r-HdiK@ilNu(ZXzR#(5D5@PHt5z*gVW6yx0v4ua@w(dJJ71Hw}q*aJrnx- zy0>lGbV(E_*L6*^$qOI$#IT9hho#K4VEC7%Al4J0t!a^4-zL)eS}ZM7`hQ2O;{U^? z@e^c!`SYmA_mGwbZe{BkQ>Sz*5!w0JdOQ5v5de2zqm;ZpGBWP#GZX*ec*(nPZXxaL zoNXo46>V9oLHx(e5~vGZ*f(j?l+2mgG3V50Z7}qlhg~!-q^L*v`TN;R7>I=E>~DFJ z(=%y38jWx)_mArA8Yfqr0trvdRL;h#RA0z`Ux0;#`{q>{d&^OuirCr9c4WnjQhxlE z3vhRSeV9G0MXr+VL2t!H1rK3>t^B%IO`E`$g%QmeOGn||-zupw-aN7o&?Vat=uQCg z4$lYo1}uI-%f%8aEG@lhrMQ5Sz)U28MvklQV7-eN^LIUuu0SexPDj!)&t1>fpl0$jivA+sdZ z-@l^qKxw4-q3U|!L8vn?&&oLd#vOGT5gYdh z+F$Qc)qxmc3X-BnI=TfMx((rC5FlZ5vJ48$vP%3)mGVE@OpzJnb~3%HX>EazTxV{? zviP{Tnuy_@vn9Rf1*qSmzUkB$a+Ik+5GL)s>zcBJQZPNCFiUnWI;J>dOyjey*5#rt zW=20OjZN5q-#Yi&v0MymmH{V}AU-#bgVi@#?ZsVvSPZTQiuoL-4OpN$1__5NAkh1x zxV(x69+>WXD~;rS5q^`MyOW8qUNw?Ahbk%Uqen{Oo&~Dv?Zmz;TYCHm%(H&h=IiVsucj17y;2KjH^vSm648v%&wKl-XZS||{%GI&yDP69qa z5)+Xf0ADD?LfDKPp_mE_&wy_=7xxlxfq4eY-y=)Ykmy!wYK4`M7sY4lbz_VjQQNb} za@o{NAO7A;f1)J><~d-J&iO-R)NlJ!{l6sq#2Oa>$av{wiRNDH`{Bx2>^$z|8{kUf zJ6UyvrIH)xicb#^G=#9Jwg-*&0C>V&l*W#rT(L1aQMNm4GgxZwG^?W04#GWul*IwU z;R{cV0{D=L%==%u9kYRM$Fs~NX#-Ti2sC8I8wx9P@7=q1clb{hkN@)_pyH$l!m_^w z{v7hwOJFMM;cuh_-Rj~QR9A3-9V}j~;kr6f@Miz+U7bG%eQt zO4-Nd;9rkBjYq*AJE^&M-n@AjeFvsbuMW!TK{MyRUagpreh4FfK%#lbA1}NG*OuL+ zGsP`=qOcHIVHQrB@fe{L)Y1Jvc`m|hD?r6b4Le%aNmpAhQeT)&L0h(LDUcOWRytoEru$P4wt)kLvmS&2z>VKzW0j7B`x`V$4p2 z@}r(`m!g$PwG4E7bRs-GMXPbGN)^sLvP>#JJZmm2+&N<{4~$;i0(t~yH?q+P5NNWd zRrZ5tQuL`j3BZ8G&J#{>NMmy(y?HnjCs$9WiT@3--UBRy%&EwRZo}O9^J!|Y1{M*B z4|o>SEmgP*s)J;05FZF-nk0t3JZALlmP|7cW=Z!Sp8$UG+e1hLtQ5g$$(Gv$k!*V* zP6Gz-hzw7ygl4hATk5um1j%Dyin-S>(Dlpppx}VHZr~C_FO+Z_!dDhtUgd$x<1!l4 z8CA@Y*r%nIG0Xx#{Jz?yLU|Z?NO}k5%F47TW{NAO48(`5FLVQqE0Tft%U-`17xw{j z)*m_&ow_eJ*(s&JdXofZ9B?*VksO2#=uDp%s83w2MICvTssfVwMzj_}qQkt1dN2RrC% z>ldc9dN!7!!h*Kfm>W+`F~8^nv?&GL0sJQF3rRZ?BRNZpo^hcqwV|#$1W=|pwE1{< zl3g{4gwK@d)ghf~0CXeBQRG=_|FV*cnw{X!U&Y@@t*pm8#|pAy1kWr&UuvTo##}%F zHm=B6Svj$@UAd~w!Q=iTYK@2iX8qXYxYyYUIJGGWZ+lkzX@pbt?ua=4G_g%MtuQhC7iOKsx0liV zWVXs>@OHql-3|!|q%xV&Kd)6xyg61@J782A^1Qap1(=9et(rReIm|QUD~GXIYETXS z;Gx=cnJ>H+%>^Z9_-7a!^cXCb=ETg;&it}c29QcaaK;;~0>DvSG5tZ#y3&=1`c`Sc;%!vet9caeruZe@F1{QGKu z;4T5QW)EZ)P#hmpiRebj1UdIc?N*xn!%Ss8myl0NPayuKo2YKntZ5Q{pNhURJXt0* z)e!yUmHaxNMqO>~2zaaF>2HHCOPS?Pcc-(ZdKFboK*=Q@_O(U51R@U>^b4yIxmce* zEtAr^1rJqktE|{LHiAa_%o*t**EzKG3{5N9jB1Nf^ZWaiz;FW1$d7`Co48*1R{G71 z*BDK{O16(BuU-8hiNP}#jQ;rmaLOF>>f?p{b8H-S8dMAGOdXBwFv0Ytc6-Fm%difV zkT+WiR97~{w-}rLcwRF+()a$ytAGdxGlF?d6nb9O^(CI!$s+r8CYm1#=zM3BG|I0v z>h|sRc`Drz?VrkTqo2E@6{|LJkJZ^vsof@bv=g>KhoTtoo(vcbO>3L%7?%!ai>Du^ z=v(0419TOImNjgY4nVS(plf<|m?CisKE_u@0&dWhoIU#IIyh?QzfJcbItJ>Yo6xT; zDc*nOq}o+RtQiLDQAB)l>BDaGxv(*gxl#^w(};!0Tr|TxN#*W_SO=_&RJU}tk|=-d z{%23UfO^*&0i41j5gE#&cb-Q>)vXYy4Z9k|B`h2Nu~#XM@!Rk0Iv=YrhlBaVW&j+( z&SFEmv4k4pEKIf=IFpDdFk-niFDiKpQGl=^}}{T~it!m@ny|M1?B6U8oN4b%{fOuTd3%egW#MKrw3j-mQ%iEi-l0}vy} zN!np=-^nRH^TJZ{jM_^e;^gT7YYjSVkZ{|9^QTUsybUJ5{8vU%FL5+q78d$SJj9Q_ zF!}RQ90-(Nu#SQ_gN=49@aF9IidQclsnJsdhQI$=;CbctXzyu-3czs4*Pf)0+aPpF zQ^~H@aMe5Ep)TZS5M$hZuF60%51u;bBwAKUb#1coJTm!e{ta}ERzTOAl&@Y5auT&Y zMx8OLg_;{bcf!TWKrSe>4neRDZ|;MkYIgu;lyv3MapMD#S{QXW$jxX=k)GeSIn0z$ zMhO!)e!>Ler{t!wz|RmAwT&oh4`AwzroOblGUQ)XrU=vqK$fMy#VolrZ1 zj_F3M2>se_gQSfqs&o5tV)nCdhKH{q`zeTfT!mIA$05(L!dF=X@87&CWQCE+h37qEXv5t@eIUQVqRKnw4LVN=0we3ibY4 z!9fUaeYJEmD9+A6*&I5ODvcF?GOR-lb(RfMJVZxX{-h4v(G76RKSv?UEYEvT^*69+ zP)S_Kp7fveG%%w^i;2Q53T*-S+&?-5vcfWg{=a$s-17y)RKNU+14oLVhZp}j9IyNC z&AAq{S^~3}81nATqhqfgx;{j)!wew~bT+?d`rNa{^e!MbPDPqgX2k8g%g>xl13lqp z+30V*9eUhxCy&47MlW2Vi=&EHjy+CvN9|#Gw$|1MA-2vd|3nz-@4x@Wi7$tm4H22h zu>#rg6q@!q-_Mc zhfsosTNlvsF-0$4RX(b5iue!vdmABNP;Wj;EEQ6GhwwRwNCn17I1sE42=%d;{;p|I zP;GyJv4SgTg`fZs2BvoND)(V#jO_WKQ zrQ!`yolmld?D6Bv;MkZ2=Ts@Y^bb#JjMmL_>StP|iZ_msrdM?Oau>u{uUkGFujC)F ziS0bu@YX{L5M!Z${<>;3+Gv{Lpd!?k70c;M**l%d`MYUoG{S8h1>y7S__!bFsYZNH z<+z6b1#ObWwjA@Kn|Uz34UckqKaU6_WLt)z-Ji(Op~#|7+#53kaxx;|R>d?+i;=^L1L(8&(MzEs5-)ap z3!P1>6x%=!uLC;{JzxQRr^zX_4o=RK&(?ZeAbRXL2f@b{tZN5*0x_`Payypa%ijB8b$IfllWfCPB=4J6Z}L*Oty zOho)S+AcPS*redvp%ok^9*+MY#z;J6Ii8n!V)uR%UWX?hE_yb1Yfq498F^(V6EK6ez0Yq(1kXIG*aSV89wFnjY2dsAT{DH23rh_FZnmdc1pQZ~1Cx~wX`1vs4XD;dV z`Bw~NX(NIGufUq52$BM~4`#Tfc8)>YK8u4Ge|H z0pTtt*C8w-l36Mk?VE9ZtDEdFEdq!=ZuS0SDWKdjfEiYm@(C@Y@4J?Z@dL?hBd(QO zt*f9K8N)=+w-(9m;u&gDm(S-z!h_NbWOYo8T6D>DS_ujvs1zVN?F1iu{7}*X&~d2LkW6Ll#bEA1&F)X( zV6QXvC5!uCr+Z?vY?!)J_8l35d@PAx1t0YOa7ManklF?mm%u_m!Qzjn`m(*mXEaMz z2Q#2O7FjcC9Lr*JG{QCU`Iz#8>qmVBxCm5Ud_;L+P()=V>Wl62Lowh(CIS~>Xm*VM zs$)LtvpN&7-2-_jOpZjl<#8oJG>~!`-3;jYEUj}c`U5{ERa`Wa#(ZTp$RdQ$f~}3R zM!*Uf==taEsO7ONpdLV#U3Ukl0!KAL$w1h+x%HH5EHjnZ5m52`GB$Ud#9g~wxz+W-9(afp2<){qX7?K z!mAPi))N4i+OQI!o-!~;7=Q`I#%aq;1Z0X|McPJ{?r+8n)HCmT)4CeOLd3^UtNeBw z_NTj#qJHYteIo$De}ajO_e<~}sCgJP9eR3Bnt@IiU%@a>u&~toZ7h#0x1NhXkH!GK zC8OT|!^q}&h7%bnv;o24&OUS1X zEA08@Rm`9T69u39Fj>Ub+FbA*HL_M9evzLqG)@ff&1iXTIB+DI9F`A-_QRM8Xy^SU zKKZ!8;;cLj^adroVlq9tyzF1cG;aVR%BzA?#&mRLt?)Da02iclK-!^M0y7w>$pS+?wC8aKcZ`Sx1Hp zv#NVO4dfIIwuW*`^}L@20h9a{pd8LJ$;XD{oEeZwFjjbIUu0cHDL6ggNNzBk1AN%Q zGUO+*JZ+gBHX8b$5wWR^^<4BQWJGAMXw7iG4jBO5}s$?b@SHEf`5L@x{~rMBqcb zFB@brGxm|>l(BSErpQe38)=2M9Sib)(UD5c(n5{`Uea_xjlrtXGc~+A*b zcqg)evgmryssYAJf>u=iD|`1x*Ml2|p~{b`yJ=>3>&5Y2-GUME87rrSPH#t&Fb$r7 zKc0X>NN)0%zv{)5sjU%T&K}D09QK{Q!_tUBIY|#7H*+4)0tcAD;(9=_F^TR5wnDyq zBZcxl+E93q^$?mJpx$gbWZWyb$4&tbnqj5(Q0R~&IM1yhK$)I9?Xw=83pcEyqGGQ^ zIPfFP&0wqHD1tTtL_M5Fuql%uey|nw4*X#%twy*LnG_4T%r+R>+e0Kkx#kAIFmw2iM}+vv)DmhsFlajmEFCz-hVbuq=6m?imPs|~*VEeGZapUag8D38YaWO> zRa3ee3{_Xm)h|a^#7hxX3e>N2ve)vbRY?d}~I?aG?JhCiU9-RDb? zw^6z-cVw{IDpZg(k22IdYOd%l^ZqVn=ZN*;g)j}n;OIPY^xb?Tc1Hh(%3z1A*wPTL z9KrI)v}lI{G_oRZ-*snjkbyzf{Oou2?O1Y&u2A|p%fLdt|MeGCMYhiHU6wi@jeTSs zBqM{v;@cqHM$XLZ!VBpj(~$oFQgyn@et;QXBf3>xt}C=O!CFB0e?L9fAjp?ukU7)%F!N^}0NK%RO7m^fxFy>#+1&h!LIE z4#}&B%Pz1nf5Aiok(2`5zw%GTguWKN__$MA@d@jAs(sNEv};)zs6%gFx$+pJQU4qv z$AMOM2-e89!me^)M$8H}KsyWCwV?20o+sVoRos{$-+f=pzPA;liH}F^to~rj17^(V z%8&1Xv?{X=rwKsQE1gO2mS%Uj!MFsicykC|NU$=w&10lmUi zn&xg)=?nvhkN7?-r}{`ZqO(n`2{el7Xyo&=n7?ETiVQWoq^}0znP*+G{uTJ~6{ESB z$8o?K@qOfT@-*d!Rl=%|SmvZ!g#La9#*tgvU54zT|8`k0sP+9at=)o*hzgOQ-yeLXzgf!oVd(W3p;ZZ2X_IztI<1>y z5;>$g2@#w!dT!d#Dl5r7Pxo4?vC?*8lB_x$Z88n;KNPLiJx)@MK zzB7}LshpJ@-}S)kvZQ_W7;;>St$;ts2ehEu=8WHhXTwZV-p|veIV?aWu)jed zkI`R<&3$k}b0oWsbh`t|XctqVxoXMXP5!DF!pp35rtIjX{4aQMkEG@O8i+kOM!IS zIp~klRkq{7V8hhIS-jdCb3eem)DlZ8v;f7?Mm(U_UOjy3FcC>5GM5=RA}=aZ9JlS< zd4oDPjY;O9NuOQ&1T<+EAYL3Uvx?RV787R+=y=+LSNGRdo3sZN(Ch;ZFC2$+?cjRK!k(wOTUv2p2d&sw#f=Pm9?T3ii+^5U) z0I=|_6uaSuD7365+L$!FT2Cx=`gNj?-DOf&1OL68_iT;l#&3C7$_PmpD=Q0Ci)9Z4 zJbRy_6ZMw+y7YnhRe(4n`tCd(iuF1b&byT5Ec=BZ95Otr36kEk9lZwY9d7D$;?ns0 z!O&ht=I8WZC^dY-K*Y4Rwf&b3Wm(|?)H)-ceA^IVULb&$M*RH611BAR*D*JLwgAs1 zNKm`T-u=FozzW9}$Jg5B05)^M8NjXLkLTc@3>Hio=l-q0{cPT&Fg)3csYw;Li* z7|4jWCo->59h+T1UamAW#hX?}V)>+Fg-wlRK*Eye{=5oXXdjez2Y+}V=8D>qeG`81 zB|M@Ep@RV*SFS;Snko#nIi|Vk{dpDT9`So7cJ;f?4Bc3`^kBTT^!lKRG&eWlxVWnA zX)Df6Gh6-pYA@j@ z_uVJ=;QGO&W%FWjU^_z$Vwp9+cUM*OT{nUi+M9X?A7Bqe6UN1Q2Bwt$hL zIB_S`7mPhQhi0NkRQ{x5+XwzY?BmVz#t{zCV<8H1TItWWPU&9+eOaKjLfoe_wN zh8i>&N9GkHltsoAvw%}a+8CS`0ht%u4me9u=K0EmC?%Fz@W2A3@ zxMfc*CSUbnf&m10eoR#5Mw#hD=P2{DuHgO~mrWKElYbMfCii0l9I%HOnZT53z>#04>t|~pmmcIa!;0m19=PXGa4qgCdt45WgZ-DG=F7ktnqGQ zwX0R^t+0tU4%)CSd|HSGBmOy#Ovt@d`|OCgh}n%rQn^D}S;h5qkrnD>F+MA$^1YvK z&pOn3!h67{)XHkpB z+IWm4%&IA>^5v2UT;Vx^&2de6Ra^6lw;JuwyD!^UHE?bmmA&}%*2~S(M@&^_vJHm}8N%rG;$(ep zF&V`F@BzisPkGXA$8?rX-Udbu-%|l1e(W>BWf(DI>cPbKw4oH7$eCDX&{PhN0qlgP zJah#>_s?I=J5Bm-H_-1{?9$Z@l}Y~mTZmJ0mY}ttT8qui-%&mt$UXewo(${m(HBHh1R-A1%V`Cy|{=`r^F3Ejz~xm&Ku6 z+hABNQDY3lL;uqUGv8bCkYHwVNVtENZ$Nu*DyEVjlAwHE!s~C-?O)bjtM8?t1}*D% zIvrXtWCmsEesS~~=c*}{&*f5^&Xo5tmgyj1ulOjV{t@e(A+2#BpO_bvg(n*Kw8+0~ zS@tpzrp!ssChV~RG4_c(@qPqJmo5{jN_3OsDu#82V{J6cpxKRwT!~VbTHW6!z!-V; zZ(P{>jPetIfE~|`ATB3`grDt4OE6wo2-F|9%>n9aKwv1CYSyeK*7`v`y_G;(-Hlic zaN@-X4xEpnIDP2K0OJ7_d!FgINSwFX)>cln_=m5<{#1w^%^Pz{=(uBK52}r7cImT= zEML<9!hR|QSO-n+4P2q5gcQ$m%fd&%iuqj9K*3-1-vU4y)7cG%ud zJmDAQ_$T7S{QNN3cx@##;(48rBTdmV_hEtEhYgM}waWq$>H`l4ZY4tt^dOz%xIWWuP8jJ>lzlJf6So_|5nA2~}8Kyr(TwtkX|=${Iu5 z7NMBN71Ww^8*u{@MxhW z=+xnsxtCbtdQ{1FAs1%sw}`F7{W#A?6ntTpB}3Xm^9v`f+)f=N>Ld5{&8PQi<&^IB zKg~B6H*9FTfCW$A&^f+Y4Q;wq$}MGyfh7yydH?g#SZu(gzbL}<#ACm;Y?_p9-D;rt z-mT}ehw2N6!&tpK7!K2u3ph;JD3o0uY(pE>6TQW*nBHmjAzQ?l9{5phf!kz%-{C;)w z0__K~jd`VoFw~jOLCS}8yWVtwfK7Hd*0azfP^d6u*{z3NFUS-B(#>~g84r-SzaT=~ z9*7kB$7bt|09z7Z)fUJ)@yGwq)3JGt1gVFx^g_Lqn%5GA3t;qh%@NyipaG6;Fl?9= zqG5Sv%1_v?<;wf_p1;LL_ zOU=mJw4RN5)h~yk;QL7LIpNUI8pMs!SJcmCHhxfeqP`q=6DnE%;|x@6(bBq!@bWJ; zXS?q}&H36EWl_mZ!b%M&RQfKBNf7ZdzB;90l&C27xmbD@kV0l?*_h9h zQ7b?pb!;%wj}4Fk&r02}A;Vmpqz8s%p31+E$tPa@L?%-SqGT;12#sxR(3H>g&5G~@ zgEU-y7Wi#}=bJW_AZOED4u*?a1`O*m^vjdkO950CDrClBlL9j_4D1+|Ai$ts+f>vs zxaE9kY?K>#|IlxE)0?CK*Y35eR;@xDNuCKA2NFR0F=e@TK$UH3JZOp^FpG~N(luOi z3lS|_aN|gsf~a7ZSWv#ek4>n2^?X=wVVFksHTwA`H)M*!w4CyHyD?}tBR_0{Eb0q z(Jo(xc{A((>s+8O4~HT9Ce-HiNT6e%Ig;!tG1Epe#`9Q-=fOOT2payN;itm^`Mb1x zOP4Pfz*4WQ);&51NAJ&{@6!1Q|Ig=fGHUOVCrmSfi@~=Fv>e9D8H*8%!Qz1P(IN`f zqe+(k{{4OXl*Y#mTo3(+)LAIPgyBA9&=*z->6gHy#s2R$>TCK zaEKKmb&EXZ`kFj<#T^a+yYp_IzIq$1NsEI7_2DZ!9BQf$U)jykMtz8%7Y5te61J}| zced2l9~~(JJ!-8O2%D6~g~S_;XT@9wkcuJ-jlrUj#o=IxzNn;KrL>`7Ke4ffIz{Hu zYCJ-;b6>L_jx5^PZH)Nnk6v7waOriXi>j3tWNk^|_Wt>}EYwH2P7|c;+rTG(2o1%mE;&{RlgoN-q{M}%ShX7B@4j5bhM;Mxm z?}pYHJ{gujdPys%$v^1ZW<$T-O-KpJ5tGBsKtx`Fc+@i^#DCj>s2pISIe&wN&VEZv zbC3=oX-VrO8^Rm@`ks~~?dvfxS+331^^f24ph8I*Fl%_81SvC+Y~&8;S8xaIUig&@ zfMclG-_!E4q9PJ3MXfkvBj7!_>ddl_!v|@?|M93u-IRP)IWvl_h{*`x^Fx@g1^{$T zSYxxDYgbg}W5f6sf?YfYjpy0Qz(=@hIvXJicmc}vfBiwKT+p_rP)@tSh!PDdJYEhA zbL)Xr#P{I^t|NgE8iOFd;J?W!2v#XRcI+6f*0g%rCa~>`0IwFD6XTk2Aw4*6J^Qd!YoNSRph_C`7ug(%}JpJ{PORGs4rwE8y z6h;<&(5pf>=e>FJCaiu37v&4>%nJ+g`b?}ydNaING5CY^;=U$zE6q|yFt&e&bi4?*xGfGca$!mA3 zJ-YkxY`hDz<<+^b)reKBwWervyBR+00Bdmt9lws5&HnryU_vE3uc`?IV=?c{+psR=~xB3A71L&ES=7tf=t$Hm^ui)H$@1g|5`0^SvLjzAzGm9@Xy4n-0V) zU^X;)g{nrp;jOk6x3Kel`j-Whr#SZL`+ur`Ue%=T5S-6L1rQjmAE}*S(IBR|Ohj1t zfSK7Qu+;549p-`VmX@}%C}ZS_-*A<*rih-HcXn-ctC9X0|FOAtO_{X zFl_WL(27|NW&25(D=IrR0I%=lQu#rQYi<~ZO25*`irM5=1eAI{%OE2| zsyD?Pf+wH|pi5y(Lv)moV~mQ_;q!gFp3m#2^c+a5b%+| zH!}gSfWEnwYb1bBD_YDcyK@H$9i;e4w2U~d7PNqJ%iHUEJCusH8pYE42j_&zl(hMe z0wAO253G_v@IT2K5fLO56E$VcJC&QOYW4DXvgO5ZxAO22o`Y}D+6Z+j{df#j&2di3 zZJpMuq*mZNK-wgBxeg}6m{4Zgq+LU)=}Gygi6c(1Ibc{Rw!P5g znHYgto3wy=-wsjTo-P%2`=8K;HKza903|lQlz;ifKcFdZ4IrLA&|evqKL{bAb0opv zo%5I1=e5BApyQAu=AqUvHm~7har-XV)im$96%%9exT#&K$RGuCR-jQOCB^{wP)7!u zsdG@H6kzhpZ1JGhJk;yeAKX-|+~Fi#XfF|o;8jqi-fEX2rGG1fufj`!_#(RG{l>|d z)1a}=&CM;pI81LNs!ZY%Wq1;}0PZ)Xa8x4~P`|)x2%rfAE{Ni9gBbC@UMWs7_=6Cc zPm>1{&HziyGRHr?Q9acMf|Md_if|;=UBUxf&{`ll++2i-BNol5FesFsqlXE8dU`sJ z533{_Od2+4jkx)73Mp;@0id|x?QB9Bj}}S{7oVZZESg5P60p6QI*&Lzg8XvAzU(jX z9`{Zz;9KQhT!HaFgx;0;JUmSpqyP$|{aPSGSREm|>^jsTTsD>m>!MtHZ{w`$IDTA~ zf;6G8?nSPDhja7ftAt6yp01qoM9U^^xn;`$7=J2i z2Mpk8tkDa^T?3F2L?h3!v7c|BQc*6+tNWtartxA?>Z0)@qi76dug7b8b9t#Y*e>bXr7Z}3cg87QQ;A>5FQqeBF>zA3|WsG*9k*-YixQG`N{f>A#@?8N-E+ z;dl`*@&{jfswILB!QYk^p+R>dIxV0|5S{FeTBY{bCY581m4@6~CC|La_3W{mWyM~Q z04x)~cVZL_*D`g(@t(M+A=X7&*O$x!81#=lown)4i`pu-aJxai=gcs2z{(V97P0xy zrAMn))EDY~Lm$O^yb z>vN&beOLGQ=W+jWPUj}q=kp$~*K@rxA@Bge+hO9O$_@1v_sC@L+0$Hn3w8;85}w9G zl{XZU&2e>Tdd1V&PRk?9;mQMY5{ zg|(Mz*XA1~jn@D6(~6ubTo1e`{q7~(d^pSe%~SM=`n|G?^fq4v0VE$--&Y4 zB)bQ)tc{c<>Y-c0&0R~@d=c{t#>(b1@%bXi4uOgeImkncAv7QshRpW^-yIEZhn9>I zY{((4HNR<1zS1%$5=c>F4;m6e{OtfFl=1(jG&YN6&GS&*HPIGEn^ZOZOdnT0@OXt_ z+%J-OOu6##$Zrc&9uv0Sz_AW z&A(*`_F2S~*fS@C9ZuAyj8)F7ef4)8=e^t~2XOx}aD-c5g!mjic8rYtH^F0EVj?53 zB$CiCSwK|?98^Al(+rG2f{l7yUVoO{pU!a6bdgPSS*~^Hke+UxHAYl4^OYZDMzAY9 zK_jk$y9s~HxR=5t#(UMmz*uPNyBQ86JHoecq7p}thA^k5=4LUU`p1o}jtnN+$7n<^ zL4akBjlY%dGc*r4wEwuwyU8>&ejq{KLEl5kuS*C8z^#MN(FVh<0&vTww*jw{_|bqD z&xB|Kr7k6Ffi8Q1{0Mv)Mj!h0Ff+y^Oy2eSO$3SacoG83Bj>JKr5sTGx(_Sn5yCh) zK!yv`FrcTqke_mT#R^&jl^kvy0%0kUHrLA;{>Dq@qNRgC&~p$0*? za@N9LB*GR86O=4U>EC@758KJJZ)V1Rimz=%mc@JDr0=7S`MPf)Fc>`ZUa0C+y;!0-Oq<++#plr)Tm!WqKaUO>b}6q5DHlM zjvS^RU^&Jpj2{ejdbhG8-wrkX`!^?NX8Rk6`k_=^!9fbFGw-@561+RG*V&(&qM8)H2P+%HvoLu{% z+JB3t=i+2x(rbg0Z$U^sLCEUWZMJ7s4^L1$6CqeMAOqDZ*C(L}(l{VA`6AxTP*408 z(GN*x*o(&?W_o;>8{y)CP@b`$evm9jNpow%bRY(w-FGH@AacE~M6C1kz#E211{f+A zjAv7-16es!6!oKpZ}X z#u0VHE9k8l(nRCw4|J-RG!f|-Q=#aIG}!6Swsb#|@li$7*bIy!kMe5tNmDBo!9ef? zY#a|qSAP5Wt;D+M_>{maKq^2KOoq1AhsaSRqp|!(c2jAo|KPdesDO$}_PE-F32ZVr zVOc=&!=qEvP!0Ns!{orsaQ^iZk=5N<-P3kGnc!P!AZxk|=&T20XuR%RH_hKW$$hp=3DXTUuI+EKO- z&uU63e$vH@k%G%Z+=bKOY{q~jx=D0@y+rV*nWwrL*SIf0w?5FtUX=K4&V!oy^>D`t zUVsS=t20PIO12hRU(7mzms5wtK{$_W)JSakEE-{uTa+cN(HB7-yb!}G?4O4AUL;W8 zFv2hc%ovNFesZ5T)Z=J)ae#bXDC5|LyJAXd=*znwl_D1=V#Wa)sMQhIJusnEn)=MA zukd(q!J;T3OVm@JPYDfLPIV??y6EBo0$eOBGXNu(*wx=g8wd__{nL{1p8d6Bu3gxzR9aXs;EGW^G+AEBtm0BbNWwLpgPSdV5z`d8KLIMN55VsvVV9Xpl zjL- ze#Jc#*7FMpa2IqnEVzRz9sM6YKnTjL*Lk4?#(1eY-^!1vHcss3rpFHy27NM}%_~8G zzj2T#V5g};ncECw6Gm=TtWC(Np5pf1pn823%g?H(E;8;>GbLjZVFr#`Ci<}$8R|L^ z5(e}!8irOHQwx6eWa!Vn_NCy z&Y2gqr6$j`D!#c8tDnIcW?{M>XanF3y~oTRzk9=}LB)KKn3|zz8Y$cw#0M;hg`gBv zc5lM(3ZWW`B73B@QMUa3(t7mzx-e0psBgj*X+VHC@Kp!6D7Y}7`ic|YsEqCuUA+U+ zHb3CL@@q){XE;bwrZIqN*K__9f-EVz4AHCXSM_&nsN}!|U~naYpNnzyBgrDKvFOp_ zVe>;t>4{HFQt+5L0#a(I@=$Vs710|v7g~sG*QQ-Fxn$G$?c3Gcw+rmkLV)`HVoZ-J4Jyh04YKn+tKK%og`hov%;Mvkqzf(clW| ztbg84i1fOGg$Rs|x%h?>+=J=?x@TP60jTi_8$l}cVi}dY0(EAW~19eQTd{C=9{*@3N zshpf;*d)Z0m}`6> zuLPv?WNK9A8$cV2jz0jZC^6@_bbded&7$&sy9~%+=ym)wz^0HzfWPh{L`s~r$YXt; z2oR|H{yj4!;n&xJQExfrNeh!y+Ri``uEoX{qwRQ(_WKUN9C|ZaDGQUMrz@C2q6Dn) zQi!KABriyFU5Cqx*e+C;u$^i3>b1Oky01ATsIXaJ6X4Ll)_ni2j@QUuOYf}PeIHst z1II5*OI^A;Xh_U#v~`&Our(@6Ymh&JIx7N_F%paY=1aC;chw$U zpD`tzO z;GVAd@pe9mDk(?9w5n9}Z@}jW;Uihda}b7?K(ta2D6p6eAOA=*lNs*kKb=>^&D}&q z6oHH2s1lL&S>G&YYlAAU5I6L?bpBtQBp2_0ieCxsKV>4)lLj#hj*O^44N!r^&heWd z0|C|Of@A%ZrXvWI+>ol}&?w zu75qNV2+=sZ$3`0t?AU9*>SmX8Tahc50o{Gho^$_NH!uPNK5IRj|f$L7cn)U>jeff z**}?h3SkZ3c~?m zmr?j;Ch=khPw?EXNL&Ww!s}Dn*V@OpPaq#gcSfS0*lrV12_JlCW!$Xno6TmC`%G z2aS0vIiY~Z^#I(9#hf|W4|IY(+{CpA#VfD9Yk8fIdhoJZJ5I*i;-K)2BdZqFQwjh^ zzQUvg_4WMi{d&)05lpIFAe_u{0E^MTgh(xAH{j{F%0ValRg$!IoI{y00EV)}n{O$Gr z+8az5C)r<#SsQBe9NJ}0PK`;w!I^_f?xrie?gxb=&SsPz-Qd^+3sj+4HCGtHV8&R8 zAPnu_Upz(*sW9Ddm=^ipbgM|A zbpm7P718c_P`eo@>7l2jBT;zX$879adC2S8fPqZ)HYV)7#gudy9=G*4SYsYA=m9Aj z%CXn>X}5a`{?w+29XLyAlBn@(eD1>MZ%%w&0Um2$h%ihHQ(GMk&YA*}9gGpO?{+EWi|7t*D73EF|3shP+Gu`Y z{WzAaEmVH!Yloq3|H6RYYhnwlLk~K>W{P+u`ToNOe<7rr9sUPd*k$ z^lvfV0B8xGFnRdlMH3m6K#@j$iK8rqQnw5`el0-xf1oJb-MX*Tl?~;%&lq<$HK&#; z0>XJeKD}k;Uo0uf+-*KZ6M?;M#9Y$|xZt-bo2YNwzWsESB3+DJADxVv1_qDUmc1_I zIjo^D2Y_@((K3Fk3YE$O16djuFslip?t~m)gZKzQHdRH{mK}%-0WCw`9o+%w5g4Qq zjTU6bN1^;v|BxipS4|p_4sN~t%yaS>8G}eL$jwZ^!Tg211xhdCM}7=kv(YcFW7XAD z+6;n$nU~c2qW|>|Y2Alza!Y`!(?$wYzGIv^zzO1B1n~P%=MT}ZU$)xun}8Ta`mmNx z9^)}}#BmygurdeXtZaH{YgE=Ipg*jk zHKCI82B7K`_OAP_Yge-Tq?iPW_=+k-_{U6?E0dtie)P@!z6l>GRTE|7&e+NU`O>o2 zNq5b-;8?CApqGJ=Ag~;he^4>ut-6Ed`?5dg3C)FBE$K~}sR4is5J*q6&VTcjEc`i= z+=j`5yK&Myxog#3EeD4}oAw@4VPOdxVO*l%KfEvN#3D2t81i+Qg1rE{2Uif1$fmKH z_)J9@F2iIc3g2;5oe8grIg1Zx?XI{BTzBbo$SO2D8YUc%6Xx@MW~$tW6*dEMaeL*> zpKY&QyY}*wa6M;*xHudB6q}3^Ob+Z^Jh$9228TJ$8l=Te=0WkSWOq>UjE^x55C#ue zUzS{(^#*1r2{vkCU}SrMP3WRsgM^Yf5`X>4g(bS-o~j1Y0Ww-afKu0@qw~-SMFZ|a zh69rJO_cd04hqcZ!+JbvjE6c0xFMq}d3YcCSNNBwBS+)8y?QQ&|K_4eLCWw()gWKq zdpCYym`bv+qh4DiiA)un(G zSxOG^9y|Lm*caTh8I+q&5`SddzWmnWq6uLNL(l{F4F>#+v*d=sgN-1Fr>(jBDXFV- zh{9O|@DK3$NZd2A#5oIbPfGd?AOe_2qW{@e?hb-+*yIV*&$Gq_%UJt>VbU{3<_0Ge z#}u(&@{oC{A{Xd9ri=Xj7r*l=miC384;&Qz!1wV4J`aT|pA!n;AL5hL-%4g#%MR@^ zCpS@;A0`cN+8KwEaRwzR0Kk%nLKnxO)fe0U@eb;p3nW0{XXqrnk}^C(q9$`pcY zG^U(T>@!`80j3eVscR=&?AQ_iRt_Psmr=!%#~RO^q+Lk2A&+J%Nvl1QN@Zh$zOo@LK^{pax(rWgD7;RXKzJi7a^ zNAQc|01N0_F%EyVI2*SXl|7YXe!Xh(ry<6?x=B{SrK8B@25HR^RBIHnJ@_w#%dX%6 zBj)!FUUO4!GAnq)l91ek)(V4IENu-OU{_sQj=5-~)x|g;W94uuB1C|1P+Tl7F=(T^ zFEOO&-Md!=I676?VnNBLuBH^M-Pq8*XwunB?@M>!&E3Hr{jv1^dJf4`Xg(XKF}dF` zP(Hx9KhVHlXwxXOU!ZI!rQkz-J_S4w;w?X5V~_b>=1jQ)kbB(kur+a zIk-${&Rfhlw6@Y<>5_ZauJoZ@L3p_kOAOrD`EGCu=H zWs?66jxg36O+CelMYG4e7^wQ0EMF|vNHf5#kdIT~H9QPEdCP-x+;w-@Md6xbI8|J8 z3bjY7k`tQ7#*UvQlnR5Y{lleDM81b4J(o1?R8x@NR(w0oB@XE+(a&m;9}lZ$?%sLu z01|wSCHtIA1tbyMbk{PM^j9=yjzCik3B7@?jzCgu2ZB6klFL4oz=@k=c4y+4MY7%| zNY57SG`yM}cwnd+6>s2Bx}MFm#ecqdfx?s#5pwK8fH^ikAz-Jp3|UM zak3jC1dRFZ2pC3O`kXEKh@ZinD_R3XOXSP!y1utkB0SB#8aY;&*JhiRRCkSiOadyLwnV4f4?eL3 zb|Z0*mJVT7*tL;Uv{vvUlNtcccHe4$9a%*0^gn!D`J%O9)_Enzn${76k5Ib)`~%;% zK{yUhO8BdJkkHrzQaEJRD~b};DbAfN*7}cggMT^7aU6I8C9_{e9Z;$1oR<><-2ZqHbCZ?;4 zFaq*gUj)Iyr1=s}jeB*{Pj`W&A#wP?j8Y}4`TDx0)DL2v$VWwo8|4~c4;z62poXw) zupf^C(GCA|DZea(haVW(t3p19V#5hx`0%k-sE`nvTyJh89v(f*a@~Rvz%O3DRJy8( ztDO}FKAa@4ykbrV9SB(|nh>C!VgJ;R-_m`khEPuv)9&JQDo!{M5ETTUrmPeq%N*x0yP9mu zo`=?U2@D%s^$PjQ5A_LN19d34g9yTzPT2nFBl#1`;0C6ONTA5b6{bT4e}o_!{e}07 z%Rv4QdS9PzN?!jp26N6Q7itlmY$WATVrAQXD3Ip$RD+C7ma)|2kW9u2MO%SlmSwbs zqG6asJsoDsIp{bB$a#7NVjviP2*cu&5-uE)er#XuT$}lsH4R5sp78B`BbMm=;H^NZ z2X+{9o90!^(W1r5nKO5;*N&js~qS&`Y72Ir>2qYHs!?>Str)@MGWB@F zR2?_a#MH#EXQJMddw?s-s<*)lVQk^@+KYI|lB+EY;i^Gi0^7)keb1h|nv#IR%EE@^_DwSFbF3ce+@VU(LV!=*+3VAR*F!I zzfs~Aynapg@85hSOLg08`DX@b)#?Vd`9PGYShs8uD^uCwLxIn$wN%MoKg{f`YqR?_D790?A=IuodOGS12a-Uh+26mF znF4p)nLSR~tsf`PACTRZKqF6pUmp^~``%wXAfdNUMn#^Ga6#a>E!7^_MYk)bENDHB zhg}$DXnnii<8a_5%=kBCeOyqqWd`obpIC(150EQSoFkgEqYza*uFaZ6dnwBd8;G}; zUcF*&{9nJ2Ug#jT{logCtJL43Z)8wH7XL*|cws~}>VJ*hho(6R;SeJ1K;X$DOt0lHmUO(1u@jHglXOv zPOYXj$zC#pZ)qu5x7TIm<4;oHON*UGU3rv@6+5^@0nQ0D4`PFLq*hgal zurm%A;{jdzQpA0K_%QXoAA_36Bz@mylJ0_u?4x?{;mfqjg@mn* zu#@ZCiyW~u46!6ucjc51xxq7@@QDfOuIJUEyT3zku!P9gfkDUm)I2kbp*<_lGRh0U z>A)NLEO?BxyWJGDIBXM*-25pRwZbIKsAU~-zZN`tG%u?EXP)q8ITOMb$(HD?FqtGZy~VX9*6fquagn*?Meyr zk5T#tWUh(aYa@eN4xg?HX)%q_+ov)f^|dS)5SKV|!N&1e@WZOkx2te!#Qx(p zS0)m=O#OqaAEtS(+lupX0*k$5;Tm@qE8lbc{HgdGXb=#CC<m1}=mH8E@r?V4DpyMa7V0H5mJ}Xh>o@oQLQE^uAXSeu{Z|?xJFkXZmNMlLE@%$`-;PE&c(>C^uHVEY;HC z%wCNS6$mgLqlc1~d%mgYEyB>3-@v~3)5XEpjX8G!UanctwU5F?;7ped=w~E|R!*WR z>A0M%Uh(r0pjB{{lh`1x^!q<}HaVZd`@HmEbk-ZcV z5g`>d9B$t^0kUsiBVI{sS5`qaX=l0i@f9ZPF{%%j0W=qUVqxjJQ`PFp{~Vk zAIWvU^c-vyp*4pvx5`A}W*{@wBG~4qCdC?tfuGNa%hP?I;puFD;^N=kp=St;S%frP zkPUBl-);mp4|hwjaX5vK1N_90gZ$+JR^jv6zdx8=Ae1eV6x zg;VnqsB5$YL6+E+%(X-WXs%etX?&g$KUhvsI1&g~(kIeaKs=)d5tVgEcnQ$wqCf4! ziqdm9OjxO%)z+QMC`^^ESjL4*k64S5WU3t(DGokEB4hslLx)Pqcl_Q!;7@3Y?*^M}A?k)g zp6@ZMbOndVC}boY^zw?3ASW9rQ^}@Sipf4bc{vmj!!$qG$~Dm{b@`iFrRV1#xXXKz z-PY8F6d;3oFI7VL|L+v%-R{~?oe@yt|Hb@l44w`>+4J z*zcgqW9Lx}HrgQJNIA+nB%dqS-Ih9le{EZ%l5Z7rE*97h^~mhG*k|1aU{4h^vdE*v zw^Pg!Vak+kqCM-JPf;!A_HMomkobM{GnugorI=IIM8z-eLzC_*;2Nwwr zu#G^WL&pp0u2S%4MqTw`d1DmHCNv&v(erYBF1=}P#{gtTXMoEJBaUc@TzCcI;LH~l zj%Eqc^^d;*5FCae;LQ5nm#`bJFp^q}P`!Msd!=D827e$9n)-xedsS3pl}5_yS>AV1 zI+g|IPZGTp4adN?mk*$vvj{M~ARbAdY?d`9Ux}1|T*?g*>#P*R)B#_&CLcFkh06cF z3a1zPFNg6>99}XJ84&}NF+?CdfEJwr2I28r!9k?$BsQU+_)m>AMgxoO&^?GuX_Yus zB=?#B{c|c!J|MD?890s{9eZRlY-|2hN;7A{vlSqwjb@(s)c{>=hE2ozp! zMNI&3>)abS}qn8I(=<3t^{8tWdy7N{j{Q2)trZ3@5Q8dk8Rv$l?C5 zRttcO&BDaG;=nI~?KL??iB9c}0rigNpUV;ZWS`O!vX38g0tw=3do)EA6a20NG3PIF zzX+Iseg2f@4ph?OY-*`miv9MJ84gjZS|4opU_vDFn?^M?3=%wMsW5M^W`Eb!q{(TD zN~yB?fuv%rFE$>f5NoAu0z?6b5=Bkwm21}k3Df?gMMe{ye*HDsX!$Vwm*i6iKE*AE zoqqqfm*y`kSbmpKHQr%TcckRbnzDIy0>D(9*a=5*(o1a5y|k1m8I21%JKEpvilfN@ z`O;O?O+9#!*jHm9>`h=UY()*OdAOxl8Bb2QN9241fe)dVoE<5u0*5z_V>CqoilV2l z{67*FlzjX<#-csa(zc^rK$OA7Kg>Tw)n&G|S)@SD}SN%Gi;uAoFf({>h zcl&L_=Dpb+4K*t{Q1LsaC_S(!l3|Z&GO1|!QbjWZA`{zou=8+Y-mxxE)NvAcU$gtZ zY02GL=TIa@@&fspo*}KkTSHQUjT_o~cP35WeR6s-%Ee=nAN~B|VGOvL#KIeFjU4Zfs^WDgXw7qF=vx{HgHq?h|9_DwQvXDPHhB zRnMe80hpc^0mKOfZJ50F7Us}kZf%4Lg15iyV}RS#G6G*Pa+G$67c2k<9~KhiXpmXw+qca&@hZ~R zq*1A;g|h?aUjzT>*|s}`E9w_@QY6QORW(<~zhJ)#;jRI=+AB;h zjKr_Mk{`$Nx|++?014tdzLii2&kkZ&>{$8-QOER_Q<*1wPVyeP;Iiomib9n7CDNj9 z(SVJD$wM%CJ)lsR*WzaB~eLx0vCOlBNYizMh=m@&gfrir6F{kR)-KE`Bit1o+C zGTwxSf>~Ry$4`lVS$9RX3n?cB7Z)EZbI?SBEzeR-?n{sgaP-a%lLNj)3J;VDQh)#D z-fAH|%6C_iVV!DxaWMc>ZFBRQ`)MQ#K-if*#66(j7$F`2Ufkr%>d^a=9)sdA161~{ zerdT5H2f>nu&W~q4riv!^Y|ub1FzwS;#($6VvbfgTm`E<+WjtP);4JsOWr|P0tR|5 zN=qx?Fdg`mruH`cW_LhMNjK~FHAB_b4M{`*lECgj<25b`A_ogG*5ipisLbclUg`2z z9W+>GXv~Sex^W}x589@a-A(A_>LG?L2Qj*sfJ`75GKhe`M{Kfr@FRZ9=TC_q%&3N0 z1!+D#s1)s`X z5O&gJHhkS}Soho$(;_J4mbom{m5AgVMwC}`xwohR|eS0 z0RyEGl(m>Pq!s!cG6xS}X%tuEmco2#HOv~wTcS4ey*P}(NE#C@Nupk1VKfOI=tpI4t?S1=#r4=I=B z2%zmbaHVCK=z|Oi8E>NOKgZ%M3bI)(Us{_lKYKT(sYB+0Q=-0I)|}L`<-g=pK&o~6 zoe%A-r8(?#-#QuoV`s=Ao-d)+F56m+D`(SLgT!-fG}fZu_adS_Rl#W6$T+qY(#>a` zyKw53+#M7_e1}r-y3p;DjAO@(tL%A_VRso;4)`Zaa%~U4W#6kc6dFGG2n`F*7uoxa z_rj1CLb3gSdSN`zlv>1IST<s3hKcrSk}uv%uv>1-s&2S6Ha9q(=2ZVp_mDP(h=F zqtDL6$SD|_hlmaT--y`Bic&e$XRhq$=!QUpY({#MVf(8hG!9a(Xn~k<@RcKc#xNN9 zE*!$BUUeCt0rr49IUUFwX)c_L!>JJeoAun6F`Ak$qD!)oTaIA z%rHN_Ri2>o;~up+cHipsXpo{yQF)Yp+-gc63iaq?v>*8>IA2E2+WlWkLa7jaHN9n$ zR0R1{8Slq-ITW>)6}*PXH6EE_->cO5>A8%IyUPle1vz8?xnkiTbl5Tn_oUNpE16Ob z^?5D&J1Wy@UOmd3!9-GUXhA>{d6WdXL^3hSFZdQ&GGx&W#O0rifFK%@mM`K9NzTfj z_N=_kIN?|spIOhM6Gae_yfp@*#D37k^dJD$YsndZ`8{r;ALSkw`yMd;A&Vy2big!F zhmxR;_QwA>%o65F(uYbh*w2-~JLg(=eY3s;3Z9-r=ugkVtU@#TrQdLt?8_fGDJx|3 zOoQtnB^hV)(@+Z(ePr-8*XOu33G$FZ`I`oQ&))I-YRu?Y)TdCdJ!fKd~cGus>gr-hY3SV*mvBbsb#jvzjYh6%;%kEez z3B_<_$XDm|^AEUr5&7fMnBve|R8gr5MgV{+0zM*efIC2Ictbxf&;F@|$c9zM@_HIm z`irhHCGAs|fdl0?^>O`x> zmXg1cy4sUACOLN;78{ZeDTr@Lmdlqu+R8tu6IFD55IEse>M!XM>fgNz+%SpgYB^LYZAf{0a&&+4?EKQw8Ca~KH2ky{9yf-) z(RC0Y+cx}a3wkRS`~xau1}s0f1`}6(5tu^?^>BR-(FNCwOg5509Tk4&rY?QiVUR7t zU9c+-$Z>Kb<{*MrmE2nQUkl-Ll?uXo(GkLqUdlWJLqjo((Jb|+1d(@-XTMB0`Hy|T zrg-Jb5i0|0U?PUAFXR? zx*&RGzCu(i)XIoREwtPQfWH#;CemAb&`R9OD~F7pu8k~C1mMu{K)~5rtsZ~DgAsa< z*mhU2?IOi%_E*GfKc#>qIuv;L2<`>s;bX^YJSm1P{~RoY|5^xSnzjHWMqA^viSd5G zcg#^J$cx$Y&z4e$9rm2Y(K!o(pHK!N6B5;zjkcCE+qiZJO9oARfH=`62od_tm+R^7 z1|uIyA9*#Z%}V6g4MM&$ZV5jY4W*?iDQ+Vk!G6gaNuGV_5ywfZ&XTo8DlZu`xbDm+ zXN(!KTd_A_4ka1lU~O53S1|U>O-{I#{VJ(CvsIoH_{ZzVRY4@IIMD>S+#RE;En87) zEZyfJb=1x%G*0?$oZ(bzU#+w^ty>rNnN?mfv^=*opvEuyACO(#LB=Ym{Tas1j_Zc|u$vm<^V>#(s zNzge^%<(z0BL?MRRnP!-tO{JnBdFMuTn`Zj08UaVgyUfg-vgjI|I4G1h>%>1riqOG z%2gcPl#D%6N{Zy&GeI$%Rct(!QzPK(XHFwme$dSSM}tCPO1*B?>71ITO!=JmM}!Qt zC!N;ruB4%p88vlNbGZwItpye7v`%M_dGL0(dq7cbz)gW2IDC5693wfhT;%ly*#_zu zjsZ1r>f!MN^GDWV*JWYXF`+CWQk3a|*>dMU*UV(eXyWf-yiiwMtQK}#p;B?VlLrr` zJ@QNb=4&#KBXI3|fJ9T6Sg?w;X^dOvB>F$I!5_c)zxRE9p#|$xC&xr*kEsiqDx59p7 zcvtx0@g}&!_m{Vqh1)2qTue`C>|q&kg=g98?Fszr2jd;<2X)_Gm7U7{I3PpCHH+K& zx<0&eS&c`tB zG&Sj;NWBveLF$RK5#&w7_bSgHN2(i0smlz>8%LX$XCpj8$5!lUi2b3Ng;trw#v$)v z>&PFp7!1`lXv)Je16-X09aI#9>(a1WXzPJxZgzOF7C>!kSInM!DOP9pl%>1mDJ_p4 zRU&uhc)*6Y!{_y%;xxfc>m)lqRC_>i*z7?cZypiK+IoJ5_oCpBX7fb6%zaHuK0Pnp zdF<}I{A?Lh;a8@EBvN&QRm3me)C@Q*G4#k^8%J#2vbg`F)#57)Pk$0hv>LHxUi9R5 zoa^;9qqbj9N>YlSp0PYUel~J8PM6?rUX8SCF_L)z%pM0~zmtT3$?6PyI_{U%|xdSx%i!$UVBs+wXm)vb4cPLVJp5HP_$C&TiJ6=ph=Va@TV;FDRq5UI;X=~*@Px}XB z0Ytd_;L(x1^KF%iK?t|5PIP-tv-yOerW2SBt2%ChbAnV1j5lxNBeCh9EPHcB1vxvw zTcKE%e%1WMEM`CQsVE;%=;HyS9aRZ@uIdPnC?M5fh&W_PE0OIO3ROb*Nd5s1=oRus zo0=#M3W;Db!Gh%mL@kMe~P_hde@UR!x)?1{xi+uR_kr`YEkUqoq zg03FMFx3rirD?IzQn%7HoG`UC^)f`uYojIW^N>wFja6 z=N$cX4akd6y<47;SGoinC*IQb@%Q)CuLGcmA&hHp*Skf`@XreTsy~>eyB5EAdwo(A z4Sl^VE|9bnVTtIMFKD5on>_~dZGnJIrye!EP&d8H-@d=d?0RP=>rp!dzSTm@PSh z^T{fVVSqN9*Yi#?2w4rWoD4S2{VqZmZu#FD!- zzI4eXxv!4RK&9XqT?y?taa?%KEB3hV7pd3J5Y);xeXNt{72c={oCg{sGgf=clfo>!^BdLyZt9 zNt%j?$elm*+-cp$xv+!aW4N`3UGan$Z9{1b5c>ijo-$S&sD+CV992{VW38wi*^7gS zqDhLV0$`naQzh0F8|c!xFJHv`ap3#|bWWkp`=?Sf*DYe}-ozlQA( zykk2EMf2Bwt8$i*&yFPaG$-1-Z5pDzeSOMp$6Gx>GA{*eT*iI~D|zL93qF zX(Yx>vA7+EQ%xFa%}GfZsOYe-TqY>HvdTgE$aj%sZmVPBB~-Y&x|6rRpYOaTva&tN zuV^0)&?6f9go2oE$>-XcG$DYGm3?A`_#|G`j5^J(7YEXa8r()15NYnV0{a28?RPF* zotr%qd=F@Eh%EnrW6BOy9XApWRmznNp~zF9d@xHWjr2x%r7u@_+9z8f-InxWHid^% zjoEp?NXP)p3bvn)))&RuuFXaE>N*cFBo%ECv)z1t+HP>*zj3VWFR);=MpOD1M-Y9s z!bo-V7AJ&AVkDAwr4WS*6D1vtXXoJh1!=pfsx?55Wa!qJB*>7-Vo)~_738mwK+lGFO z&6Il@k^;Ug#Q=1<+h*@j?l(sH-h?mCgS0;Yd?&E_|FChMmLk^d64A0`MPNLn1DUrq z$LiJWe32{Ko>iawWU*Xhs!3f2TABfh$UVQ6UKwa>dYXjg)d*@Lu?n{#Rx+j<@Kwgk zjLq1BBXT)OocVoyd@IxY7CBHiqBpwMT$E&P4?{CC{RRVE^3aW6hDO-}O8Jpx+VD@l z5A(-J2d@Q@Bzi?T0qX&HX5pq<9Q*dbpt&^pTGCtRz=8JA18M#aWZvHaDGqYd+h!6e z02*y%+gzTV3vAfSvj65MCbH)pT?TyJ93>pYGrvErgSni&xc*DX zE`jncy6DbzVNB9hR2?yssYR0qY%%Q2k#FBuqLqGGoFX1EIjH|hr<7c>b(|e^ zrkde`OC-HdTiHeMhk?36Ag`jK;zH2&Z8qLqb+ZzM^oheR$M1WGaSXP3K^P{otn&bN z)xJ{HsahDryk~i*BQBurIMkT&>6krLQ)-90@&j_TMO*FAorGSjnro1=#LVe-7dq>F z1ez;ceEH525@3`_4Nrnrsf-Svmu+$bAVAy_O8&ZXkE+qu`Y&cP5nYJ8RIF(?>F%I7 zo>Cw#Fn^sPLJG;aBWZvCxac8D0||G`I{vY$ga1N{L)DG-Z_{lr;H;eYJ<(ZZ{LH70 zKF4raZopv)<@2=lk)khcMEtIRJ>aI6uVoostp(>IB{(ZUCl4qg5|^NsRrJ7$z+=S7 zcL)Nq?X{Lt=-`^$4MSLiDZhq82N0I_*hl~yzy6XP6UC+f5`3W)o}#B_F>Uu;+UJ7X z%brx^0Fm#>yK;kVls&5mF|4>g=vXQfYKkAHy&Av99ix=KAImY-L|uo_3m9b}K9`NG zjXpg+OdOZj>(3?&VFu9O5@=N-dJK)F5}TGBfGf&unD%PGowKGi!RO1~1gQp{@onwx zAbt^LH&}IEfR+VNJ{lc0M0M<$REN!MPSLZj#{<<&ae-rpgvqOK1aLa(G&1`tW~0Cm z$CWfj#tm7xp_c*-S=z$TxNt(t$_#*+{q8Gm3(x%i^aWY$Q2QBrseJv122BAq&AwFW zVGC6Zi0m^bnA#ogq(bBjGCF0S3uN~uvm+SR7r4ABA~D~7Sqd0f1**$to z$ztCu0qa?tGobJ5aG%^;xaZ}Tmq#Hs{8;$+ddhtO^JH#0+Vv|mr6=MST4`!#J!$`b zMFVMMc+%6J){%W3RRwtcr8u)^eU2Zgb{WxZR5fXu``lKW5WIEPcIfQ4gPLTo=J}cU zi`L-U6F**i&27Y7&;i(7cp`rgpQjmhKapH=VUpzx!%*|lK0s8Qthf7ni!FPx|67(M z=5P<3-49nd5*QG8!9<9|1*4Wh{0aj*i!7ydiwBUmbzi2oo7WpeL1U?Hb7AHM#b?pj zBQk500U{5rGMfBV7bzQDq!voW>9L-68S=;1!M(Gp3wclMJ#1M&=T zD)zy7Ew`hQQ8Lx7e5@n6#l=@({ruB~Trr19i1zWPq|LUVu2wN7kbozw8h}9#?7Z9C z^AQ8F8o|y)^2baP9lDZ(M0+EqgldG24ha1R2oZ6e2zH;_2)!^;zHG#B@-k;q3NS{r zdq?P<70+&BUINBoEZ` zOk|}Stxy^7D-Oefu*|~CyF`x-+cto8VH8+LdGqY)Ps42ReeZUnCqf*;I?5IGxl|lu z?uC4e9m*lWy{})iX2_JCEw_@H&yCzarhJqSV6jG}@Zuhf zpU`CEIBbl|af+;n>BI873Q51XwBTS78EKNp9bfVgD_#W~9$Zeoi1wEps+AGn28{yU zt-tw_9nf>=Q?@UD&H^|?f$z#fWw)|B@q=D9Z-;|#r>>O2D`2RitVm^>3Rn7^P}4Fc zmk8gx_{anUddmndLI4{Mq*2)6Os>%JeaJNxO~XiVjVUa(rJq|Jk(IVa!GFe6N7Tz} zrmppQDK)J3HPcEb>sOp}f4#$MjpQ?9-Y}DN ziSJS`B>6T}ocSVr&B$v0@ciOp9$kJAS0*p!#0DcKh^LgA26}*_Uo;1|o~a&gJ$`Go zK%xwN!aY4bITwz6hi&8RTf0mW=udG!V7Vb`Bt`*=M{KKiYat6m}Rdlbmn-GKWi$)S~>{%dD1H49*NuYKUTr>=dFB^Q3KQsp%O+9|0ip6zaT-B zUDz`S3M(Wb4JE43_(YIIN1^WqFb?E1U;0Naj*VXnDGn2qs~ru~jy;7tW=qAAJ{cTM z_gTMdv#;HLKMtxiTU2Rd_Um7JwQO@ku0ufFR#yWQexf9>wPBaoDuSpi=#^Kc^tgH4j>$P<%9vmL?G&MyFXcs z`B_kbX_%`mt`VaASbkP`F2bd82B9Y^OQMJN%P;l6gR%+cerpVkIr*Ycks2%WsSWxk zy^0s2FgT4lK#fsNBVe2s7*RFM0>f2l&BYu{M$vlVU@OppD-a@0qj~GnR0;AjQ_OoR zi#K2P!hrzjlPg%YVL=rp0dtN9E@tUkmW+>ER|$C~O?)IIFm-KJZC#y8l?craM`1ui zFthyR7S|_rC6eF=t)Tocl@#dJUlbQ_cz(`LF$hE5mzIPU);C{EN=lN7(HRex7P9ss z$_)tWT?2ipYE#6jQT8${mhNV(Mo>XqcaG3s{Si>o^8k^1q-n0EZz$k%5+@SM)DLK5 zf_4>&|MJPvAL{l9yd6l2-h@d}?=f?V87MBwl9({w%K|YgfK*aiT+LX?FF(`tcLa0M z^Z};!pgc=)${mcyMIlfmsD-W&yUa{Eq(Z+4vR6QOf^-hU1sNA(!PlzW}pmcqG8BTZqf8w z^v$=e%T)<`IXZTyHlEN>z-5%{g4v{=R8kUw073D%m>Lr7lVKk_07K=xJG0+jkFdmQ zk4MxIGuh|TNtxB_*B8Y$w{NR`?68@1{!xi-SAiVhlxzBk429{!I5`e^n{!P?j0fwo&(`iSFZ^1LvO(z|~7rLD}%kyMjD07Pr8e~m12NDJT^#(4q~P?p4K+RDKCDgr$Sy;yTtvN0RdBwB{-XXtg zJw|cwNo*L07RjU4DQ%-J$q1pVD0ul&novF~0_Z_kZFcEsBH(j31oi{R?^Q!qkMKP% zPWW|b?Kf{O^_%a#ncj5i{XMm?{bxKWr|+1Om1BOxQBB@rFWx3M!054Z;Yec7M7(on4UV} z@9vjR2vEZ3Mc~4c?bTE8yNy%YwFLW0K47&?WNl!y^gP*7NY115h>*JCyE71fYA(!! zgi>?HGFrEPf#ws79I##h)@=vQ2^w`8d~TO7zY8s)VFfVWP#!o23x~j$w1EQ%`zpCN zP#O?(QVM%g-bWN0^MUyX=GnGA5IB|C%A=LkVfHIQKTaX9;2c z57@=IsQWJC=)VR{rDxTJuTENX56q@y8+=-bGQ_!vmn>??S%B(E0^(jX-Ndd>8P_{T zdijcD$n2NUJ2A-kW4A`#`BFIT>s-g6(C#ffMp#(tsijXMiV7@0u)znjUc>8wV0;S4 z5ww(?AP`{D*EM1~ih0~0bT8_v8=x))6^uJ@A6hHGk+JyygTpaZ4!=aAAfzY3g+qPxl7eqTZF{x6VxKa$0l zKY(;#{`R9xN)M2)d;mTOjg6PzIsJv6?h(M^p@T~6^N!VCM)5((S1@i(!K-HIeO#LF z6tkZcRm&fUUS@&#sk1m^3CO_R)BN!(S5(y?Jayx|`{cnJW#zrGx8!v~Q;GHkNFASl zD>;VXH^H~BOEJ3?edcSeCQFLS4MKMW2P5-h-@nRzb{>Yqq}Ts-l=`KBO)PCioPxOR zBdOpE|K-U_e<*yUh)Gb^K0&8ZiPb&srt-G4lz)T6Rqn@IU~qB;;N;ZeQXe6;4+j8` zjylLirXfJC^w--GF2qGni}GD*D%+&!$%L|m)WL_$+g3<+GZ)2g#qr596Y$l@1P20b zHdKzNByh*hsT6^JR|jzx-|Aj^7abS@8Dt@9u131l&!}^e-X(Kf@620`Pt8#NI#tUD z<=!bWxQ4WTkiL$KVy<1i+KAm1Fl!IKABes3-p|3573B0ykMy3-NiMGg0Z!w@p|J@N zEE5TX7{5ju=W@S~{lvn~n~p`V_STMSWyHsK**D7T*H1k&mG;Mm>5^=|j`@3lKp~QM zX-ah;mbNstUYHdB(uU3b*Da^c!5gm}feeXkk-nzz3I8w3_+j@kcZotGak8|fyL?|x z#~i$f*jI?USRgy2dN>F)^2K!GMsAJwI+H z$kdjeGsM(cUgJpk04EfE$iYmSUx$V?5%WPuZ5Wfso_D(f0RBQGXlkt>gn+bP9+MRpAevEhF`cv{Rf7(@_PJBkdgdHk3SEP#_QSkqJVcO zrrC#sMhtl7F&67YI;g^_uMPx5#Tc>XDq5#D+y;#FfbZNrc;|?9#k3EDg>_-PxXTv;xqKGgczl)PLqPhm zINU+h_LIVa^71dc5xom@`by%}U~Q{BpC|u40g?lt8_525?)ZFcfyz4gVj4+8| z`P{3l3D%I*^=bX_JV@}1==-}98mL6YN)y^TS~e5G<8K_MxJE<)?;%WYnI1C{V#y@q z*#2s&0Qhmra@|kBfWT|W_ieMZT=QoUM(;y;b1Qv(J}gJ!G+_#D`P_hh!G}@J@@!^& zxBx)&k;+GR10a4dtoyRC&Q66xmS+KD^+n`XqS4LQ*4>zehw=!+8j+*>%6`C9 zVJ3uYhUicR+ou6WFSo(h4uq3g@$z{uUR;J2^IW#nm?DRFO}jwNjc0}sX_)(r>nX*K z&V6Mj;IXr1U&!mAsy@L50@l0qt~aZ7I49{By^Bj)L_lX@;pnY}xIDmVk-rdUx2$E0 z!xS%FR#-gF3P?5bMNExb#=HQ%@$aS3&`RLnNXTq~!ZG{h_u@>klt|nOELTd-+Kftv zf|~((O7(-C?rrMhJ|jibD@lp7bkxve|Btjc56C%R-^U+gFvz}?v=|;m5-D1=*{X+j zSxO5k?IkUU7G`8Ar6)?8q+OI!X;B#=M5R?yA?+$uQmKB|{luJeKHqUZ-{0@oA9H5r zjOuy6U$1+)?(4oTjvE~gz*QUCHAIF%eG$7|2%IZRELwjL3QztH3Wx=H2XQ<0J6cY= z2~9ZDHD24c2EZ#_vR7_0V0{c==5-IiENdGZN#fiZ!I+z4)QJhf>7Y1Kxk9?Y2nYpt z>mx_4u}F`+#CV9M`KYl^&ru;m4GyB(0BUfum6i~JkS3BLVWGq#V^`GHLaqEK;el~a z<>=VTWh_w!ID2tqdPZY)s{Qa3AT70HtO6%myplF5kH4$Gg&1)7Go23~UMLoPx7z5K zIt_O@$V!ZbK{bDk*8Iy`$6D&KGNUGAC5z8n92zDpo6XZ151ad3VSMTRg%18U$f@aK zfR*<5yH7IANrN@}$!EW4K#+)OboiIcuW;EBwNW0lUHrc}_bdvJBrpGyFTsbLw;ykT zO+;|4tErSES8;H$gz!$#7Td~>pXb9-tDo!rkmja8QiGWZf-&}g$FO}Cv_Y}MQ4YST zTHIW9loOl}&sWG1J=1o9M-?Y|FLXCBop!#sgFpMhnxG;`Zy~T<<^a6JG#0_MHv>!& zbYK!!8ncs#YD7u}6XJi-SobYEph26VW`>K;20ap?_4He7-8ujB?U%GP4q9DRQ;SeA zL=r{Ixt0)+fBt&2RUg95Zkzv5Y{Iy(yk@ z;3c)TzWC3xpMbNUOH#rA{K@fekN=wEivPK~f4F;eB$+%Mhw(|kR=kaR!)$TrbCGb3 zM2dM+L@qZ<(}ZtX2vTHGsw5=zIipfDGweu_EAiNa$cDBzhQ60NvOl|K=}z1}#3a3C`Hd5weAQJ{3iXnLdHD*LzjB2Q1v{Fm z*@0!YU`V1N!1F=pF^Ebi7E)EW7(4DI+%;O2Tr^J25{Cj05EHSr;X3P(IL3$o9KafU z(|a8<1vrYb@Z=r0NE31KzYj&;EExmaJST%3Pjg<{l&Cw>cpeP4i)4(31yxR+wqb$^ z#RPHEZ|-S+9#GQ4S-;WRiNc$7Omvevp2D6$X3jgDWo%y2ew>^OUeV`q-O15!;)cJ^R&gC65z68cA*b%|gn zDZyRCN#h}iKm=#|6B+Hl4%j}u-}8p8qyoGc(6ALn%Di6ESMwk{m}8*^PyM)-|bSP#1jaY`9M3(ZvVl)@={f!5JNfU~-!@!h88Id#xY8FCxFOIo1{vMBd$Pw9L2`%sF~)&tQuE z-N9QV7~8{!cyod3d&V&)04H*OvNUK6r&y0-7Ro17&ytx{i<&A5H>}$dE{M@Q(DLsH z@VP9#Z@LHc0x_tAqt(a8{lrtz3GpiVtL2bP!P2POR5NdqwjlK$Hb-Ngyq%b|!nq6c zV59(0lhR%LtU!;peeVLoP6b)OV_Zgtq==fO*uW&!FOsAuL=-~!wDXNb@q7#+uo#Hnr`^F^-HgT$ z#Ng*PI#o6y6vqv6X# zle1U&h*;(a&oEZ_%8`vAcWno+8%lo4>rV0~62lXn>YWDn91skcWQL^=%9v^iLelDl zbdPtRc-0|ypn5D%aXcw+3LN{8;@@}fNs4WbMTyG4oggZ9DCkRaTV z2p(~FtDrLG`sTzWG6}SXWCnc>8Z|(tb>Hh)9FaZXo+5FXd{J}hj5u4 ze3g^(3yg`!z_`r)cJmc4fp=?0;3816-2c_ zGlD+hXcdHU4%X+Fw;V%}BvzZ@{MQ8TR(OlPfFZCb3xmW;7(h5f$PlTho&2NQT)K1n zuONzRwmoj?D6|@mrxO54hRSaPJxf^>q0nV%4u+7VD7&GX>>QI3jWq3Z`vS!>-<+H* zkejfNX#3sV;a%>6oeF3*TmevK* z1?sxI**fIy&~dDN>jnZkKpS}Fg%6>b*k8enYz4)KD;d4vF&O8;A%)9MQVQlB z(K1ljJ4a}mz3ih{@SQeJJzc=QSlxUH-%%R25usR@MmY0P31!`GF=-1m8VzS=P> z45(ckLRwR$e@V4pm2B0Gv&))>T5KR|&z6iFG93Ji!p%tY2;1)@b=GNFdYNDvg3hrUX6{5X`}UCk>$+?K5btRx@`uGMcBJHnefyz z#i=a|z6_c?ayIt8@#&E3t?x^K@=IO`AhZf6_b(9|>}w2$ND{^KVJMN%LNR83j!&!Q z&`4v`%oTwW-Xl)n7l*&-51Uf_-aQ$_4|9c{1*8B5(76=TOJT_z^g+0w^~)WhjCT{j z1~jnHd34m6M^s`xzo~zyuygXnKR~i5C%QKR9cDkksx(o5zR3(#U#9?D@MmC{T>e_`FKS9TZh=0qUCYVcp^gEEOGi z9uh+aAh18F#&`-#2>z3w141M~t(TbfWH>Pv$T2jZ^0}`Osz+FFOr(hrnzL5)F=^PN zSZ>?{9)B`ovhm30AWWUpCVNCA9QeN+aFl>+`2S_Vp^i1CR!HuZZ<--bE=S;nu-p{q z_OG2*a`+NBIL2%UZArB)K!g4rd)XN;x>wgI`OXL6B}#e!8crSk$;~V)?He)Zm~k!f0=zjDP_xso8Pn|^}RC!uiNk1lg4eG zcr!k2=TXZCzv+I;yWY8{yRT}?9{u#Z_*~UbC*#Mh+V=Zz<5pex?XO>%a~#8idxriv zyzv)_fZ!);8V8z(^t{tm4}DQ639B*hmKX|KyAWpqJ^K2cw}87TJ;Lr*C`2_~q5Nl2 z7R}Nq9Cx7^Z;i?S?WDoI$&stf4rrqvO~vdb9;Om)JovMg9WPD%F4cBcVIsTs=x5Wo z#s{Y0`^#d|1o6HwU-ls!?pRA%{_(2Wx?=Mqo~V`UE}D5z)~j*j@U@2S!_rUg&E*xe zt#y%R9RX*c<5Le#X3mHQjK2$YlWyJ80>4AOx+F^Zd>K5)L|7s#S5{(nGTZTrMXgE^ zZ!xJ-lV#g3EE7;tIM2Jb{Z{r!!|0HQxOvgsCCWafIF>o?UG4_c3eF6;1x?SJL}wNI z6a|5BD*Q0$k(Lda#003dd99S%cmG%Q%d3A+QY$+#(&i&kT)MzKY}T%B#g@98%+H>0GLD0eB52A5@{4N*u|-$U?KukELa`p z8?bI;;mTUQsuL=|$;^Lys(5*A2EPW|jZ{-DvMMb0KEa8Kv$Yw+{~t1Hm{GhSFB-MO}}M{xd64x~Zjwpl^C2 zy1Kg2a5#uFF-3=pN=iHjjlBJ(yjIJ-Ni$~Tns zR4NTF6BFAB8hyF=&mITEso*-zB_8i4+eCOTVO{l|(_F>^CZ2@o;@^awjj^-nX^QUG zp9!TtnJ_^7i*nVk$mx-|gn5Kpv(rT*(xSx==Uwk|qg;D%3;gLVL%v@e)-&$7KVFCZ z-~v1@Y6ru%f1SSUPzG^l^u!WkR`lnFfLaU=|$NMasa^01;>uKDLT%NyG{kpT;kXcET7N zCCp(wvY&i;+8Jn2<;T$3hZ1#=D6gXf5u-0I{Jts7cl@G1;6eEqY)ymX(O!-ljZ2@M zL^W;-Cat!H#&mCDru4pm%qdpH`alMe;g8ux=ss|iWfUsPR>3p9$MvyllbT>EcBk`%Vg(-vb1NOdyt+*2G1bt_1kocCTlIQMSp!A%zn(e_HuoUAVIk zpF-)8B^o*!#nbA^So9jdr~sedX{FF_(n~8QZs$aap^AzM3urhSPHjLOUL;<~=jek2 zmP^*%iwWS!h-ePctrRGf5m#&ljTLmW|V|jz}CyKUKc_C6l=gN^SQr87i}wzlqi*|VOH4aB&s!x?MfE*B03d^+{oW2b)49*EqQYcn3)`?rsOB#&2B5oaD|fqUyY zk)MwC|NP=n`hMowZD0vj5^EPj@Wklo2W`@fHCo`n<1v!1PM#Njp)ld4lDVaQF`M6<@SFaLdryMUr;6 zN<~wl=F{Z)K@i45VZJl_USh13yNYz|oUJ4A94Py?!Zy|#Eb;vOxJnz@i)n&5q=?_Y?zPuZ-S~NVDo16ac zl#~~o=>0z*#n?ZO_XqBg6iB60E30 zlq*SGigO&+Y&?22ixj!zOg3X$5hHH$$O6YtL#0g$@Ib7kP`XCJYSUU5osM7MnIRX9 z+g5q`c$CjOIc3vns74ppD%ZSEh!QCslE9wOTWw!F?iaep_6JEUEH zD2vHL6oxizD{s_n7_f2Z+ThkAOm5fK_Qw`;AJ`43pMIOm!>v zeUMq#bsM41Kw1qVQc~4#B^j>UckfGk z=J5hokV?SEGl{>7&rEkx8-J4X5&&)f9#InXabr$G26PD2BNXb|c!ouIxTc>OnuHx5 z>~SS{Uyr+{5j_K5AeMVqwgyh`d`$`IM0CZaF7QiGhs%0JpQv`>D!9O$zxZ^NXi*vL znwhK|mrhO%1xAu=m`FBmgF-cAs5HrnmE371ZCO6IEkZ>f*`1RMH2>%eaFP+EE8 z@^c+|if_WuBe{S7{+~~Qt!-lqX@p&VrrK&gzH@L5Z&1+|#Rj$Jqe5AHv4rpg`elU9=ZK#{R5f0QwDJBnFUvMg@>(v_E{J~CfiE~#fQ zIQk<7yv*o4$o`1yPh#)6*d1j@!=14sMB3pR(-QW)m~;mgHom}^)tNS?ORsJ)Y$8%U z>9^oSf~b)916+oBXeANS=gpgEiQxg!_eh7F9+qs!joXqCE;w`anyui8e_Gk+XBg-8TXTfxrrr>#dhn~(nxa53~*E`*Mh%fv22GZ>9%c;)2KuyzLwYh zw*HUZewNYe`q1hjFA-qCjwbICkVbX!CvaN8O6bLA?k4E=?LxRNmhU%!woH655)_G& zk`jy7zI~C=&m#`1mq0ep|h;A{?n3@ zATs=r4*ON(r{%^!`0|H0%Fch@6o~L+nLMh_i`>+ircv zB!Gz|d z6jmgtm4NKhpUq#qW(bNEtVRQH6}HKHu)W##sh>nNsAat@ZbI-cOZL{SDsT-AQ6W5C z&2?TtUZ3rRr51=_KZc_AYA)b=_-ma@tu6J%SY_sR_MoYdhTNyk2x_P}i1N9wW3vm= zF?%p=@9}jRj+~Nv&_GjYwYtPx6aO|&4CXDJ>VF3+G}x#l!&j*ERQ3%K5fNih{mg@r z%D#LFu(e20k%5vFO-hN@80DvM9hfv}IM7KZz9FJxJ6QmeXf!!@-0dkY2d#cyO7dB= zAyvJ`6mV5B2BJ;Z3WOLZ>~sk0Y6@AxG>m3zt2_pZa{oSY*{d)=#Kj_+Oace=Ep*x6 z)lx|hsgf?Sc9gOu6pwQc45HlvXtiVaZk|uh!mqyM2(DsfV{`)zvq-2e(gaYx-LHwy z0{Wr>nhFWfJflxL2z{O<2b7)c?&N4zOXPCO7Dcl@lf5WRw1?Ohv|EB&k14#-e$6l^ zYCSZcYZ`8&&~h6-?>EQVk-*PAJxlq&@{M04e+2#6x^-VV6c%XCnDTsE%pnLl99rNN ziB?nxfoeFL0%r$pvvpVxD;!-gUOPleC*MY>Ds| zBI|q|6OQ`EZi?}^jkG1xhRv!-g@N~TKqMF~BZ3f!QYdvGN~Xmo!LZ=i1P}x8Z-AF? zqv|sqz8U~ICEtx;&)W&*fE6Yd#0SQN6MX)~RcAlE1^UouyWx(FO-roh)9(KMtSf4J z^>*GbTwGqOVe$Hw?fS^ZazPFGK3z1l=LHpwD1Cd!l3A)$!|~hXcux~o6ss)1LpXI8 z5hp<`gws_NXo1d^w^4|?L1pa~99P}@a~j%6$Ew?7^cbFuC1`~E93P~*Mc?=YXO&l2 zN*WpN_Mqh^(E|y86z*srcAL>J@W55=SmOFH!0hp9X}TEx@4^!%WD}Y)eVK)qEOJ!S zIu9!vu_fW&0^YY84rBSn<=eB}1v_MJnG{av$1fn;eA(n;KtL2Wp9(Jup6)0*GIwgZ zcTR!Tm#ywgI;730PtN=-i(naWZ5;wPe zA(W6K5{8G4>Jd5PhJZ&toD(RXNfb+O5)OA_lOR34P#nfVNT0=&YphqN?E`mr_XlpG z`f2eU!)Ma+cNrbsf+R)L7Vds)r2}XQ*%fgU8gHkBhsGu-ExPb|IC?xDq@7}LJ*Pma z$q27-4S13|U16dXj~5OacEfsUJ(#^s>;?9K(y@g@KIr?3vJ8?0od29}bjNnj_o|X_ zyYKFd89{6L3Rb&{j?~xG)bx#BySCWSwJnA;+3H<8Rt_V&RbY0PGkD(y?{f*uA-B8i zul_}WCcN9~&Q1xk1jG%zK^Iz8sMk%zxVIITeri|0+rk(u?sVywZU}guD*9+d6zfG} zFCDNu>GQd;=R`^cySptoZy6$=bi&i-!t=5EayyH47G1qgyzQOuDeK(1b3jpQlZQ;@ zI?uKwp6K042&Pk2j?&FPfA6MZD?myrkadAf?6=Q9{j);PR-Fz%Qe=Gi3fvz|Yy z0SI4~!6$i<+je!b!&t4WB3ma|TMy$N`eiS>V=I{H9=v+rNpw~C39+=gxjj}*8~aw# zAFGujCj>`zmSl9Esn$GOEVx+W&!mPqhN~6!)MlYC`t=vqO$kH2z)PhmkG(SHh=kfr z^*`+5f=SqNVPO@F#ZZnd0hfj#H$Z-{pN-$ zNOs_TfHTr7lrz;Mu+b9nC20BJ=e&LwiVjjzQXk}=X{+$ll!R78@khbTIIrx(6B!m3 z7Jn2o9wGIR=y@x4#sjzmK1M&2m>}^}6@{ZZPd|7S>nGd3j1#Kz+;R}W!DDIvvp={K zXlcZdpM_fa#fEN8z2V^4p|Gqu5mFngGu^^FY(YZbw{PF;CR!PWO6K*ucjY377mL>% z#7P1)B(YVo&2Q+W#`DVPa`{vn#g^M!uu+YX^A3IecBhMJbM@8aU$tCyQp)$Xc?Z0t zw6xTI$V5)w;5ro7n8ssJ$&hnIZ^X|ImXhhGo186vu0^CvfS=;cGVj#ZrLXoe(;M%;FLIMatd;*!FbeRhjX_s9_Sy`?SA6h*E0$NK)9Ru_ z^U@rP{kw+5=P0N!9$+JsUI_&t6$iC!zxDpo^07?E<7Z-$x{~j#s@7vLm_-Ofy>Cwo zPS2cB1Ibw$4+4IEjy@a;QV-=d3%oQ+Q28ZD(Ng zpWIGGRW5cRLf+d(BQ`549@tdtkTqRy{{sD&qJ}>F>vv-9qym2~>9nBxZj3C><@lm1 zG<15gg^V*e+z$BMg4N4<^(9vZgG^GNBu)^oq=i;>H`28(ij|I}91XM?$r>_EbEomk zO1>R7Wp8fi-|cH@?_7fYapIWa;a7mH*EfVj%vp#ef*#-uYjgx8Ex7+Fr;k7ticP9h z?#SoXD3T~eWzYB2XcqrXxN4pJk&k;!P3$DH|_(@GbwmvUH@ zLW`Q$;eE)g(f66 zHFZr~l(d(F@LINv0#k?E#@_%mO=%-F{VH5&@wB-WHf9S4d{?xSxtk+AaZ$F`QRnyt@+-AQm>(atYTUfOjjS33G`|#oA-Hq-Zai|`J@7=e{ zPtjbEjc427QH*eChkq#xV~6bb>}~st=hzNe=oJL7F*_Hl7F^cX6O`AxlvRe|+3nA= zLZ%PS%tCLluezkpFL57_cs?gjz7oIr-^OZr|9z|`Ki~0+xQX%ut~1X%T@r8KmN4rJ zjjf40b#qd-X>sB7G?|{wEv})Vp}?N0((hM5JLpW{KxU?NSE{PPIs;?n#zR@~zzxvZ z70U`z5W7^O@nDHzm%rJNOvFme`Iqu%W+;E-D$qhQgp6IdFMIW%q3Oc!MOLj~W7}If z0ZnB^<7uYX-o4uoX@UL@g|?qV3y*iFaO0R-QX4<`v0w&S7#5=oOjYARqP`!7up9K^ z%&aAn2cGee7N=pppu+J?`~n*`oG4ZpvLVWY&45KMnglqkY)1^yWwBU(gT@dE4nOkl zEc(cReLOULS;`{1FrNNeRATBOk}MF`3|;)dQ+xMk%Uj#a&Gv4~J@`7^Sdo-@%{m8yj22%%zQq*Fe;*IYmC$9N-VO5y($ZRsU_|2;kSxzG z_kaXL={nNPKGQuKDXlX7{rZ8ge|Xm{b@gSOF$65jq`}l%<|H>rej^mN57uC{M@nj! zPOrks1&taW-RsNNr5IUnX)i43tA5e$v+jyuJK&B=tk6ra$juw~ZLqInDNAvGS9O2Tfk!KS${v$H9zZ8kVlP({d=Q z7k~(MQ}r;g;pn&!Ow-W~J}|D+3#8yaWUBUs4PU*OZCK2_WLt~yL2c?W(WE?>;L&dn z!UH%Mfwr~c-S!wJ6R3m)36Pu0;S3E^Zs_?ee~W53eXJTTZE;<5!b}fZhYmqSD0=kM zE}nWkZc!goP3tR-bKO^LAtdSlrMlL@_Hkst zRm|g(70gDX*tu@LvM;jgF@s>~Y}l~Dpozno)EmgEvEi^8NCfz!S>?eq_sR(bLvBVByLY z4V*+eZ%G>>B>4fOJq3=PBm(2~ zp=*6$tpZHM)Oz#3TH|5?_lr3#_&qT=fzH;aW(1v0GY&tG5cKYqZ-t+7G=Df7_xdxyZF zYhduf>Eh+h?d5FwuHM4D8S`EpKvEJnv}XAaecCkC0lB3!&RzAn>)#y_CW znep|)1Lcy9Nw^PdmdiNaCZq!(rO7aSNu+J;)?GQ4QP&b4^?XrRQPKH&>y=A>P8xTzc#> z{2ILxkPtxA*sw6ZxTxrxckkZ4RWfDs?3<(0+D1MY+YdX~51p$j!7W&bIX-Jr(w;Y5 zz%h`_fhL}zxh1xFaV}ecK>zHEJvPC!e3)TNN0S#~>?8;i*T{Ihag1w|+D#?ogb5R5 z8+|04aIo3{lm#$JZv=BhZQ!tgYv(&?SJr3j0Z)433;`0Dj>qyhx)xU$;W@o_D71t= z6f#f8EA$=d#7C8MZr253YJt5hkQujqoqCshrGE5=KPD~>yM5z^+K(nbf21#2KJTNv zj+?*H9!b*AiPelqg7A4FhP$P7VF}f-ejB#=Gi%Z#se;w-WDg*xpkMV%RJ*a?E&Pv( z)5<_bBpapYVBLW^0uP7}uY>|!%7$~h(Pw+YIGD7Qh!^N@TT2_^y~H|C%p>hy`s1YZ zPAQAju_#rByM3v7mFITs*}x39{27(CLxSEm>s9pk)VfxLK9>1qkqe+A%$c@@_K504 z1b%QRJnMEk<7|umiYn{BES!}WmJ}?IvI|4801|2T=J=rBpdDdo+{bS&oOt8I_v!YV9~T?{@7EF2MKBxL_7WqA6MOi;#<2_2XxyNT}a7 z<_;2g%xMD;%Rcg)JE*pRYa+kKnuC8fFPc6qg}o@1j$bZ}5Vwt!4rYEe zvSz;M8mHW`-sDA4b&>oUuDOJ%)96`Qzo?|duOoY<{^-Kl?K%6~{GwRV5m60WVmTW{ z*epLCV7dx8((vp>&oO=6#>N1iA2Z~id?~TN4`bhbLL_U)ysrWjJamto5}xqwrb8o* zX|}cOXj&?OqWx{!aH5Az(B8{co#)MRUcY{wGzxir46@D`KSgBISl=mGlTp{$0CK`H z8;}jC{suifso_-Osp?7Q@807b=34!0^B#;Z4u8FqRf*>yK;{P?sCn zh{X%kYL|^Vx{4uW5EZo~X-&$xCg(?~s#>C*OauA1uhgS`a?^v0R^=OzR69Y6iFfZB zfD7L>xTiIDjr#4vq51k>*93lhTW_CWzOcP>SaEL4<0#q2H2cR5M{gx$N3T@W4@fgyg7?3gALqJcx8Qq$No!^#@3)9&t zdyi+N_ia)fHIpbxovkoGxZZAKBUFf;q$e{>^Gpp&HkN(zi@tNsb zvhLN${w(_iCAqIQIWk>WNz6a{tj}w{-6{%`2GHI@XeW#F%%{K0aIkWW8}l0)?1!TK zyt~uAhGcY#Es|wkGg;BLvpf6Z;^j1AtXiG0^)0u84<9`lOa+YbAm zNAJT~gc;5@epLPkj{nmu$rCT|V&cz^=AdFyKS#w5O1JF#K-#1GX#iuLl%)*3F~(PM z_8&?fSw#=2SwFeW+ruATI3r+>?Fc@@Sk+_$Auj_x6bZ$ zJQe}909|W$NDudxli7yzu$<}RnSeCp6J(aQ#Yg#;L4hoR5FwIu0n8o{-?zop_Qe|a zwr$2#l)`~p1`{1pGApe}*lseY(|2$ndc1dwq?A-)?h%bK*uPO^PT~=x7V5-q8s_Z8 zo(fHbftpk|yt5QOEt^)SdNzE#aM;0<$R$a+U-U^m!ojR{+sLL`t>}Kmz|=akBAIvA zRy%9WC(Rd7?d2OcGY5*VM04VgI(_owFIjbVFv!%02QRUBUBAg2LJh&d;NzmpL|Z`p4F|6Y@CC>dGDfSt5#J* zHt*B=O4#E?oG z&>ujSwoi99cjff0%jYXHu)Wc5HRDoi?z8&l_&FRF2F+UC!GdWTD&sCZ{N;p_-@Z^S^F6 zzd%CS{L0Y-FIUYBn%m=Y8VwTJhQzGz%G|Wciwpf1^^zFQMej)5*@hOS3P{BAg4K(~ zcpah3)B)q_?bRhD%12{Fe2nJi=IHl#q0?c?;|0?_4cRs(?UShRJL^^qF3!!cSOAf% zBuch}(6EoBi6Gn#49#Xg5oTeYXWUDsOkVpQ^y+Uqbm$Opt695(cR%crr9VYdX*5?P z_CQ}Y^I@gNbZ3hk|JjO@#BzIefF6ZIwBLd6R9;hey%z-KGR|~+*qhz%;~RJp!)^Id zYn#rymft*If}QF1@vlip;*PRU_mP7$N=eN*LTaUOF~OK7L33MkW_iTWbm6K&*M;2K z{nc4nS+hFO7^XJaq+ zVcRlxH1ddBmt#aZwBy5l%epa5VLoY+{Ti{DaJ)Hc&?6&eD3^`EU2))X=s2nR3et?`TTD{WT{t^7pP(?DpNx|B{{@v#9dki`+V^j^=Cxb+{3?D(xc zGCRUEi@r3;P6g8uT(~sHLx(=lk=9Vb$T}mxC%oIV^Yu;ujw_$IqmjvR4+;n{!NmMk zhTGn*w^#tarQ*Z0&yPT|T+Fbyo)3cNAfsu^f@iAQR=3lnT1e9v#ih=|1pvc4X)W>#8pJT){k3221rr3^4Z8+2 zIMK*;9fD|jdg1wn+=s_b7OnUW0e51>e^62pto8`YQ>hvr^z0D;Eu;AP^K?O&Zle`~ z+DWJN7mS2wi-bNMk-E|{(0bV4_K`2Ybpxy$SP9;rB;B#+n(6@_8Z$=hs^V~CdP8k> z-Qnw?jXI(qslg)fR(-esGN!nnkweFh>mX1r^1I2y7G^sn-dt!(!ObCh(!S));? z5WtnS%gJY4p`<$0ij0hsrMgnbS`f_**H1(xchWi01<96#a=gW|mz{l5YCK3iFj~y> zOiRdwPZxF&s9q6#O8i&GYOURYFf6zmjR8fZ*aC2fHa!!z z$5{b#%IQV4*Fx={e@{OZRJNy0^8KeKlJT3b<7c0 zzirJoE>)dFNnEkwKPib`rRlCBLk6`O+jkzmR;)OB9PuCWyzS^9%R!s$bYil`n-||* z#fdj)F&%=2P{2!qgO*wJyF$%zw*_ZwI|VK@+8LJ?_T`^A?&s5^Fa!k&nyFEAQDIpl zN;%v~K2bGVHU!`5R=R!qbG%M1S?8pqM4%GJv|o<;8p z)&PP?lMK+Y#<=<&c~@opAI2;D3CQo|UU~zYNAcQG(}#x9Z`?rUxp!hSBefD+g_0=L zz^9VoU%DcC&uE0*(Qyo(c$(&M)(^4SW#$w+%PRwMjX)D;*e8V3k#c8N$?lwLLJp%$DrdeZKx7Ap>hK&g+;n1z!4U@)QLwNHizw-G^*JyCKdPP{zUg+<6ynyv&9X*fCKq zX@_^4vC`8kvwrp*+2#{Ui%?_puv+VJf!N@plU^W;v%73Q1>YkD|Dh^ac7b~70 zd9~iJFu;g2Yo8nbcEcXoO%oVuNKORm_>aP0Uo_PAz}WNxQVZ@wj;H3sb{6sIB&$C(SOK_M9mH|3|SjM)SkE zIp?gn`gXQXRSU1zU&qY@Ev>B19m$>b9JO|G^6{n>%T@pEN*x$n!`_`#bi(P;j~9e% zNH1tC$qjNFe^RBbt2$+tciGAFZjS5=9PDKsuJts=bE^b-#~Z$ z0vdZ_wO1Ppn0sGOojHBMn$6g`0G}@-1GO`TRb=`@TD>OMLF!oG3bEq!{ST)AfnK_l zyKI*T_txTy3_IF5P`qVK?#6o`m@LQXos@_tk+mqzVvw&PWEj7TR}% z@f*jh5sA8Q*&TR0lG-dS!`6F@x^XmYup@E}tB#4*CyGgIxIcfCWAsR~aD;d33OWCb z8NdEQ%q`+9fpSJ8kzpOpb@BMQXd<19R^DmF6uP_5ZAP`xe)%N-cJ~h{g&0+(!`>CY z1E7XY=)w$#pAwxiwBegFIb6_cBCd^*1mdI>mb(Uv59dXdmFXZ_V(+H|&TYGps+db( zgYlMpFx%X(j}HWdD%(4Cu{00{dZ%44zIjgePR$(=*2I_5VAb(l9%Gv~ij>#XB%q@~ zBoW$@a3NkT860%-?o{-lkF5%0B<|ZhYpu?+E@Aw82swO)SW2uNZ@U7!%=3-}v=@7Q?gm z4rqd$h7|XHQ5223z*E6&$U(9Y1k!-PCk6JiDQSt6kKq+MqcZ~dflh@-hrli}`Q@u^#0N2z6 zv$G}AZ-&M$Z`(V1;W@Sy1|1$pyO@MDd)f)3?bpAx_e67Xcp^F|=V5p7A4#5UzL-Hg zag7qmgNz!Ij@0!}4F5wo8HGN6h7 zVEeB8>jaC^0ws#RW6yg(6$%!0^j*JoYxTPhjWJpqxd|j9W8fDdq}R1Vut=s9{?p_N zK}rTECrs_dSX=p-Ppgjnx`kfwH{7lxH4$_%p?P!XKG@NWvH4E0P5`NeU(;396*4qd z-mkY4Wbtur%N7<7sqNaeD-K6C&Llb)goyc4ljsEPK%rAE&NOQ|(*Eg4X41qmE#Tki zzZ#u<#A;stoY3}r;225rAa;8@+Fv zJ&oeAUD|YONG{Ewe|V)qrWQ=6J`4_ki0FM;{?&*%HV`ni5Zo!GFJ>yl!My~(*aO1Y zIJ{xe%+?oDrc25tXILwyh5o@=fIV|`XvC#GAr2Ak2j$TgY@kY#69vN+B_5DL*NdT0 z<3^&uPe~lbVWMOeJ-%9u{=N?n+Y&_1!Mbku>ZsS?Zy{VC-|cHrdo0(8Y@uMlp1&4# zSyD&TLG}*Kbut(|H__&Hb-%p9v9o=dUv?grhD#~(WdgeIRV-3bhAeC%$XUpyo1e|? z=+KD%L3{irU^|Fu?}fR!D_t7g!7`CWo9z5dyik=*Jaw?QE*p(^opQd=Kgn_sT;;Al z^986Ha2+1)IDp|7I~v2@n8i9f8wXPlzo3J0rbhrVdyKLDst8m(Gm6Yf?>A#7=H3w3%H=WK-9C#8^DSf zLurQBK571O7nt~bFaX3FYz=g{0g~?5k0%wov)~?rOdAHy?}y!92=W$4HHK4b&7(>; zwnKRSEmO$~#XcyoILY&hWIwhV#CtqGKv>k}sq(?GGFNL^@hi7Y>M{XEmU09w8qsFaS1WY1}5RGqKv0?ws zMEs(ot6S0Ga6YDM^Qj`qL+@3Q7iftENTqm?_fqrLBYi^kjtn=z-_aH4pGUf!{6Hoe zXcIG^l2wtUI?_hmvUxKXM07ArLn!zQ$OA04T&1XJ3;+|iX67WYA+Y`lfZ~wx({V7- z1qo4dZiqLe#;dU-$fv=nyYa;Sk1tcHJb5DSj4wve<>W9jqQgk68QdJk#Apo00OGI5 zYTJcJC<~Y@6tW<>VhQFrMryT3?dXXd>ZfMAWG0b6z(g&H#j!fr863!B4QwF4iLA=AgnQ|5pkFHK(SeK{_ko7dDQx+E00xZs}LSS`)_FZt8VB;0gqWG zEG%p#fJXxo02!?!f^0|Gk4Z-#7JOH>-!FM$G4y-NmGMBvE-DPRE+IM_;t=dBobL}k zbAczz*1DHA|B-{IOnE1=9aANI`;RrVeBWgADaB&v=sPDAi_%6FB^wwM>8E1g48@Z5 z=uwdRvF^voxoq0~z$)d>zHW`JLOa2}L=0?5(lRDy54JoR`%;!opZLq)<3~o>ZgjW4 z((iu5XcCtN+cI~7TnzUmdpO&SqFUaCit+W-(F5$##jn0!hRiy<`CEOrTWI%aAxo;2 zM-Ok_7jocLdH{yBXvm^RwL=Ok|RBE9Eg0tOL^x@2=y8GR-Zgie)O1Y7=-; z$w)Bdk|dsch2(V*&^@4UIR$`vVtl+RV0-M+yO;TGkj4uF(o%)Z?7sH_nqZ`pMBU`h z83}@+(+b`gc~BiqluH9M41#oZblBH6D`7n#^i=jZ(~Gz+k1Cmu|Fwr1iEqxPb?GI( z()Zs=))aQS^c-J%!HZ}!SY5z?eLep_c%R)HHSf0jqfw+p!q?cmq-IH{zW&sk+1|PL zAMJe-sCs}s^G2rjGv)({xu10=Zo)sW;yN#UYMsW$N73i5o62#;Y#KVjeC|}HF(+i7 zKCeV6^Uuhc_bPn3{!*KqvG0=Sd2Z3arrfx6IL2-L@S7XAHn7uEcb4RR^N3(>D{&J8 z@O1Z>J?F%fe&icVrsc!6`NN?kfQH)KPsoXJoo%KUyM)1xMv{j#WGMFIhHZ@zF3)>Zic*BQis^kXAf+Wwk{DIc$~WGPRLyEEv$F-$uVYnQ{C%g4mTGa?{J17PjknBl|7^jQ7r~L zzeeOq17?=Gh80(T4A+^I+KPC070Z4FHL&kWgN*#p@$M7l9?5s^?1G@BL_>dne@XB- z$Hd;enpDxFS9bZoir0WnBkDD?^KgJV_i+Ebt-n4iao}s}If`_(mlY=Muo3?OAez{y zio2*bjw>V^hzaL6*aLT(@EatIqD|L4xve)bGbzz#oi+NcH8Q@SS-YI~^$o#N-%q|I z<+3^YnN~i2ejHCmtOhR3vz*3Ym_xcWHZD#b)lJ1M=zF2=ptr*)oe6sZ_}Zb04sxqG zwQ)m1KnyWqboM&ROl{@mqHm$KCC_=I%0&Fvt1<(bu_q)f40FDQ zRIxj+I7d)+N;^!cb}2+i@khl<7bmE+OgVM(Et4$pz6GDQt$h|yuBN8e3JuERCHcl^ z=SdDOFn7A=;J(@n<_?<(Q@#29g9}wfF0osVLWygo^=p9f=~k83r^Niy+#)@_u!+(B z2+@uSY0PH_*{@*6ME+~a(EXAOn|N;{z#^bgcqrxCybzd&V)DqOW3zs60b)%UyZ^M1 zy#C^aHfO2!A0LyaSIcG2RH@pE0cxq58mIp zu!#&UYkX2tL_q@=OvkKrCLSoL$lPr(_ASc$@b>M#o4Zps!iWq1V5K8Ee`#(xoe(&^ z1QiAQYH#0KJDyi9B1G}j#=o3=uA9MGqD3-NOBHeadWbBeUB$A&Ai*{XsD@nf;&g2{ z*d#@79|}F>gKb*$1)87ttfjaBd`bU1%)X+e`7sGz0fy=|C$LyLmF8y21HJ zz0g7x=aMu*xftFv&nvH$m9_f0ctPpM<72YAIN~H0)R*GtrY80J;2+rIW>oxI?Yxv# zUS95noM=UMnh>8Pdv4CYEbk+##&BfBh7O%RecBnq*H0Y6%#2;uE?@iN%K$d_`_3vq zX@Um;TUT`cG-2_Q3|r1UzYd0;#Lz5;Qq#p^J&~;EeR9eB)3ptSgoHS2I#UG#o|sC? z$RwyTbrN>py9-t8Og^PLX=v@jSWUe!ekzzb?28(4(}c%q`9ge@JVTW?!LMy-snU4} zg#K^$#EIkzJRPXh;p{#~jI`ls268^}pNP=l9Dpc_n|pCRd6UvC8Y z*n>4e>*eHboMx|3nk ztAn!{O|7l1FxHUdkNQ39N8H;2aY>14^M5?#^e-fh?!z3Al5{8Wo<^VFyj`NNUnW`sQ0nqX{P)4ZzNlx>^I^j zCMN9Y?;rM{!St(Fn6oFNVhQop=B8;M$;)Z{a+MG2Q1*EPv28rl0JrzptksIT_M-J! zA6Ym4^H*~zM}$F{G$(PRNRASS*{wx^X2HG;RW|M^^Iu2!@#8aOkAP^;uvi8Q;>}^~ zo_MKVYER%=M2R9@v%6?4)Td&F7#$UGlYKRTGC0V{Jus-{yk0uX z5q>IWS`k~%vr`U|3*_G+-u3e7l9tdKKS712qq zaH0tuxm%9%g^rJ(iUzlQ0=L0lS!F|xv8|J=t@LEiL-6LIP%ciPTyD>_3b?R~u&@Rx zLHaQN{AFP?c6Vo?PU2|CC=Tgyv@`)$%!f2{NLZu@EFW0V*hENVXn8|`vMSlwp5mX< zCQB@<5@d;j*lbVp$B(xtpW7a-yy2u?k}6uj@_c%bB;z;<-O5YDv2A+~Hts`xwbN~C z4_px~#U8LgNQe$xb42G$@W+U8EWKpR zCt9gV^X(kF@|fEny;A6~R_hN^NV9Zusz6Bi$=B5s8BRFADo&d)8D+WI@f^;J=Y z2>Vz)p}jij;F*@Lt`t|4ZbG7*IErXx&Bm^N8+^aeVB@iX{+0&BBgLjD@j#4nH3q8( zXJ1_d8Vs&X8_!xWCRuUC0Sm)%7siKivi}5H303%XR#(6%3eqr_d zqgP9C;W5D=+($iZSr{f zyIshGlMv5*RQr{uxQ#3@LAiKJ$UJ^NCYx*xHzmktHyy##h1mSRlBNdyK1k_6tSHr& zPv#nF5@5_Zn8~>+0%qoN*+C z7UN%7II*nvJ8%N^|2(D|VbYP8R_xmO>y^xpHEAXG4|KJj8Z77gsB6V@nY?fcIn08B5SJRI*|997>x|G;vVz6Q~3@J{2-j zZM3aVBsDyBz1!c4^1pdww>B1x%OP15*UlK6Snu7dL<~BTPoCk{x``}dj~1I8j6Iy3 zOr)dwYPXC56bdxq;BCd0ga9S^g5VP!;!|0b z_w^cB!p3b6&dvb=qrx14685r3B@l68#hYIaD!nsYH902h_$&uLe}I>ww&Q4T-`Y@I z+29XT-DdDXDxX}0E|s)YHZ&MFC!S$%?G9a86e6=qX?Rp+|{?# zSi8FFdweYrY_<`|*Y!Gmx({G(M6A9CLhj!e&Z2pz5cwWhkG!idtkE4Bd}6u=`v9kn zus1}z*>GR;XLi2M+Fq70^cyYtT{-e@GTEU@G|H8f6GxgefPvu8HCi_#m(4kva*>6C z9tK4I5;*>G14*fp%NyJW-Ju?Cg|v9Pz9S!V<37YoCGy^cQpDPxZs;}>YosZ=i|zB* zv2X~vLcV)z2=+>C^L%`K$XX8EmmQ9dJz+(`)*5b~yp1cM3W}SL{kdWu36##XvVqW& zOV^1855%m^z|MtzELoo*_C;!06w7&s55*-X0|)B>ul3464IDZ>l!s5DxRXiOb91 z++&}+gS_OO08NIX-tpGy#6ghWDp)EfFOTAaakUDT@0@0hdie{msKTQ`;@t9&W?0Ywgc_){z3u%WdK zzO?ed>PaUC9m?{Oo_a@l3#^Xd$}N<#s{pYmwn!{Tja^Y!ca!#3DMz5k?E@od)W@N* zu@UWwS<{NT^7!|cm0bo0WotVWYL8DoU4Xi$oCFrZkWqzABvz8T^@?k(N}90|h6@}f z^JVyfutH?q71ym41+1(>B+56Ac0GJHe7GbT0lmpb26PoWmj1_MZ}3O-b6jrHGAFAH z%Q%sE!>d~D?*(riYTnuzAo}+OMr<}ae-t;^Qf*q))}aP?S>V})g>GIPxm)xA%C*T8 z|M+ox{{=^Awq=vOPuQ>b_HT~T<^V5v$p8E$DOt#oN|f}aZ9Mcgq{UC=ISDO4-2cLf zO9_P#{vIDH7BH#Rv&WAgpA6ZK7JF|Snp=v$WQ#Zgee1jXi=IFp5w-|+cRxKkw=$~g zVp1Cv%B3f3EkJWD^u!Dk05;rIxzK8Uhm@$*+##>Y*AiZ+w6X}W1C>M&%{fZmfD}uK zUjTO&gUYNrhAjFCJ5|DwRew zlAt2QD{qR2T|M>pvIQH@G{qV-R@89nl&hxy^>*lFv z$CWokW1L}Dklt2Y4cxEWwPGBnb9}qFYTATEi%8$h9zt?B8ZnQb7T)(joB^S~no*C*lq|>k@ zyLgCq;Ct2qQo7)C)RK^bhHC77Bm;+4;T?Y9JDoqh$xqq}F917t_ph2R6(9yS<#|H| zVr~QvZA5uHEaufk4Z*L&4I!kRG+r}LF9W86B8^!91Q=je(uivNb4~jp?0<)iuN}B+ zi9DVy-P7ad))yG?G5%QjVi!1F(~0+iKTe#%)R*tKln;+EM;8j)>@tOV-6?+rwwVsr zX>D$Ir*_y6Sjtjc)r1D!QQ+j2;SUa@io)ML^S;vC9rIs|GktF%!;KUR4mr1vEL2c; z<0t40&*$?0z3xVSQHxpfTtop48PX{<8&}U4#7X6BG#s@e(J%{TH^ORf*^P%Tndca& z&5zA-TS&_@)+U-?rpAQ)@qy7&Nf@vOwQl`#iw+Jo07RY}%Le#1q+?q_yusFxOF6eb zz+S2XtJd8E^$%%Dc_VhBw(Hi|SmI}jY9LQ{h-nYUX z$SoD_;`;q86>ue%EM3Z+-=E(I@w1zlamV@^Qg2gw#F~Vj%RqZ@Azp@*Z}e3vm#c7T zr;Vj1l=QI);~Us_g+>xQySbicxUNYum!=k=(tHB+964pCQI?p$xLLBkL855|7Vjzn z8buGsHsx2uxy<)%Osh;WyI%2ncjGgc+%~j6N)`^l=jYdAEf`5Ei`_l36M+^9GZ-*M zC6Qvjf1-N zuZ2f)1pJ5n{MqWQ)m6|*qVrn+Vw_EjG)G6MEWTiviOvlX!HD)$0Z#n+M`z)A2FaLt(Lnm0 zT+b&tvYau4-Xyw~m93U+A8frRRvbZqdU~MW1`E;COOmTUb@;3ZM^x-vcJ4Gfy6F5y zdM|4&EG%;BE6#7cD$QG6W)~r$=DkoURgu=Y(K~6syEkw`+hLYv`|6#+b|z;uN-iz4 zUmbq*=#WDT&L!nWmf7}wW5=9a?*V{@jxN@XfHt_gu{S=%K%e9(wogA=-Ew zL2J&Gpp(>{mw_EwZr%fH495Ni(417FS%L1!1P|=@kkqldk+A%SFTA8Gj2pL3CMh&z zK-=NsIp~*>iTRp6`w(ZzslX&jfhF$C0C=Kt_9jmXU4`m5oHH;`4_yml@IW4rf51re zP^Jmjaoakj;x<;zXRRB7T+YFoxna}er=fXbW9IeU zScq<(`D_QLW7M#L{`y2G8AOAX%EX$r=uLAbX4S|Yt=$^27I%VOihc)2qaG)X^;j75%yj`=_@G>uT0m>Dg7`c^R!7dA835TzSS1BuJ5>P#OH4CvO|c zS_f1ikv1(8P>X?OufwSTYH{6Tr(O?-c^&kCYa(~ep4C@_#g#ui33dg`K!{SJjqzuk z>z@f#A9wA?Dv04!nHD5j7mFCwd}mcw?Hv*6Y}!BYB`&ce0QeO2>4Jh2-?0zTK~#fY z#-aInyCU|{B-sapQyG4I(NtOyLdWhGAMrE2*B6My^9z((ALFga6eu#^6uk9WoyYJB zT#F556vO`}F73w*`w<rDIy8ny?F0+ozI{?;eQjhqxdY=|)T7nh=y zwCt_N?W?d=K6=wQu4;_L-@ z19leEdS(TdUmV^r>Me(?t`tydEAnim1$g{FKm|cwFu~^MUw`=Vm0JKdWaBg$kw-`i zhN(^P_dl{C55WuTewo_MD{|H3ZQ9DpRzRa8mY_fVj%8(I;e!+#BV6XC>A1jXDLOEF za|7eL^Wz>V7o9LfapAw{!ke9yDVk;PGfq=Bd)^Z$%-{S9t3UOYW{;X6E`ITW{X*r! z>+Mg9AOld0iJR=7G1);7(5vp<`!AUSqvgvBn1If1nmATy8W<<`!~o$~djJuudLPEY z`3SL29{pk!P-b!FXlZR%W!E~=qB@37#FCgfzo!$g2qX{&7PmTIG|@^D7`P-L02ut~ zK1KE-d&(aSk3~lSX&iVqycKK(>1_l2zi0yj?zA1|k(RIBy=TulLd)Pz6A*8mDXpBI zB2z#ZG`NYheP$9>DYg@5<~!ncRmDPvLP`*KJ7CcG%qRZjSOOxqBPN z=SZ9%F!!O%z(Iqc&6b26fvv51$%1ncgwK%V1$?Wzx_Ws{P2x!Rm%__MnVoT^yq3Z? zP`cP0R=D^eh|23Sc6Ax7*4h5L5OY09X&m4)qv&Sou3_@GlVs4Pp?$_zky$_Wbnn^n zOK7)I91oYKar(lR=kC0^LipEKY)Lv?Hb*S0rUaP&T|5Kwru-daofE?-_Va=LyhFM0 z1UvP#0XE)+2rPE6)*oXZ!=*`@fwft&f1+%dvkJ#Fb`-j5APJ~3K60K+VhW=g&Xf4D zIO3()1*4;hQ^vX1+JMrCIa6xIae0GH#wI7*yIE@=$iab9j|rcvnCEy68^775H8is_AG;}xPjGVQDU|J7dx3riXDkd=KN)fbhFkcB|~5lULMa`o-DwhF}kL+G}g zwxGX~Jc%@ek_1mo#z=A$cKZYh;KS;oGx>d5fS=t{ox3{)O>x(kOIaPWP~G$7x?jub zEfw-Q_Da~%a0O^cLEG&m{-;kKJQ(PvvRK_)Aa_-VdW!S7z&e>Iifcd&q%N7P{ITYm z#Wu|%ZH^!)8Ep@@~Mursts7iv#pfkB{d>^gyId3h5Tkf7?i|5G8N6bphFmh}A z@c4*U%U?A9&cF2``EmuW0C3+1*kz%-UQ0kWwhd<3m^c+NZdy1i=vg?C*f2%jDoTl5 z(8938^f|Sz@5^q8px8-r6LQR`dxPYO1Lsf zhKcsyst5ai^cNJS0FS(K^^8ctmbFY=cB~Y9UPB1TPd~!~yL|7V6!lUhXqWN4fNM-i z<&}Y~dIa46;=0b!+V6+@BgAd&`oX`>Q_;zI#coyga9e_Knw%D|1srtZ-;0mBvO4%r^c^vWe!*(lF-$Y4HPDom6eM5 z8W{7lD1)Q%CE7$tzS2|_YC?xkL&q)N4At=&XL3{6esnkA8+!QCE6NiuuwdO90c*R>g~HX|Ba@3zcJTeaVp{A^|b8$##kA z|4$fl?faRTy?PH#qqy>nDxXTf6pJXQrP*Wh993lp86P9J|fza zh~}~-L)+^a(hvwTWi71))cxq+fAR4;ywGMRek~*!aL|jr4VOCrgCxRe;yFc5>E4R? zYerF~*IUS7{qi?6g|!#V$1xB^ahf1W)=M91{{t-cnZTKvuOe;{OKRSUBb*B79x=Mm zuzRl6p!!1%>6}Fism;6$X`cFFM{lQkg#}M?-e2?xGlkY2_%LEI3TA`{pp-sZ9kF4q zb>oR-;%guhg(__S-=fG|lZ#m*O)dbaOWqGE{!Fj+?yD;pZfUvyx6eBO$wr98@on=< z*1D;HmRbWGAMKPBJN(PN>5TgwSP`_yd3JPgBL71m*$q-LcP)$4&(2sC zg^Z23wW1HjiK;!PTcmAyj*zu8C@;~!bmfPCJqqe|`VWc+?5D@e+pfOkuA^B1`l7@B z30dAK^^ntci2vecvLc#Q1=RNEE|iySg{o}(AB*cnciYldcWO9>?3NI|PRu?JF#BF?)^aIZF&AqAR>)n&`OpSH1zS4h<~ZCftBbf*7Vrz(YjQk6rse+Aa5j^O{HQ-qy{ zq%r{-``;cr-1rk1trR`>-nyO>iSYoe-vnLzs|P*EVX7wpc; zoj1qM$)k1^Z*eUIos91A8k8ZIa$KQX2f{}CB>+gl^Ulv~6FPLT$&Vd8J2#}vR(@@2 z-iEb_WGNNiQ64i#Kt-Qfa}zdl;98pEZUXQI2&+f$1_%vf-H9P!MC`M3SE6kt0UK=< z2AF|0T?AGmpQ$+9dva@Igpn)T<9b@Hg~u8#FOi_PYMNc8ezv9U#mvuEuevGb8DpV&={l|fv|&@;L#*8)J}JC^w)_+O*`N&Eqf7zF%Qej{ZI*ciT~k~ z2h@e^P#K-x$E67k^>;+%%AxBhPJ2STl8v!46h3?A2R63?8^YX7nS$4`X4Hc>c9~&M z>l*1XdU^5~x?<094_`jJ*q2x-+Tjc6Hwwyttyr%^C}6=w_|>*X$$78|9^Qw}7Cd{t ziy5{)u9a3Ue!S75jmSmhC_gI`m>@iYo0=iuUjH>Wu?~g=`fSw;=ZC%?}sLT2nAM6!l(H+6l zc`WGj8L10P3`_?$KB5_Aw4XnJMRO#3k-Y@s=x6~{9GTdlh#)K@X@{Bds1^MUC;d=k z$}1{jE13Ym`6!D%gGzO^ib{duJKW=6NiACwu2F)ODd;^#SEcV-u`u=1)4mLYS7V`E z;`_f4eskWSHaxrgJx@D4QUAh*@3QZP2TAb*vObi~YjAcYw!G(O4$|+*ghmqKq}aWtrbgRl zU?GH6(0w}z~teMWdm!z_#TW8Lpdy7ee7K=15jRSVSP(V{;d|Ak&Dpy1Je z4PxzB3ltHf7;_m-byF$uB&-7obqYm#=OIIcFF5ybROCg_l!jW9eexsr`6rl_J-n>( zt*ncCHLqdgF46#Mq1OuIJ~l-(=)=xG$_&1Es8&@&xL<@dGNFKD!dxGKRlwLfL4X)~ zb0F^Bb2*`{rs!q<2Ps5v|6&i%!hMW4Pfx2w4+*zqW6OwzQ@etp~lS}xdfgPul16;u5%;LKrz85njLpqtl z&DKyW1Ca0m!j`tLouKJ1!U8IK<0hdw1ONTP1qB8gNROFmN2aZkR*FHoi~5NbI!^R1 z5Gs#^#1e(708LK?ww55h5q+}h&F`%pgEvJ!`usj{x($#@%pzAL`3!hC4y%8-uA*_! z98v6nLP84r>ltn<#eUWwgTYZGEr|0vgttw!f-mSQ1S|oMLaWEWBj{)G^uX2CG|in9 z^UsZhg04{!xoB%N;e_=&4C-hxE#Z@{A|p&dYh6V(Ur!R#{$6*omR|CZ)dzK^Okq<) zL&C@+fK%GB2GU!;6}e_W;3U~cMoe1oe3Bjmni|Rw7uUJu^EGG>_&@_gOrM1Jb+|ya zB(KWWWorm|y{+Z9GmzVcGf|jqz>tRo)a2le&l$wNze*r5w$IHvHFTY7udt2fm4qw7 zhD=^5By!)kij6_wI4yu5$Lp7_Ll=dVjf7S_|9`$2y`cHCPdMu&W_g08KA}M)Yx{dG zc}+U!b2nm#QV#xN>Bh>=Sh8e^B%5wNqcm*-*A>k#(Y6qL`QG9_W4Bn}#lQ9F;br%} zTaQ)KoJAKJ)#O)#L&E$b^M#q~Pf|}5WWBQuZrjkD>cfP0|LW{JsDqiqzi8@TY^u#( zNw$J0{ejWsfNdT=-Bu={VJ0cngkDZuH1$s=;rx;@nIoz0h8G?o1K{Nn2619&-3!jP z*Pq~{DA$NW0x87~(#s`Xl=5+iydgUq`}jSkUReIU=(*h9ueUrpTTc79FFIp2`=5&) zwXPBkgI#HmsCSp8^;DE4AN~V7B7X#1Nb7-d9GA%I3wWa+Q+Xcl zlegKR2FYmniwB#lQlNF_jmsr)6^PVf-__IWhOlHN11%)UQx*IYj_1%YPhc-caz-;H zDr)icm0_m!%XCceQ-~!o>MJS|AYTa^-G8eADQ8al_)Nf=zJcI&YnkNK|4HVo;rtmd zDf<9|kOx$JkD>2$B(WLdo0kGg3QlBP+zb@gFl}8nir9m|3R1SGr!x?J_C$(pG?=mV z{g2h&>(#A!-|lknNh3|j#l-)>pIEntTXTjLAqQ2J>4Pj&;TI`z755Pwk`L1HumTu zNg@WB*$RBypL|Z{^_IP_$h?bi5JV=DhAyF9O-V9nUr~|4;Bwh0{+}%QM7(oY($+Fj z(sBeUDr6PnBeB=g@X1qwosS2k4G9M69frN5P^_64T0~m!Lu(90-L)n+Y#dSOdk7DK z5h&-;&TXjc>R$Am>Fhi?GrYtOqj68dp%c=di>l<)z_U3wEwaiis&dfY6ExHM+^J*+ z!ao$DSXbYXJxJ@y>Z>jgT7^H-NsozH+Pvp$Nb;uU|LZnwqHzgOjSnQMP=_`*H%EE* z_sfADH_6b2SXRr?+NEv}g&<-!!iT>uB8BCjz?B8yNKPLv8glSIkkV_ot3#m7DkhK~ z8&y)s3nsIt3t49n>jcaiaX<)D{{DDlfTGYU7-ndZPIxKB6Yl zi#a(~1ON3`tl@i41wHA956cg4-g1A!;d^qg#ReN3F%-S-qB+ApnkVnfVe=0d9Jba_ z5FYZ!$h(j4^{cQ{m$WpQ>h=D5^POW6W|t!~LwiL2{-@$hd_h8Zrn`3HX4{fvi%|ai z4X>IO(Nd?l$&pne9@iLE!bTDPmFK!Jgr&Zs=W z5_{kU!;L2ukgS-*o&zv-(VHDTm=6Mu>pEaUa3}xMSf4yAlQU4$a5L;7w+HJWVlbdE z3}X(7!Uh~5{&Z7q{H|jN8G@&vVwU_!9A$9{36)SoL-g%nBY4ADBEY1uF+GNaw7*nO z$Eqgq=;n;cB7MpeAoNQ;FwZhKv>$8nIoQ&o4USe~sd@ih;eye2Yy2RCNXq@v!9^FZ zUw`Zj69-l_CQz`-Bm$S~9TY>QAt@d-6Hr-c5|Q)?O*kSWZ&*acx`*~3CgvG}-wib! zgMR^+7i#FojCm|>Uxz0DG6{ufsiLIE+gTQdr1#|w(*Cj^Pz{nfb**GYgOX@fl|5`C z$Y>V}hiJ6Dv!=(KSbLaQK*}gK+dN|(aLB!|hNDIn-cY2S#q$hKiNR)4i;r&|FMjy2oqi|HA;{i*uL!lCLvHQ9^mYyu_&`o4sqWAjJ$f{BT;(tm z@Oa>|Vr~p%e6Ln{*8sVB449(A1xn|{ny+o7H20 zC}DC&T{ycR4k45TWxt$>(#dgLLEv}94b+WY4O!inP~5d(7@*jB1ZxbIh>Ig11sAg< zCx!dCU(sY)s)M57M5417mqopi?TkPVE&x7PjcWE7YGPF>W&fAHWqNuUax2O1ba zb2;Ee9msVeW5zGO?PB&hXATt$`0vUT`x|w{nx?;FMxaC&Cui4IJ-qr3}dQ z_rf951&sd+d#-C3`ApIh=nl-9CxC4-rvYQ48%SnPT4qvQ(*XjzFxma%eu$F)q#+kH zGD<3h?&2I6Iyf}Nf37r@^YKNddEuBh3B^0%=29y>pRb&2ftx7mlgG&B)6@4pYY5t| zU*!B1=M$LuIqD%`XJ0{*P=H2TKtd|1Oj6sq2-P{Z2A6#<-2EZ^Mizgrr^m4_x6p>*{Gml~JcBa2#sF3A;D96wY zBR>4%6Y=^6gOeIOztxu6gaIF3VoyiniWrv8BeF6grN%Iw(&mvVHd_5y(HL1`Hd$hI zBNGd(9|Dv_ASkpA26O{qrYY1$11`>#OEdl8H=uI=PSpAc1m52Q0aR~-Krn5xHtKam zuUBVRkrQA-0}lBL&_bBi@~(XcE2zgPHT{-JVj2e{ax0&02QiD73vcpAvg-jt+G-&uPrE2@Ud0B(&U|6HesdIiFRZ>^*I_EfJx&j)PjG1ZA z782xrE`NpDE|pCs6}+?L=Y?1bEf1*p!o4>uo%KH?D!o#%JZxoxZDRu_0JS@C;^b>k zurZl6s=knDLSqh1^~NV{qB^(I5(+Q|Ej1lNI}Re{E6yiGO491uumX=@%m9)YMRYEX0L@+YAXG+9>HHu?cpR>JV>Z@85OT*~vmx-0ZxR>d#4o?92x$l81FDN(c!xt(=AR>8k``{pdL~Xd4*};ho zhyLtU&@T)IOj|~Qu7DLJsWn+&oeZ~w0>1uxyMr-U+?3nW_k+jrD)y#d%($$w7Wr%Z%ti|*Dmcvl| z6Aq3X24K8FN@x7wLklnn@w>NDdzN`Cj?4@W#6nbf%7hJK^(=L9QJyU6ecljTVw;;C z1#bjF3{yAHoQbY4wk$fU92_&hy-y2(Lq#J5us|*~u?G(w1NNY5fb6WvVch1ugC2w- zw4yN$H8lDmrdge9v{l8;kWx0L?H{lYt*3RK#cEt~+-U&y<0Ss~AA{e)S1y`aE!t6$ zwN^cp>=9P3EQwEPs;_6ZV<697LcPB)OFJcUX>a_Hk1(a61UAoS3p_ndCJ*d60(a{@!>@4k_N| zAdLTF+{yAJ-1H!&2Fk@x*O~~Q8jX@!PoH9SmX4{+}2L zbGH^su0t2z!14zERqARA9&Yc(6!G-)kAeDR{m(#zJ(+3d0@0~ zGU3aV`wuGNuk-rTs)WnG8c{V-&HJuarys;5*2&RI$2ge5UG3M2CtyFl>t;-hO??CH zw%d9Wr5lk6t9rB`Gb8Mo4O!Ij?O9!)P1-Okrtgsn!VaCCY+}HXYn$^&0qb_DubD2f z9C|trCdAQ14fZg-zE%~o=Y+L*XOBeI=u|rg2V*z4&XBW_wW*opjE`}yqL7r}0<9ZO zw>tIH3Xe7_y%?yU@f?HD5ir`ZtgpdKDpRq9;nj?Q0;Wn3QBgUThdv$;gnPZQG-|oj zB+ugEfv@@PL`_qf08of(gz;7mpF9qHy*xo$lllgX4nYJ1QcI7!y1%)c(1V52V@ff7 z6bt7RY?I&=#;BtqNgoHXUf%d#A9{Sg4ItvH1s)YeuJ3OK zAq{CViuMq$4X8o6Ju&YQkWdlRwOZ@O4D!$B@@M?FRFlw<^zbuN9@Y(Ig$!VvQ8*JO z4qs7}P~{EQQ+QBs?ENoNQK%sG*W^LM5E zVY%Q$aUO0rfNyDN>DQf-bZ@5=KpS{zdK~-5FIg3w2`U!yI{z)edr8*)&9dB!f*3vU zrL~t8(MhqqOx8i2He#Zx{H20hpB~Ig2ftpI8S5bR>4)TMM`F+=Y{!X9NiDa;5X0mE z-|#QsH8_E@!o|mre}uZm^FbRKYvq=)S8C#{BAUV<$JPlLo{7o($dcMSJRW9I6SRd=XvyAiDj1Rq%%Y;2lr z&q)dCH4I{e2|JWo6*~z2`{~C(?aLd2kVD=yVPc4a5fcz1|_F&v#hwN|US*QYt3zYO z6MhM;&Kxw0pjFEUm@|wD?|N?o|D<^$lET@;aLE|8k?<*JcP&U3P*<_WoZG)&h~(c) z`mrX^2d4*NNXc9lqna41G`6wfn#`OvGK`xKs&%~1eBi-RMl;IBOXWC*C{;JD9a`a1 zIkpT3hVxXLwL@$j)nU5Zw~g`Xt&-e2DFb1+$yKIb-C?dYOLxUIU&A@#Yv^hiea7EP z@@U)8ep0lY9>YCH814xm>fWPv zLXAA32$$2-&yM_aDZTuE&@t%K&@u);ndB|M9FA<@D;^@E&aHh*RV#8bM8#pDR}@bZ za*(lN;M<~a(LhGFYdkmrie_V^@*E|PruAdl?66-hHd z@BFT-nwJqDJTmImnG;6@>(6i_G@n5809GK#FWNLqdTsr*1Ew}DG-mk z0FNx2@zbx3|50c0KUO30f0uE>_SVm!k$PGQwvIJ|RUCmvjD){REVdD<4iwxw)N=&58+8kF6@dvOXnwr%zwF5uFDnE>~oQTcx>{bV~g0()9Es&f#l zxL-jM`F@ik+!SFA9JzQ$U!|F{Tp55)V9`n=K0fm23X|+Of)M-hC|GQFej2m$FGKV-IqKu{f9`Ak;^oAFgQ%kTh2k zdY}VX26Oh->c7;p#7f7%rw7x8X?sF;yTR30;%fL|jCnncvl1}UW7*kP?*qYT0%Z&? zPXL$IML;MHSXarM8ZDIJHgU1;d%~s{Bq2u+Kyyk1Ao$i|0o^B1j%-%!El2K|3V9`G zr`UrJzj776mGg6#IQ}cImJ&B^$nrbe7xSkgL7`=;zB$w{7A+zX4uTuN*y@a8iHHt8 z1Pv*~Ji|)m6og+giJv4s#a1vo$38?Wyo6&a=l+gHL)(EGB2`7OE zY4bJ;|FF+o2%k^as$%e_(IkH64{=`bJpS*K5OfGS35a$JT)5p&$`5VZ@Budwj&mzJ zllwaBoAYBHL6U&qhXP@ScAipjQ9WEn9s-a&hZZd7_*i)QEQf~?`&QC*ke0q;J|8eI zmYvOVdNk#~g%#3cAACBtFNdOg^GQRv2l3I#DO|I6cms=pW>Z3 z_6leVJ8t!Z9Yeehf$yfC^f%zs`H#FpJaADNz%sNu5t2iMVAP<3r;0jtXWH}fsrp_s zsPdmYc`jA{ia$nG+Fn*}P4nt)K?=xMbX|Tl?nM(nJ$#`R!U9FEuB# zRLi!5EQ7(Q$dCdNfR+eG8-UPBd~0`yVeX5aVcn0ZPYK5VO-vFLr-6J-FIxamAY<}P zD6DjKu>=tg6I9^a*{$G4+`)DMD8CC)Y((52Hf$Kpk_&S2QeTk)60q#Bt4Pp%%f-w# zL{A!3CRTqzlhs>xxNFg@3zZ$cpzZ!cDKW(4i@r7GefaQ%L|D*+FX!C)CY%=~-O<%ivcPdSql8h|H-VU0f4jQ@!V0a0@1o^y+$(hGvvy3M8a-q>* zkHv^IE)3{@MO9f<)g|EcX$kXcTf=Ru@UI@Q!+AoIK7LD z0SapL*+tFLuR)dznzjlTHRG91cs@)&zkPn~wUm_lm$whPUhJ#Wpk08P+e-byMob!2 z&l>C(3y_K$l?xkz9)1;M6!98AXrx3rZQrE~_Dc9A z%hG$=*k#Z~hB}^;eYuUQbih`rRqKfz$-MbDXVbl{C5@qlI9=%pybF#wd!R~5TxPUfkl5Z0RRZmHhDvT;G z0Q+)0T0)4^H1~Qa*EJoy5JMrrg*h!Dt9vi~PI9O*-}7pK8Ex@^huJki97L{RDaKwb z;Bv-fgZ}I(YQ9QlJwZUn89OTkBpQ5phXp||UD9kN{~N@gRr525|3hH)cXD6`cLQD) zjJhAvHf31)H$cWzih2P^K;8IYa%95mK|;25tDD!h^0@_#ObCzEkZ(-}JEVT|MCIp( z1PDtjLsx3ZbhZlLu@-`iQOmh9#RS(+^IQA?j>%Z{!2HQUg;1`aeq#UVjUvsoB#Z=` zF#RL)P`CKa>-EI7FZZgQyj5s>X z&}$*9T7?k~u4~NK%Uk|8$bXDjNN|2oLXTc|%gUbBD1}HsgOW^xh-Z)oL1p9oH$uj= z>iFI;+pO^Ix8M>Ac8q3RXnh1&T8N1C)56*(mLVbmQ={!U9A|8U<3S((1UCf$X|(;> z#wN{hy7in$z^EZ}Vs?LcK7*ZnYxppryTD?}C0EiG!q;bDIOF#X3c+e1RC1@TnzenY zs#6LoEcclAV7Z2bv4=<3fjk~EF>+WdST6!KT&0DrefT?BQE#A6xB$`z3iuT%+i#| zs^jxmEbBygZ*ypD??(SG+q9;Q8iM+6JeuDz2XTercc+hoqQVq-uDu1`jGCr~hE?+8 z-e@?4L4OLXDh-L*6 z4b$e`&le{ic2KisZEJw2vAN)m3W`U;`XGxvD89Snl{(Ia(*u z`nk%%4i5Fel>)HCX=-@MT$f7s$z@8)v(3_1UtOn%%Y|h@fvvlec_Gg&Y?4k@vFe~V zeM^0$rkagnP+>e*NEh#(1Qq4fiqw2%AG_L^9ZxmA$hTLL@Jwb5>YXf(^g?9Pga@lRxf*sqXJoimeq6M zWIQOS2uO!IAq);Wv^NNUmeOb3H?rv=Y+4k9Ir=fwaCdzQ$O>sze&$}7$xhB3E(2zQ z7U|I+i)j&J14G+f7QjrylB?)@yynv$<6EPS-Yak5id@AG8Q?iI2s+hZouj3fGP*#B0Q6>m^bSHGB+35;X+7C%Csz^gCUxEO{{y>lqRQlq za#KU9j9q<0N5@{qYuvQru?5-~{Y3KCO;rcNmiduz`9ip$d_^1l;58^KD^6oE0 z2K42IrI~K8w_{1K#TDGI^U{wyQaS{B7(uVqcLf7qaUQ%>^@c=^$nSnrMncjEMab`( zy1PtM=aoDi?b5Bz4`m?pTBmz{nodpb<`uG6$PW2Ne@jBLltCNy5qW_zWFmg@Bv9~o z&^JQ`1mYirFmA*gQ{!|LQ&2Mzj!8HJI&PGzca@`V_tnw#FPJ(SznFJ#@%`gPfOGUa zc7q8juL#DPk;l7G(UVV3Ot%MafGv~-oJc6NDM}`99S_^WhV)gPcF_&mWhtB%nx}vY zC%{^BNz}Te%}2>Rv$bio54_ovwLX;E@ZXXRAy^27 z(2zK72=AC0rckGwF@$x{NCl1AmDlgP8 zYp!%|sL&<-WF-CL58PM$Kfphh+D#j+PIE)%Ln!xXFp4{_@K$&a6o^f-? z)O&^(LaHP{kvlu!@U{-k54?jOGpK8w?M}y!-QC@BP2j3wPld&CPgbvma(U%93RaRx zBGtY-2wnB9z}z=?YTt+RNL>Bp<-rcmo~EAA$M!;glNqPx`MJADNuIxX=(lrRQm}3; z_N#WoF?_DvCLt#USBspq>0U;E99;zC1c-F}aD;oG1+>A7kBiyv+4EF@#ljolKYSJy zf@k3kD3uv?139$|wy}ZWDLAl1XD0B44REm~6($R@R$=7b8Fd=;JfLzkNIQjE0{9f8 zdtsvwB(?%e6)bNgID-}-Ew`|=G?kW2V$(fRt12VYH3KreZ@BE$!R?WNo?m$Obj7&$ z@WXpDpji8q)QEE}CNVTZ@`qYi5{G3SoI%pKVZi}cL9!Y#fCcGMu)^1puvb*!NZ$$&DcwbtJHDsbQq&mxI4S88!+eE<1L8?ab=A z32#^En+Ulv`HtK`egatn&I%4u#9*`vbfF2irs4Q2EHwS~O-Lhd^sQ@D-WR`%6@^IBQWNhZUKB2e=aLR z@4puOg@a7&!Y@8E2Qn1JYA+w{?sXuQvPeFKlza~gFTX?S>FT{eCL29>;Zl~Dq%CH9 z;RMtNVv6;Gm>h4p;tbE8eZcI+6K2|je6bX<70!Vh;_{7#ZD~6u9yt`H{WhI2YncTj zST;V;IL>p}{gaCUYK3-Y0iHS?(Ck%tHY4%%^U*)P_3z3U8tLn8fqRJ%)~A<{%)$-y zKL`>-n;66Ps+11^V<=y%AS}SC9a(|nU6QwG>Oa6)4EjUsh0RYWH5-bCo$b>C{DWeQ z#S(c4buDT^fvW*hPVcurWV&pEv>1{$2NI_d6Z8K0hX-Wg5;<31kj9xWND7<?0L#P3k-Cq4tB$dsxBZrR> zL1f^4=@%I|39!9P!zvW~_dgG#FTU#yMUOS7uEJb+-p}u-fV(9M<2NLYC6P2%OL(z$gQ1;kWh~%VpCRA-HCU`6NF; z!%JuU5&UsDkwm>lCZUVy?dVp5n*WBI8GEh(@jbVhMEv_vf2fdmfO;G$Xx7DMOD=Xzqa8y@++;M z&4q&ACM{aPZBUp?hor(uT!c)wAs~VXDC1;1nNmREhxWdpDlj_;qM4(eGg&!uqmIHW zl~#Hyg&I+)>s6D$Ctg`Y1Dq|PUknGz`V>J!YryKk<^Ag8e_K%2-D$7N>e^uD-kg&T zr+HFoRni(Q&?YuNIrm*)cG8$MB6F&ysp8Yyg6qHpQHw!9Qs!)wkG^WahJU~EhM2s< z7?YMVKenNiUNWh3yw4xkbx?<=m zq8JhbSXOtEWT>F}eJA;+pp(3>jcI>)7cy`*MBOCXe1IM9nGlSUXfqPT(eRNYsZJZG zqN)mS0L;S*r2Vdxkf_-rH%|~XdR)H@Qj8zEwtu5STC5woA5$asX=4M5fh$@V&%^-3 zX19U8GEUXSfa5VQtxjYHrv>Jbiy5$k90ma^1Gk~Uuj{~9krwprQ?crY)O1j_qBkj} z(e}ogEDJ=f^tWd=khBbMod>9LHN3gcFFx)J>;OvM#uF4mQEk9{5jig8b7zWu$<`C# z!yspS9T`p=t3uW+Pip{;K!zlmZlB*J708xB^J}f~0jLgw1i51G7al|=gt@uQAS!?) zXQ%pCM<(Okt^#H+83(l-v^mE3N;tQkup*^RSbg1TM)MN5?~M;e#ka5RW(^Mj{)h6k z9Y0axla%Xv$!C?1XkB>NO=<+agt2kOM4zep;GAz4S23`i$=4JOu%Ya{nu62B2 zW*D!oymv(nu0PDRd{cnDko=SOP162gGI1cCJ{*Kgo|1YIf(z6>dR0m_gxdm_O@u}K z{$NsYFA`Ua2_#6t^+K?W;XMNH2Oy?cMnNHU}UW zZ(W{~M-t55$SeNZ&bJRTyoZMrzwuaeHO#GFHdfc1$27uI6fUqnkj z3}j_rL6Qe5y)Ad~Oq31=>ZH9x^oNcx+gaD-qehcJnh&P-C`K}}5pQK=XHT-&G7l46 z#nS7&YsWNdm}KqC#FfHa2U0OuG${6HqK?L0PcMV5C5ni!Yrqg1un>c^) zNs_qwz_QIWSt698u%K`c9|u@IZY>$U4>(440@_ zd1YT$M_itl(xkSsq5#BM=+Lm+fOdMV#^1$Vt7b-p)BkhHKBLQnsIm{vD0|cJ77dl_ zBpC5tM`MUeDjd*TP{q~#WkK%VcTlNQa-~>zwm4Q5$&@ih0Z3a1A7xz*0uDh@z1j}e zeP0xb>e3|DKDs+k{vWXs@J!Da<<3 zlp(RO;0S4Xn{8^ceP^Ts5HzN+S$}ooq3t&tQ`B1H;Veub0ZyI1`0n(kl3gdDAEcF$ z#NXnzgq(d~wq}jLWD)Pi^6;Vn=ncr0kJ%88evyPyIFM?#+9lTS+ttm=paq0Xcn&-* zz@C{n%ndHi?{b;O&m3;~&(QXc&Nm@-rg0Q&F$)DsCc}FJU}~zRv$`4`T8%whja?^A zPz}w`OWmm1)}O`uqE>}nP5N`}i3Rb;hF5$uuv0c4!&Ds6KmC4auReg42`0qh@=d4d;4oTWh z(ADmxyUIK~RW`wdoOVk9b`4qoer(M8`;HFVwylN@%Jv(t20|(w{wcjIC>M6GT8*zS zLlsj7B^C{4pn%pyZeI_S5Qp0OJ^cF9QGC*lY^;rw4%H{{zXN}uTJ3_8_P|bGYqtsO zu*$I-YuGcPYa;0$g223{hI`F9<+BTB-hT=VH^m;F4F^t)Oh$i)hhbIK-qZ9abf*=F ze}Qd|`^#Rb4F%?fw+#m_5@1HX*3+8a-Shs1=Z>n@e|nk&S{{wuaAtE}QfTh3ee*ZZ z<*Ap}ojv(<$e3j!l3k~#?Ju2Ix|n% zpOm~Vgt$uw9y(ddx!<_#*nq2lZ`zQwt%2L-W9jR@X+jUD`b>-aSJA4DjGC2Mt*2!+ z9IN*2GVgD>59rHU$x)b092KG;L+@%B%PA5J7`a3IdJ2T|Ql2>+X->$RTY>aj^mJ5E zd+`Xyp`7CF=kF}pAYatbnlxUPrGrADqa{Wgqj)$LPHzzIVb)M_bo6vUP|{Om1C9@W z5xu`Cs^;wuRYm|;xZ#YIXu0c7tP6ya#GF#z%vrNA(G-t48>jV~_Gn1Z@-kxeNy4yM z5!!;Nl$4YoaxscyQPWY%9>hPm@{%mgTXZlw`LfCptAVaHzR zCAQIE2U+eES^HuyI6!^kH%7EnU&7^0IaBb$G(iAf;fBr_$MxHZM}s?Ife@=M5y6feD{osqWMGlH`;-ic<-)o=#OX1A#FXV9-d-l3 zp5_eQvgyV!E0g%Ul64Io@2gUqGJL9@JLy+@~3?e7||eDp6C@f`qF+C1!HLMJjI_%=Wgqo4~Uf?bEyu3TUS` z^@MGEkBVvw=;m693LKQWx;k5BwvEGXVrEc{#kf3oe)19oY1T_cZpzAC6I9!FLabhT zam}S%t?hVaSA=|FR+&`Qs5YVI)efwTdArR$aCGm>!Adl_BX`eHu*YDfhkhMvN%Op+ zUJD*Rek{cXr7CY~v{ysIXPZheVmS_V;5mTs=$xP&y8U*i?dHw*Fr27n1QG}|CH&Ox zH|`29{w1byZ2gDozsBLJxV8c}ZzCDJ@vTpygxrmSJ~lEr7#-%C)vIA)`Z4!2%is>Q zf<0#H5NTS^{ z4K>}3HAt#cQ>*ONMRbHL7pC&A$}DHLUj_tne+V#O83T(0#}XL;y`;s*b_h;rGmYy6 zVI4=vQIaaR;VAH&Kk*ZmExz#RYK7yQJ7mX&-cQ@67J%t8K>WlKs9)IZ9}s{N1&ylw zLddLR^g|U9PWRmEFD=Wk*C<#ej{g!)P^%M!(#o3{oo zT#Su9B?*%-nl=s`HT2LmXP%MD;z7VQN6`W;LKA6|3ep$MY(i0|*{WZPK$IyPqGNu; zR2EoV+4uo>lVq6Hr_9v^lOgzy(N1-fAbup}QlSV$YY1{mS_8da`!$3w)L1*y9DC2+ zyG%^mLC=r!H3iSy7Yi50WhzzB(7 zj&|O)i&>&ZNlJbxxe;Uf9LiQ4jY-=3o;w>ET8=jH>n8|HmL_K;F<~=7R-xq8j%6EX zPurMU#n3m%Sh)9U9?w7Qx(Nj(C%O3_{W;=r8Y-y#0`_|6%@-Xxa{Epvt9dyw50oW; z4s-nrU^xd7+VPl87D)4XAT|3iE>py&8)FMCs`eQV2GJXVw z#b^@ajvX6H+o?!CEENMf1_dX6I#!}H-an@OSn^U(Esq-}Krbgk4Na4}aG0NpP3mA; zm@h8o)$djB3m7x3AW4#0ih9&FKIaYSZJIq6f@nRs2=D*xwy#M^is($Z6zq=YK=`v$ zW#8h(hY;`*0k6!lfw;~IxuTVH50vrVw2z9o4?*N75~HWY>~x(xnB^1&tuVeSzTa9`*E9-o z!Uu#vR_wHhp6M<>-KHOM{3qc|RV&B-*SOK!( z4YS<#cQ^>18~s_93t*hVD~tJtWCRKWoT7pi^q>qQxm-I<(cEFFo>z4b*Cj}#F|$^+gWU`PKEN?L>#)gChZLJ|xnF#ag}q=XS?f9s^Hj8D z^?2Z0;}#?7d2#TfqmTvx%A?>kl??#zM0sl%gZ5j>Z^1)Am3R&)3?S1@ldYH%3>Ab>N0cxSV!XY-U;<9 z_R*}795udbj0kJm9h6?1eu#0Zokn+hACAm%e*awZiB3)R>AVhs6D@RaA1=NWXaY?2 zka46!JysM{XS(Hm*kFyp>IT4nrIH9dM4V&`dk|)5@fVjFT6PG2m+;J*Qz; zq3Ms0bo}`I?~l|y%*W&XCXzU{o^){ko9lG$T5tG710+MED|1ba(or)}!Gu_O?h&^G z0*P0g*Li#?on}BN{5tb<7j~aIjOw5n2%>&viAfSzFEL_uwBX+;sfT|fl~(- znmke?4;x3X?|5}bZPI9^fFf(Fs1>zkZ$~U2Xa#?uBlhQ z7Az8}AUSuR`ffdN4752!5dU}}@kVG)ot!iZ_rnJe1_=!#yI+pX)k;MrkKBOtV@hLD z>x{qbOgpV2Z=o8h&u9dHC_bv+t!I>)eBT$_!vnbaICm}pB4}8T6G?k-Nc8yD!aBFx_sEQdFx3(b{s}GksWxCjB(P=gWQUVwylXU$2Lsg=BtpJ;u@ptO zzewHLcOf0kKA!QgJ_Mx9CZ89Q4m3hBHsZ*_JfF!GWDx*z99VZf7PXZ>wN4zZjQ4=i z&a6@x23TQukzIP{kO(YfVhhqf<1Oj5~jR0VrdfMbvZ5_)BOe2eMXUR zixc#W>h`h>xQAuL87;B|b;9RIj4m%gjPJKst zgcSUjP1B4x%=TIM#yte8(@J7IT#`xiWFcS!dGQ#we#^VwE!8f?a02~K@`2o29~T3c z)@dYLBF+pCfHYb>61-vY!qk{DwZ^bYcey}QjM72rE`xUZQbM|J>Ai~1J$BD4E8`Fg zNx%mjB6vsG(c(D55TJ>{>`m577a6qvBQ-vH5vfF4Tk@13r6ZhKRy>2yNpx`kH*KBM z-v{y1JU{FugXNm`;@!EocEQUhbZ+|lPTb;nye}^JhnayZOGYv!vK$yDaWGPes7^t+;$^cr6%CJ3 zt|2aX387pA8%0A(P{z}Qvv#|$cG^omL<~TI1|DOL5sxX0V>tO=#e`IDJ_cB(q2H!4 zwOU6^-~a<94+y!8j|UJFfW;rU{n9m$Jh5;EY2}H_yN7>yy!m_bX-T4WujWaV!9kPu z^6+TlqUlC;wK?#O9nUnA+s)4E}xJk&?wptopL7}ghZPAK#((8UA# zhW(7~_cmieUz>3r!@mHmFmdu`$43j^{*6$WPA6xtN0|H`R)Glp^H0w4-HmuR(o^VJ z_H8;W;aMZA#KpzOlfs4UTi&$pWjrictWVqUcLEl;>e)8x;`tje4F|KSgfnN(h};r` zoAt-LBPYc6GuUD(JJxf02#js}`i%<{SkWZO=fjVg|5-zAH-AZRQ8ZBFRWbTJ(9Dlk z%zY7wWF4yN$T+9m$g6Dp%+I~T6mw`!sPe(&l3GKU`@{_ofHO$0XxJN2ZB~n#gixa_ ztOI05XXte!o4$2c&y$_!f7NDdMl@u;h`_^#4a3~d%Jv&^&fWHetIvkm@WY{<7#R`Q0jTn zLqXQ8)|<#*uz2x+2^;#s!hxhPK;Ora6efEc)Q$IF?bw3HFxDN;h8L5QS0P^NjQ3jb zy0`uOvGc>5U}EZ}h1eU-0{r^}DtZMzA)y+sM#N>H={}Fky)oBm!8g>UahKhmJ*qafcTbQn zBMKqcphP_D0JB{|@RT?e&~9)RL4envHO?5v5%?fN9laOx6u zGq?OD6;u6n$IAwVzu)CHKXf{Y8DQVQ*sUcc8KJ}{f+|M&a9-^rj9k$=X3ei3$@&?v z0@}_3LuG5b=!#CnmzI|YN8<72H?&@)de-$}ocD`o&n`BB^+&Ix)ikkrZzfC`ZjO-9 zh!xZ-1ZS`6*axxnML5Lpx;vYUWyDrNa|r%sx`+8L+2St4Rhh&0WSYa!d@-$U7gQ%F z>h1!)7T|?A5MXne7qw1i8oRbzD|8mcvM^1zIoQjZl$4ZFB*OBtMZYiTrO$q=O2j~7 zQ~wSLcnQxLD`SILi|=vyalQ5Is-K51WR>%Muc{LKHLddTfENp?b@t@F%Uy|-#Pk*i zjf@Qq6;iH_WJNfm79pc2*?g}(8PVsf@oXI&N-D2LZN^j+ znuC(3dEA8HBJ1E!t+JUnb1_f&7*uecX5I7a;s1{yYzDXdw;P18d+gY;jH33ql^(iC zR!`*iHH%;ggqj2Y{Fk@?hqX5W%Q~)IMrcN;k=;-sX0hB#B1@4(NS3rB zLKtIg#ce5+ERjYeTb77Hizq}{vlK~4WlM|qbN%iZ^9(cp|NFij&v866jCB8g-|w}Y z=Xsr1f!UX;@wu`c^TLHMBiD2~mzj@SYXXS1Et>=tjAu#4!`vKLa1a@f@c-n7wv6wh za6_+NLaRN>2@6R>%pgKiS3j9q5-J%?lUt1?idZfr?1LPp@mCO(ee`R}?il3_9fQ*6 z2C_WqmyJo%!T%7f%37Foe@w?{=RF_7y82P|>PFpo67f0W`F}R0&AwSq`|#7WS!HFD ze&NlC`!mS;+>{$Z2CYjPS32Q?p5Yymf1R!r9!xw%LAAx_hU%gGm}>ZqcMn0^c75WU zzCWg~(oibN4ri1ka!QT+(Cq6A(&buR4`7clOo!&%Etg3mR=g{GtixKF7XqTE?Q!`t zN#>|GTN(HdIny$rk#nU&;I6TM`}|#w)SJA~)GTSQ&4%gdIA!PA@jHd$6G-pmKF!GY z(hA9XhmJ)=Sm6F((x~Zp7Ll`SD<);usn5G8n?tpLe@1pSmELX2M;YPHa8*0EYTGtI zpS#=8yH;ffu@s_7$A&H2(^Tt7UETMv03ZL}XAUd}KC;RRd%U$~dtNHJW&#J|*;~RA z5GzOq&j!=GazlnJTbgxB{;Ap{ahW<2KNlIv`7?>>DK^h`8(P8O7t63!=WlLj3jZCh zeah|SwqNPbA5ZH#sjxQk8N?d*OKnu!@Co@}xRboUd~(?wD)5}OBU~;@Gu6oD(6@Po zTaC3>LfiuG-@iY6kHfs2)tU$SGxXK@Gj1k0>Z$h0Pyw!gj7Ng}Z%8&AF4g3WG1Y-Tfm(CC6Y2Rp7qR4FV+e(!cW2q)8UpF2lfB`aOx&>VGuo+dY=mQ4Kw;YI7 z561@+6=sL6*fbj&;5>2SB}mkQ!Id{znb2r!QGSxZ_ZNKLLCV*8Q=2 zx1!<%0&@WZ(|&e}Bn9jK@6Z0YWsjo8bW@{PA$g0S>`;-iU5PZRAw!3fIDhXlv8rz! zm=1k4=r7YNjAb^%cNyx~nx%}P0a*0BiG5q#W80wcZfiISya2)BdjAO7Bbxz!bE7lR zyf*1r0dhkz15zDpm7ub!+3Wb<(qU zV&RN#no#;DX5=iyGU?u{-*r7qgEgl;T4-CSf9F|uTvKLD9el`_GW{*>Aq%R{LbEzB z8|K?ZFD^!wi>jG7m*S*|51a*}1iPaxDHck{&HG1-weGn)JruKL(Aej!DfF`5B`cP< zFhkhisR8Vk{^A3HzPDVQrl|D3z#!xC%bUky1`n&BjH9>vD|M~hc`bct#-WeU8?%8i(quKo% zQ?Q)bMtVY%C!oi_6fEPk=`epb%FN58o);&-m?I>*L!A##eLoFUBmyQ?!G{!&5tY7p z`K=jeyUKnyMIix3$%bcDI-nMb<6Tmb*ob9PtxVn8i}W#3*VdC=v#XN|zhCoB@w(MD zU7|<4KLOl#PQcX?QB{gk0_>zAq^e$1qJF*B!^fI#&7#(QuP}g7xt*8&BHQG_haq2> zU5RrrQlI#G*WTDYL|SoKdJ6=ufxP>eMT~rPbV}Anx#nt)_q(%?)?HB!Ijq&Pc^$ST zRaK(BZvC&rWE8YQLe1zKyJTQx>n6s<#NGLn@uE}Tsw2)+HXblOl6V?E`1`#0G1DI8 zUT3B=-Sf}TNvUaRYqQtiTiI`0+?*Eoe*$9_38Jx+hu&MjloP zICEY)$YF?$DNoPZ_o}7>EW1xkToiDGcbdnAB;` zg1Cz~2s6sbf1@76+CTu(R*M`Tw6(SjQ&6+#EC^{u`GmC>bPQGkFYLx)Pw~`rYU)E+ z6Ml&EM;dnwuxR0Nqi!v8a&W2MesPyV9H5y^cwYq-dd%~{fyq-OoyTCtdeQM5X5nziTQ$y1Qr>h4zFS<{Ys*j3x~ION;U%xO-`pbR}Ro8So=R|?T40{MDIHk$*rIYY0Av(V(vzHorAAg1=!A3Sj2=tJAvl?Qr9dsky! zMKS)M`O#ZuQ&Uz^ev1xV7VEv(7g9R;ar-|39`u8c^)SX2cOy%pWw(K2JjA22%oJH? zcvF}G_O-3TvuLZxxdwE9v6`g>p|W~TPL=R<2=K&$SEf6NNG%^P?!8t1Sy{TE%n(BM zd7pjNXP?Qz)#L+F&x6Mtp?cQu?{mz5x|A{EvW{WtA7{^=Z4uIRH$y}%wt@66WznJyo(>2n2E-Ll20k{(>;HaI5Gk1 zml}O2A2UZ+=a7<9RmrJWu57DPvmRU`f+~Ho{|ERc$eHolfAWR=?;)+@nb>Xor|*JSjOA3R|9fptvesJ4QY6rRY~_Xp|4^x z;=7LG9sZqINIf)nx=&f$3_YY?ZmksGf@8_ z>)EfX$a-AUtOs=8h9$Oa$Ci3H)ymqsnVL99eV3T`3UcEFIv%|*kSi+c7Fov;xKPF> zC`$r}+pGPoO+;^6zrEwKA?M`(d$ClSer1tOrGH_a6Mr-K7Y1hJ+b+^v^L8cMvES>-< zGADNK+4%n3JUowOB-!1p+HQ9E;72jJ({>YB&FgGfSbwF0T^ITMW}fWw3kJq>?Pc;K zLgKwF1c6QQXi?s7Rn54YKVybPO#!b@OiKAcT@)`&C8MqXVpF+ftyXN4EURYaI4L{o zl;=NWNb^OfPHyFh0`|T67Xp5%l=@j(ss!@O76XJTgvnFS!7S~ zK9E(k$n(>62b`N>*_UHhdr>oFuECZR5@*Il zNui3}o<=_;#pzI1gy<|T%Y0wsZZl}mYFvJpnQxa-zv2mtcU;_wuF$0|OK*L4q67>G zNxMS)+CqJTK9#7W?}9L+>uPIOg61nWy16PL#Iy8eNmxZEWN!m+YYvO zRKi|4GcKsxItwy3dX{o9uUymhe^3J58`+*p=D|E#D9~DE08F~MTAWiw08Sc@wG1}J zLPWK~QH)y9>;I+g+f3PmO{BdnPzswpnSO&JPqTn|@Dl>H2->XqbF^*R)fTDSlHV80 zkEa#KbQ?eeIXxpD4T9s_3|NTOeiT|qo*cXpXJ!xO#3B&@Z5+j5Sv&38{vtPh5}t4M zeU2YH);%nK?GmwCN!i%lv1!Pxk=G|5G#r(8>1cKmT*LwXq?^CV^d~JF%@X&vJ)=(@ zif4VC46hCEk6pG7cEsuU4H0$t?okN{5$aQQQeej^= zRo_JVCCZW6-bWd%Fshf7qni+NG51pLi*MR^r`L~t-D~!n)Q~i8Ie~X9Z)!YmYMd?U z;*Jmb331lnUz9S|gvypjdUyRj_+HK`fI*<6Adml!y0%tOSKmRe*zv)Br`*`9d#b2v z*g$s)pk0e#J_-;{cs-MPppL<}Uh9&b7Ul>`z=o?HTbD;|U?~TC*o}o?fJg6U!&C+$*`VMSvRc8H8;Un2d=`@t+vP+K?z};ycx?`6 zX>>1FFc@2oCE)<)YP0r-gNdHu9`Eb&vtHhRLWqd6 zF$(k0n+yCx_(Gdx5w;BSMzP$KZM%}lvhrtGwA}2w%jKV7H#-SmDSIft(l-F4ceSE_)GKyoCKO7P?e?O#J{wvn3EwE zVelN+(aDECX`ftW@N1`tDC^P=tdKmYjyqFJv zU(ByBM+Yl7_^n}>0+Rjc(HjaC{?X83wOT9F?>7WE(CqceFCNtmc`YNHZ~c$W@^{&1 z#umzzO-4>uAMfYa_=diIRO6pa8f{x};B@tohOIvD-fpd`vD1^Z4%a<(ivOVp{2|K7O|l}V(7{n|2c^9Rb-`qG;w$>Yi6E1ZxUFh808`!o zIyy+Au6eU@#e%_`^wrKKqa+}!vVH{;gBtlU+Jp)Te{Rp-_Ir#bxu2X8bk-$WS@eat zpmTnM)lU{)nQa#G=UvyK@jag|^YcR@4n!qeZ_M%+4-hD>Q}FzX9rE|756a4qlWY6>j4C=ijIxjk zcU3*27|T+y@I2>PW9=a!(Jx_z1QFfyAmRq#>F~pc#gU&vL_mR=EVPW>RAuId4I5x? z4*WjEyi#7GL%6GHaEyKTYHP>!Z`0w}WdLooFNPSr)+I`B7s2O|F~NruxzkZ^ zIs^Ub`=g*(-kceE>a?tSMe<%aqCn`ee z@FT4Q9JdVfD0op7o&@x`JiUJW^ZRZYtB@pnbd>eI4V{9t%a0&QzLKne@8{n~+flS? z%>$~d^hSu20Q<%g6>ji>*q-A3QabmwjlmeiWk>9gyQn20)f;@r-nQg2430c``rPQL*-@u#~+Gn zNu7`-WcU@1$cV19Ky}W`eIbd8?p9?~QT*sog^5b;?l(r`xY>}KXniDmC1^-pv^cwL zqQuUPV*#hBI5*=Mab!~|cf;H?zvLMfVk4JzQuX>36NI?E5sAIF2bj{|NmZ5A{6XTM z$k=hiSdgp#;9ItAY~AX3cJ2sleaQjqZ&vMpH#j?*DGe%6cjE_h*SX`CftdTny`^m@ za#(?SXaG!$AMdN*Y6Nx&rsFO?WN?S+)JZ3w1coe*-!!@DESdsWp0O+p{DF{awfc4iD+X-UxMI_*fL zDAG=`JqW@;JE$`Df;(PHg68M4lQrD5-+#d^ACnH7l&w@=F)sg2b0u{UYQhB3I zP@D~?Cpo`w7n74i6 z2-Y$h2v?2O%W7qlt~4&Vc8q3|F6?K`jCe3jHXMupvNPN$Z+Ix>7|!hM($&ZUSrXdP zBLmJ2=&)|J=NPx^lS!4Bu-G=Pbhx9b=^s7y984X1vza~(A*ug^ zkqr)OlkQ)V2Y?c1K$|5u;JiQsty0X2Bly8EOWq<(yJ%t&czeCLGOQH@H4_OlA8uZB z`SxwZ&fg2}COmvpwqw)cKxBw|Alc9{Vk7z{XTaP)a3-M%R7f!|R;todUVH_ zzaW2ozdn89#};GFuT(U1UXLd9GuM-xZ#3p7OvXL$egy`rNJg z27}@V7{B$FKQ-Af!_38YE&0cI^w_b#V67+7&e~OT>CzzerK?x3W~Fph)$oTmzFug= z+!#*#*c9s3gpOf+PE;+Q_%i5st@Kw1elzG^quZ~4lU_dd&CXa^DQ5Evm*nfOzxMg8 zeZfzFN09l#74Hp2r2~>H^a4zTsp}nIW*1`(ig{JyU$o_M&7N*Y!*yeMu=H1P|u=(a%S{eKAV5 zQ9c(*9xRVEUChJe7q6RGy!edI){8sD$pUxDg-s4_aW8NyVxZxB=Qo9BSA42hUBCmq zB7XcDjm9}%*~vTS)ZINGmAeEN#wmtX%H6l&Xgx`$aXM@Jpq()>KG!!EC6})9PbW5o zArhNaa2o~XS?ibL{ezNLW)_5#7Tf@DG_xrk$5RkxxsH8R@Djx|_)POUiyP*pST%T8 z9AtJ^TKMGPu3qttr$5ABYIlxqR@CC`pta+$?enb*0^VHB@%YW$wS#|rvz*f@U64q# z@sbC(-P5#mW8}KgbKbKHwtKWmk#!=F#CZ69;-ILO^qba0+qp5PoY=V#A2lrGOh!KP=rFxlNCua7&eY z+>>d_Jhy0d-xW(A)C`6rT~Ahl+LJTJPOIkyYf73T%@5nn4qkC{M0nohYlPVi@Na_YCsc3*Fe zCyrK+_@OskdF5+Oz)-hr;=h;nK`nb^3Eq26>+PLNrdRTI#;Vku%Z$=&fro`{cq48V z7A?OWz?o66_X(=3N~KK3Z*F(DOwo~H5QmOzA+R(FTvp^D2kxJ()0~(p@{US9>j4QF ztn531_(EwToW;k#e79(B4Nz1@p;Kq)jv#!e-Yz+RTXOi=c^~!+uqCoJGhsf~P$=3{ zCXQC~9kW7&brd=mN!^ymkvJ>LIKfa^14N3Rc+jVM~cOD8tR?vB)H`Er+ zh9TLDPvtL4>N%zJ2B-zug(0K?6J)z2iwM5UP6cZhr|264t}Ox>G7TQe3@4e*^ZXC# z=Z>~sm3VH}jqrm`-@Xp-uN!bUXnM{Ug&2Q|7ruD&JpZ$1+lMmTKz-Q~3ZiJP)4sf- z^?!&b3P1y+XT!X`iz1>o^v|B0eQ^vFM3=fXFKz7hYVXOvzofR%3=t9MJmVsKh)2pe zp&}^Y)sLePn0U|0WaBGULVb!WFm|+korC8~B_JC#e!ynrTL3qGxHq>R8=3rp78fbU(4l^i9O{ zON$rE?YEjirj?2CVDAU(mhO$^FvBN6zc>thS#8sdJ)3Ua{6t}IYp!1hoP`fWv;@J* z4tf>E$tD!#2rYnlenfP!5Ism)FV3p#T9pprK3v5 z#8uf?pWVTM><&J&h-hH+!5J6QP{*I+`PpqjU_c01{-I>Z%BL`P{Rt%^qXURLEyC{T*NydW*SRy}VoWy)ohu(&CTtIlM9g)Z zClAK;uQtDViAiw;qoSwMoe{wM9P`KC~DJe*L z!9*l}y?-1y;ANlrBLf=$`w|~7Ju`+Hgt*W#xWgn7b%`x%j>vjAcrM&RwlOB=c(%Eo z+efv>>U}{zJ@EBmgKw5&{ITatS=4x_tlQGRXUl7oJ4+Wyy!*u063g;bNmnGhpI*qI zEbmWZs;zj@V`*~>+XZS|;-aulV}E3Mf$S1yLthx*)uD-8!j!pXg-Z{{N?O{sZJVG@ z81>Yj6052a0>ETcucP9>AbR8AmG#l{XzTJ8_WtUyRPO@~il`9=6dgHsY<58kGa~D* zOha5Px{4ODW>5B~Y7G~mg+z>F@`KFwQP#~!zde;zi*(vSZZ{V14nH_I`_+-bVs0qr zP9<-$GRN$@Hhy--wjSpKu;&^e+c{R>5LHQ;_x9Pbg(VwfZk2NyCO@cKx=fc58;Gzi zCR4fuIJ#1a9nXCmbki(#%AKsY(^*XP2rJj1k|Vsw>s2kL-fN$b<2l|-HzcK{tgE+e zToLJ?jZk zFY?rXyh++xt*o*M#h465I>Q7lJve}|5Ik>o(2!qzS$&i7$71Qrx&g!8eN=k0h+(01 z{rgnv9v?>;1dS4LExS-1CX9ioulhAF@2J8S+ zpwc}(X(}lXFv;1^sAX2}=c*+sG%Pe)TEYKE53+%&wm0x?-UcB!)!wBrvloU6!ckkL zx0Le;N-z6fn65FcW^SX+C+n7~tbPS6Vsk@91qKLQ#BL_k@*EWJrAKa)Pauz4KQgPJ zWA;&~NSo@}2Uk90kb(Qgix;GfzKGWJxZEI+_ z68O(pH~Eoq!tuo(4-1QG1)S@zRxdtYa=&dZtzJ5uoxljG>V#%WRdxe$gatI#ML9-J z4mG%B+D+dM^C*s>d)Wbt5}~|4S}R%wt)k+ikBijlxwlv`KR3TABheyTyAFsXXJsuf zzz_iuW_Q$a9fB7$XI5(vtZF$5Lu6QL(4f|%^^@#xz!tS#aweQs8| zYxT9JL0gezuS-s-S$oj}$M&By9vf^^QeU;AF;Dx_;xo?sWZAFwK@4MGt>-y22%h^!`*Hn4YziHs2=W1>vL!Cqd&l%6m9j2=7`J7b$6e5 z1Uikir05ti`Ib_(+#+1%zDYJdqIwVyU|fER?>j93H~n3r7yyL*XrBv z<wWndDM5*|An`)WQV%Jo16QU$ zLPLK6I#Xr=+Vv5O2~FbIp&4x_Oq{6kyjS#{$^yTG|3xBB-MwRD@!p%OqUy{fA0NBs z&6}GvOyXqJS)4W2XzTz^2JA)BeNl5yJ310zP_8n=oD--VzQY~$aZpt&AL+2v@RMEa z=7&?hYkl?QeuT)$z{+e+b*s~IGqjSsPaKPPH=}`KZ!Qil12E-M$URK6hEOnw--Dse zJ-{ZEB8tCC71f^K%VE)LPhuiiJzzCKY6kScPUBXdz*uO_+O@2aZ1d)L1)Vn0H_p#@ z@j$yLGj_{Fr&10%b30_iwXM`{U>iZpARt)L9<(ZIMR!6Ia|@nv^GnW*Dp3roa12cJ ztWofbQN2|+p0G0=$8hG*Fvim<$(#~}U(Y|oC$UP~UP}0U*0t^@9s${O&mi`a^{jW3 zjYD$Yo?`(bZgYBy-IGEG!$@VHva7Hufr&KweK~}zlaWyuObk=b9;YjmmYm+gY1~^? z4TOQ8ERr5ep6xJf&t)o?tox-uAr#H|wV{9iS+i#OOkA_9>*mIWAw4KfrgPPS#r+CW5Fj6vfMI4f!|gSoq{>n*bf7Urzh zyXjZNj_zS={H>fZA!)SfFPj{bql*7fs`K4pHF#?u>zQfUM0^FY=|Hy`eqq+r$^Yy zTnZ{LmH;P;ei^-cuUjo2v;?~j4b^X{gzcX;2Q6FpnC*;=`EKu6?@apfmp=%yDqgO# z(KOYhoise}Vz;(?rRw>HI$5;nReh@{qImE-`;df+~k zb1s>;4fe@!qv0dd6Ek!0tVw5KBkgL-=%eC4{CHmqB=jUiL84$4;0K3_K{AFwxE5eZ z)_gH3MYVPb%|-+wz=pHh9DhAV%xz4wgFHO1JBQ`4Hs=cKmkE0!f$rbt(YobN0=7(V zvTs4PFOp|ugspFj0#X(Pi-8BQ2RcI#h0>9Z{kw$CL5cN!u;orhs5F-uS;o3Xe9Qse zr^e*R?ay{Q^8b}*z+K?oT?3IhpJ7N;0bcXh=P(6`F^8Bd$mSct5C(xL6IElTW%eYeue**W~~ zH>#yrKJ~t|c+%ugcEv_b7Ugg_e8&_7=lS&Eg~~*vbi1`!i8Tc19#I$+=Azn-(Hy93 z^dYD;oV&4Fce*R6T-bz%i*Lm8i(s_~^ufoX^h#<01m;xMb3*1Jo`FJCm1nsVQGpv7 z%32-b-_p_1Q4F=`K-1?Ai+!_(nZTB6nUd0{6;#~U&`n`iv_0_&-_C_44q{p@E@z&J z%>yP-gID@=0dMU5a>Y+e+!Dk< zNroPTEZ{;Wzb-ZMEZ#QZULY--I4P{@RO%fvQFg+z5bF^F(V=Q};{HsFE_7Sr1DMy9 z;$v0xn(E|ZtOPdZceA{LmsB(Atb&39?G|7&`;_jlg4j0oG;!|Hg0rm#Tzfm&r4oNY zJd(^XkYbX1AdvOz{pSO(y?*_AnTKn8RMWXQ2`kBs5UeD(^%!p5A{^1d2OQ5|J~c3T z-nWoVQsF4se&fa_PgfP#@XAq=VLw!}Q+`GUqe{5Qb;|#yb{-R&;rsUwCZve?!1_~x z!gtF(#evnzh;O3|s!2}`LhFG8)l2H+#Fso?i(Ua_NNsTq@)fN9TRbSBJv zoM#hXg|jfEI+|oF9wC1Nf|sz#(X1yy!V&Bi*HFQyo*vHbr-2oIe$~-G2X1IENBH=w zV|l@QZ}CJh3vqf34OXM-0*wBKD5Gd_ zKWn9?<7HCTd&X@s1hyBC<6EAo{lyls$IfC~osbEgh7T_MrsrKsW|;WF+QyIj|E}?? zoA(3|1;0Dzdp~TVt~*q@=Rs+UmGJPXw{108JFc+gjQCR0J(Zs7Q9?(l^8FU#6nc=q zD#-0_TfG~sv}u}EL)A;aK`k*r6w$t-rMQDL!LYe=W7+7w;))w?yC#SGmWXfAcrPQ> z!jm6xN9Fa5?$R9TgvEQ+uE3>seA70S4qTheu!^aB*6%W}CUZ)E05os@dC_wKD2v0v zw_JLRYf7ch^a^iWoT`6Fx9b?zB>KiN-@Ng6Z?x@IH-2)P?2&Iy`GCoarJ4P#CqF2Q zlw^DbNeW=1W!dd(k7pg3o~@zf*mDx;ee70E7<* zk|;5m-6Z73)P_qZLPNZP6^+C#WT_0rSY)5@C1OXWPon(63hQEG_Jf20z!c@0rxlF8 zfTMEUa#nBYl>bHswCyVDjrecc_j|2D>KVP2eIIVXWEc!^IQI-s1l7+i>J81o9ztXo zd9M@&jY?&tq3&VDw-(XaO8twIM)2&H*K8Zd?==c0nV=p)zE#1>_@9CJuXba@`4(C$ z(eW+W=;0F0V5rEfFe>xNh(Eig742)-?Xs8Ag~RpS1+J$V6jq1ouJl2dSix!TGu*hh zbkP14h4%R1i3H@$>6T`jSwx9lo5_=-p`l~XE*zdct4ZnqdrF|uyCN0Iy_K=<1GmT% zD9ic4yrZ*wjb^jg=L%%)ZWQ^ZtBOJLY7~wTAHyro=xo4gt$(KDOk$i_X^x zOEpx-I91e%!b%IluI#=0#MhD~r^Ly%XZzPFZ%YP1Bu{|BmQY%idQ`1}*QgcX5MC3X zm@{L9X918GnMXyUrZauBL`lqw^a1XT{AygtD4Y#upBaohH2$wqCNShX-+ioWQu@MUyAQgNLahW&4|WXMI)5m?Wo; zgUBdzam2w_p!3+a305UUB5_*&b$s`-pQ1-Cc`z#@WY$v?u>=HgptnLmb_`@Udw(9O z{T3AYH%*)N80Tk{)y)OL_5ib@P#IEy;N@r{o;V8>_NIN{SyUB>=0E@svrR`Y+^M=AKK$kQy0vs1lg}Rq*5K9cX3SyONUt?wAk>3Nx0Gv7Di(cPXR*%x zn5tGYXyuXpwv1f-OW9wdLLtkvU`FCQ^?4oDwK|xQXgy9p@eU2X*P1yld9DTm1$eq2wIV>LD;J$$_ zC9y}!{=D+J1Z$Trsop`(wMVSowzSQWz99Y=gAQ&;YJUjm`}T{umM$SVom~swb_MYA z0`s$+gHe|0luFx~pLKtkF`o1!0^N7->)lne&4(+r7Qd$S*s>SaPcyAbmU!D&GBBbG zl-5rAiuoV3+MhuJvf>J_oKE@1Yy0XWmrPj8byJMRKB>628m!gc*0?2$Eo9-S@ z3MT#HGc6vTmCWq~k~90Vk!r~ad>6&M`R2{ZX#1Hcd&Y``T+;vL-#%~T-XQ~6l0Ms` zLp|RT3GlLDjVAieDpX= zmqk61Dns_`l7I9YtBA(Fe!|(cd9R1WEN8yykGi3R+fOZ!V~^8h}<<2`xa&KZrkDf;nSM8k@mGC0%}q^mD_#)1s?c z#jp&#Wk~$k8>dsmDOPzlz%c?Ej6KiW+96Zx;;LCRq#muMo-Zo2@gO@72cT6p~91xA5lv%~dP9vs1zStGvm~&4>w_)Lk=deBgk<^#$VWH&pR;B|B^r z;hk*M^H?#C=O(tC?ELh-eCw8^!qkR=Khpc?J5Qc`PQ)|-CR$c)H4L$SM%xNYY?*J8 zMaEhOrH`fut8V2HX9)PYG=&W5u@FI|S6PcG1R)x*`wxUh(}zamU})zXYGceRg2hR| zO(u;}S#m;wM0a7*Xx{}+0}`mzhCMB1w6Dmk%JNdNkrcM?`FQa33u|czxQE*t7vDXHzPgfO;0xuGMk&{DJ z4)r@;bqCdrkg5%PeV86$xSOek2>BPUnlH3O$WLBu0ukjWK3JkTOpxsr+C$NxE7HM;(WSD& z`(Z%Vc17mJWf?_~T~FE`HP9xd{g*Xs{(0#Au}~RVF(5{4)p~;e2-=lwnrnpAorgl9 z$L`4>Kij@YYy}pnrPs1WMr@YXqidLSX^#U5NOL+rkU5=I+Pw`bs~86ISUr;*x05O_ zA)#+_+^Kuo4{hRjiA4ZA`MDNIkC@_d;JbQI(5-{LKi8Y96uc;4J`Zqc!I`+U`1T}~ z@+?HS)Ub`A8SHwUya3f1VLJKe|3CyrE21T<-{%k?=$I`O8y?9$7UUj2jJTtRIV@(( zOp6s!^2#KJvg5CO66228=t~+lds?1`&0IF`xi%RZQwbJW7|2rZLrSnfJSk22zmF8*`j=!1jxh&EIWw(dQp#spm zVzVHmnX26gF1ld#(n}Z0h$UDO6BFwTqiW8>zew^<1(D!sw9ZQl#q6(TMm76KirLjV zi*MQ__8?!^DXeThpiiGZ_8Bcvfv>X+%)iQ#h3rGypV8nGjJ%I!1TD86IB@gImAGgx zI`j47U-S*bJmU7l2`C^Jj7tW-ABd{vgXJM|qQ~nSs02hKMS-xSqmwWe*Q*w zrMH;VR(q^0IZDdTNnazXz>64}DOceW&&ya@cBHd@6yESM-*Ei(nYL0CWZ}GEsvZPn zbGMEWN!yFyhWa?f?pYm`l?`#1E*3Ggb{YFVfe1tziHgId=~0k=5CRk!Z+GrXHf@!i zncWp(ha9F#3DsrJ4)lZp{smflv>%GHw>`>ooM$b7#J#A>y&2($MzJWGT8=TSy0OWS zN5|NQW5K~oz_DO(Cc1^O7A9-@iKETT{4@30_QzboCb}f)xtFd%t2Hfnug!CIVNzHe zxHIkCNC-=P?L((8#$WdS-y)lPZqlf-y+R|2Kv_ig7TFFfnc1-rt!GD-7*5Mzi||W2 z=Qe@ib>8q~b%?V{XFDn-esryNhA^KGrJ42L0K+#vrgWkwbS3YLt+5xHT#<-oeTx zpRp*<7Je*Yv z@u>ioog`+k{iNC|AFCOt_vHnx-@Eph=Z-pd_nj8t9|wQagz`hLfrOZd%v#pY3Zd2H zee5)HdLjoGo7#lE=v?Pbpjt{zbs{)$^4t zPk%k`Z{zRXBKPRuzvZarf{V`&P?7o)QSuLEhY*`RJJXN@eG6uEJ;r-qjD23#GzGVu z{nD0$Cf>*5TxdVzZWYSdM~`+!4&~#Eao&ZWzYz5+Pw)s69_(Q1;Fuz{tk?=MDYso& zxQyCrjbygc*tf6VB3f7}IO{6^YZTU7|G%;_zlp6BRl^R@bTNFwFlbqSgu!iNOZMVD z+(L{Kx zdybu^^SbAn(AK?rwzfIk>CD&9W*B^b|9G1%71zu}fxhO{=%d|x{4ry2^2~Z};q`TN zzOvo@=iZTPM=aQ6vvAv?zFnQ2*N67^a89*s(f`5A;;lFO26VQ#q@TAgvCz#jMSZ2-m9c^C9jh*_S%1%rZo5%f#JfdU zx44Bgce_}p9AWu}C-xbIvwgqY%T5Ab%5W!@FQ17z#4&iDE?pFmmW`9DK{cKQLdrDi zLBvMuEcovNF}nJNgRu8s5U=0j6=Bedn|S4jd3SQRLW^8Eup3M~wgZ6d>e%kg`5+T( z4Q5SkGV7>L*vKK_tsn7{zTTZ$?**np_JRo6{*0m#RQ_CCiW6YhwaICwl>$340gq*5 zTEi+}#pYrK?zZ^Y&mI^QE;BFi&oovLFS`OuN)+M5lr;uI?csB-uVx5ntG+YV;&Pj% z;gd158AmZSiuAeP3KFj@6vVv`97($LqGB!~WQ>^J#5b8`Ax9e$QGRrZH}d`ATKuoC z>Z>oHF-!3tQe!oG@xmnSN!XU3JsuPm$hJ85txIZp!1qxr>xQvM^)<+wd`SN-9kY569@uTX!`RGiO_|Gr8w~iZ zOoP{A=*zg*E-4TI`iST z>a#^=7f@!Hcs$s#dGn7NPm*X3OR$r3Oz%X>i*9UpV%A<*NU;zLA3X83$(IY8@xi|Q z%*H7&AEOh5%rYdy5Yvc|vgcvDR<)}wgeZMfZY`CSOs?bUIl@V=8q+D{t+a-!xF6|N zsDr(F59B9@t>@QTU<%2YSb%bK-@W6%{l8VG*SBZFBD*UqWr-e)c!Vo2oWFho5O-Qb z-|@*o;gmpfY~mbHOK>*NJAb9-`(!PGrJx9^>_sr&S zQ0U@yCnJsk%U5>HB=P??BExLd;Wiz-BW?`nwdld*PSHo7r)M_Ttv!kBI5Ts3m**@f zkxEkD4Uu3`+YL#_;~(|yk9ttFs1VWE@U1MIcG$DY`pD@W(~4Db+sS$w#l!F%Gz^ia z`>dB(Ojuk$)SxLE1=OC=$?d#EkRWqFWy~wsI|X~K=~@DEPOy1XT8)`wl; z01AO0JpX?JH=TnvaJ##FW#A6+$uH13oeC-bB&FY=Yk(Keyyv$K8Z@||2tFtu#{1aR<9PZIhps@JR9 z_8K86@s2~=30b--wKwnn>!7?4WFte|MOX2i44QtU9q zUDk29-d@y!ki`gRsP3gPY~fWL{?Nwd6=ybh+I43^Dn0L*%d5n~ zfi!%AC{DHjk_vC_*u>*|CSw?jVFV|5fBOZ@(MO$dohPPDdSC8IZud%XZqE6r*MHWJ zu>SB?S=#{-p{hj!=%~D}vafD8t6-q}SDMW(T%J?X!uQXw7XQM@mE}t$&QE-8GMEt| zgP=7|9($FslZd~j)v)1o*fj**C7pwfE~>w@k`aV1!TS`^vt3m%GHwhX>L9hds%LH7 z+%R701>0V_${CVtD>b3Cak9&JfAibMep_)k46b0Yp4Wm7-PTE`GPi5kLnY;Qe{k=i zZv0ApZcV1w)k2x07GQqHAqpnI8S)%s|1XK&&Uwi+67 zK_~+JK(UYXbB+n$9UD9M^o?oX5i_Ne%nS8fn*Wu*5WXZws8ccRy(E)NrLW_Aq_Guk zO7O3adw50tL(FcORyv`Ro{`Z;%@pDfZGLP6hJ?OK$&p-fbQZbGwg5gB#Z)$M=WJ+X zzMVzp|FYf2%wKyK50$>W@gjO|aWrFP^44^GfpYn&DZ~k&HrWm}a0-5ND{qdIawEx= z-h~f7Z`-XV+MJSutn8vS6HoB%jd_8Z+Q&Dt#%Z&&`Ej=oVyOS$GG@l+!+p06ifdkk zvQRxJqkBNa$fGa!+#VKb-@T-;SN)NzQ>QUz@#cE^@y;c)IBP?94R4-vC%YD7v$`HB z>XyNwt1L~OU%w)q&i*Mnq{jI3>$kD(%kA~6=#+Jt#wNF)UK-^efJNN|b~yIA$#4H~ zs)zsnJbJXoFNeQ=a)Zg)Dpt*YL0O@GAcn#0R4 zRA)`IzFJn(?4PjG?bA}k*LGqm(>nQwH1mcg4j>rg4G0uCMghjUU)~!+~T~3mJz1M~>)NWB!dNYo$%f ztRq7;8rBh)m%^t#s;ewkAUNif&K?wxtr}r#+`PLLar@IglQ?05srz#C%AV%gTs_>A zZv#UweLj4X520=VBi3{gTYejBv#asJO(Ab(@*SjFIe> z*z)nOCG(ZuK=1Y~WWmF^&6Xzjb)+|#hiGg~rm=)-_HRXav|9*0?o4%sp5#=``W00* zPSJ&VvW1Q&gkHH13BojUSx4%;UDoA8y1C0@GTjf`bgE^&1Qi7hwpZ^Tjh|l)*5(^i z|8sURtKKySW7t45`wiH5sb6dlOayV1TT=aYlb&vL$f?hBQd`cx*|6hyNZsj|;?G3o z65BcGUcED(%{(TRlNS?hxwNKNfHtU{WRV;GO)dNvs-8__7@Z(+Ai1X>K|rV+>SA56 zO;`-cY`oGmlU`?XUm$%=;6YYKXN`0PdQZyWPkdSF*c6cn94br6DbvrR$_fIMlSJ(; z2Lq5PSI5GQ?F0y37^xYX-&AGLj&Ltcl(wyUj_K1-B`I~(SHt83ghVALbbVhr$7L5r zZ5rXHP|+-U4!GL2Q~m!bo1@qXv>C*2J%cF5gk0x0&vRCpxqz{3>^`f-Y&+efO2_FC zymA;$_@N`F9vjl-rt1Q;f|dRcnW#Tt`KN*I@X+W#{y58I<=}L{vFq1|=hn&+dmeCg z1m{aWOR zbDK=+RoHZ5GX1!QTQxx_A749hf}-|P+P@{C3nH6EBe|e@3)T#KABvX0zjCgE%d=U) zZcIvMe%~=|{7&CDeLci{qq)jq%=7nWhE_sytp8HS`sF!x<#gS6)(1RqCgx3YY`kjs z-V9tw+ke;fs%aG^!R~&4U|Oy0`wpYf$SzL1K|Ta%B^s(M_Vm@?!laE7NI!a|HW?gJ zil>4r-Cx}lypnos*4cT+!e z^Ig{ZYEmox(8MWI4p=6(;zn&aPncTu=^JJ2*G!FkEv~uBDhMLJ)9g3T)lItq+kFsl zq?k-Fhd>h>7NJp;;qM5K6Fu-oe8A_{_WAA5|t| zmA7g(Y@(q6{g+lvr#xXj!j)-Wo7fU}usK^PDXmz^hf1A8NLY3=s@QWL`*qiMnYxij zu0$<&TrR6p``bFznlyRxYJF_m8U$q3|JRF?vH8qFY10nZo^wT$T}KtzfH1n=Z1$T_ z|30INDs>Y&~ITGAHuFtR7@jySX48pDTGQD< z@x|aoy`L5w=AQuEIfJU+-_~3DdE4Q&rQ%|#T{sT=)U%1E<7|kG`~XacL|7LrNxFZ} zuJLxAkd!c5iNA%AzbY;_T}9>C#?S(Pi^5;+o78opJn}9IT=7MGLSK)4GhaMX?>6*# z|DclY{kahN1r)WF1eWHJv-4)%PNi@1#E((QFxB$5aEW-4bnDv>p&|O7y-C}*$7!Eb zd1tRS(7C5QD={rAZbzi}U$;lwdK6p~38*X-;BPICKp0VlL79pCFce2dRu!yyD`E`E zxlwK1GcKuKYuml2wJ^>E7Z-tCp!g;Ry9ZMAaAItnvcBfTB#w7nk=CjPRHleA`TzHR}Ah)uL0PLDg zqn>uLNriN6g?r9ysZZYG1L=Bn?Hw5zIUto48_(V7@i542NrKxzs8A0=qv58W)2emr zE6lM@3U)thIQ-bm1Hv-fwj5m+*q~e=*;eqPXAxs z%GbBWVyny_zDUtc$~3AJO%HMe{StDa~*MCsQiD%;o(QU+k(t6v71 zbH-s(nsb2nC3k;i$8?RkMxeP#7#YaJ1 z$Gk3pUcUELSN{hS0_H~NdW9CjrVHcvJRr8D7cji&uGxFu?nq*?wfvN33?4s%$GI%4 z9NjYGs&5F{dcG9%0}p@#*?_E(u_I-dlPrqH;Ez9Lt?Y&1zVkfADFiRjZ=z)SKQgxL zNZH+{Wus?A{fRsUEn=@z0N=eq<@)U9(%*dvN~7#Kn2XaeJ3VAaeIM^uTe!R$ZC>rF zQ-h*x0=VL-_~r$p5T5I^CG#e_0Xy&eYi5d-IFIHL9sLmGK0s`uOd-!H0h3@)kU-#R z6QQ+o zs3N5n8;%l6a%gSUCSUD@=R_1dX@-IK9wZ0vL>54bnUE3VoyK;%=}|;bb+!6N)qrm1 z&srq#5R6xUz|H2OcqGTy9Xz9b-Sh9j~hGoB=UyF0_^j9qr97SP-9yC&^x= z_V23!@o`J+Dz3vaQ%}jhtxwb0gO}E8tUvXMEdla z3s>R^H8O#v6G!sn8odx_Xxxrck#)b2Aqs}DXie5&hrLZk;+P33{VH~V+gZb~hpVkE zS9(6vO{e}_e$pvNxam1z5=Ta^{ zDEojhiOD?R^xu5R@UXN4*^mD>wYG`!?xrKBJTYz661?wqw9UKYZJ^UU;r_+|8!24UDF6zu*X{6jiD_ zBTMLbhhU+^9oc1_u^HZzX&Wnos9?*M_O2gbLIbo6+uaNIZVQj1--Gz{;NE8hCjI;O zJrdVBZ8YRti-YgVzL@wT{m;c8Fb&HtkOlUr69G$39TcMyL?3=#pBl@6yey*AQwz@_ z?lDjk=z&LyTXpRlvLl2`*XIfQUejgMh@6cX8NDCr<`HzBAO)7k%gYf5BKZ!YaqbV`J_<^5lZnS z$MMbPMNKrJL3x!RVAiu!?U|FiAno>ZitY#Pu2dU`=e1%Yq;6V#AyDw1L#}s2{r#hI z^6~;?|4*X;9Y25(@hM6d%TQbXV}%oACrq6xJFUH{_TH@Q z7{S61=}DVVztaMI_m#R@O5vxHl*+hs`H^skfSQ1Ouq68!JJ-OL${UzA zY=j}SGg%rG9LVW_FCXkS>*603thcm;fOwuf)a9HynKR58qnf4acvX@ zft(oL+QA9QCke-WFa4T4piOa;oy~p#2HioXkaf(xdi6@aasQI{gyR|KZJt(Yu;J&W zgMO3u*Oj?ZH(daP0dKB00HtW7u2H#ST=RwFSUCJ9U~W0uU;Z8hCUQV4!*NOXIbDUB(?xGGA<3{K>NvT`~BmS;sSL@bT_4xET*8G@dO*U0^ifUVg|an`_R1_a&v^Xm$f5>MU+;Ln%S3$j1k((i;3ya z-`*0RAHmcEcPHIg{$l2_kFqN_j})BwB{}8jlUZ;jNAQC3x^rUQDZiC$g%{^mnUR!n zE)pcWD2>B%J;dCQEO3#117W~^jJ-jm)NcE%+eQyp{lgj6U~Xhjhq7>e+aSQ+oWQsZ zXHhSLo}Y_z8h!3h@+l~D=MvM}TRp`5k_zk!lbf4hh@DTz53%s0;bF=^Xbu57q>xzG z(P_AogASOOz8a_l7;(mDRTt1cNZrl*^|HM9S8Mg-e{$2$x@i%52YQe%i$R9Uh%j4f6B_-ECLqpwTz=0@VyrnLL_cK{wA@X8$u5PkQ3 z`33Bth3Nm>yf8Htsfv0IQe$B4w1(d3@2E^|oODHdv8ePoFYj(hTimsR4vKh}ng0WK zZ|6RGv>!=^x>}E1a{f5W)=aDW!HNV8obLCs;IMsU^wenDAzJIPr`y*&L$~V*EnWL< z*~{F=#>t0LQV`nxHn)lMZBA|~E>V7mZsB%+!1eB*1AkCgYZ~G|&2D*md-s25R-Vbq zGP;KGnTt-1CX8-a?tf8GaRI3eY={HW5qJtJj^)usDfV+i4W|;4Wwa+f_kd-Eb_;Qeaw3gJDTscCxCrHhA~PB)C(Pd|M0XppgP=SDs1EZ)I3fXP0~?7KC=PVz9M z!-kGdeqvmkLx;3&4r>xeWLtP^D-1sc6+la)5w(@w{EJc@$_z$%L7=`jD?9Vt`_iy- zQ1&NViMT}ymvUk_A^?P=vbbu;mMwqE(Uqs5kNd!s*FBn7HA0(1jkbfPh6-nYas`#{ z8MqXM0|0=e8R-H%AZ(ad-0z%V@kImlmMHZP(A(ILY;PKT&@!T2$d((OG+7_iTJwJP>VNnR657;9w5x_%g14t*8O~3{6iReMTnw9Qt3Ki)Y~`d zUf6X$;xffrniY-Z=uG09t?xeTpgb-Ycw|ke?Y{910~|V0fpDXQn5&@>bBaVduK5`V zm2!nzWwZ`cj~8wK7o4;F+NViLAu13y?CzJCzD`jQiCRJ)_@vBKJNlY_&@Hc#%!CtT4Cpk~(Fu46P z=)9&MkGlCr^V;PjnT6wfsA`OY3*tqbkMn26WnswM$(_yqAI9DUF6Vsx|G%@3NepHb zDU=}$DN90Sn3N@weXYSHM5*j8c4kuCA=_=4B1`t&NSRO=X(3A}LM2NmOG*Fd^|@o5 z-t(->(E)mYG!FN~ZQb}oK~)jaEru;5!h;;yPS`Cd zG*YF2J8{Ek_@s$7({Bnc!VQx#6jlHvWvZnF>uoyuvdc)`5@A`K3W3P=yS4fu?e+;D7%_W*1y$zrMRs%W zm@%8Bf^o6;ouHEkj%yJ9pJgUU9_Z5^7nx`Nw)X?s(5-dI-{nzKWtWnN^`i3X4D}9~ z|2A(~LN;X_XTnkDQ-p^zgup>$Xx&?hWWV-vUQhlA5`p0;qeAmu^ziTksi@97Dl>?E z(3xI*!pKP(_qrJK4S(^=Tu%#-uOTmpCt5Ba&MBpM1GXq1F~Lou{c>sbgH#E@qzkO! zQWVVd`JX^RmcRXzjN9i_jm4jAAn|qt_l$Z_8I2hz=jBuj$6s~w4as~=V#y`4=hkZ* zfF0virO-o}j?(CRy(O2=*IW`WmhlaYBd%v=?nA3yf*k1v1K zZKt5+LEDVW-X^SXJ9e?Sd`QFj`#{82N=N)87M~UL`aPx3=ZdkGLaOv8-)2Z;w8tjiUzc|nj&~C(RWwI37;rtV9}Q5 zRiM0`T2uLVhff!zQ{gN}sORLW6t-(j#s5XoG5O+wG@tw~rattGxJtZpMcH0N#Ze>^ z5U0ua<^pIBv4^+^=lO99F7|YBWbkPEz)a)2PF^B|MbN{J>g*TE4Dp zs$ubaA3#G8ESmC9mt^f95g!|PxyIlC3}V`bIj2YS?(9163g_F>Z^xr8%8o} zgU9=ouPytvxjMQFOa{TH_nt1EC}8S$yIKCxUJrmsXF{tyOz06NH^8J1(e9>Sxr*v(a7=2xnZ8F81$Nf2yMyAFk_j-nyby6L`>d2I8_p zy=M3#vy0Ic)9YLMKe=(ByX?PRu1~wEe6XKinpHGf5s-w(P?F{ql-8*ud5JB(^&LFd z%R`bl3!ei_eQB*H2W$uX6vPq(;?p_9THQBv*~kIK%?XINE!W#}*leuCisP!B;% zbP27seW5TxAkP)yge$Kr#Fc_h+4xq@J~)!-LU6-=v1E_Sv;kwr?2~rG{j<;_XS58e z526eFK6@-*5@qoZ2MPSxZ5W=(&H(RwtPLaGwebH``E0sM>nl>1%0-cwY37~jMS2CD$YBBp$Eu_$j z>2A^u^ee_@Uh(PBzX#EaS<4>F-!E>x(wl*uoLvVRAM_fMzK(??Bx6rKT>lK&l zJ_P4m!99h2JcxSD1Se`~8x9}#9hsogyUDB2j^8iW*ZV2>=AAp9=|L%#`pvVL>_meTqGu_SWAw{KKyI5G*QB74j)cva%% zQW5>McF|R8qV2o1EKus2Xv%NkfQeJ59{c^6r*bzp*2t?3K0u?EX-Qr7XJNBvs}gyt4w3qK^cB<+%jfQcVBIKBZdQpIR-6S zOIt5&d_gQ`-gUCNS4osD&~sC_dz6tcehr+<2eh?bEFBxZX3b;lqtw%4?=TJ98XwXz zYXYSL+#dH^0P?gsw7-2iulS28qB7X7dxXhn*O!SV%E!xCB!Aomya+A+CM#vE?IcfR_UvfO-+#ZJzxr%W)3||X3vl0vgJ1qkRjTqF9XGD` zwgDeg(zLg>7L`=4fBvKCJVbpM_$8y3T`GO<4!}ELC{@Vk#fu3brYP=;gqKErh^*u& zhF;#wx_+u${%?5s6olWs9{KWZb|@gR7=_|O2m=$YKd(Xf%ZG8c!+Ic7Z7RE5vME}~ z8pc2=;>k)r^+iBWc8da#*UDq@?PWoxvFFC_z=*ux(;tfV<>N(hO^AnpS^o4}*E^nm zQ3GuCvD9aXgGE8G&ULpfSqFXK!u%MMnaq2HG&Z5#?5mf8i(U&+8&C3`Bc`1ACH2ge zFj%eGR)Pn#pL=5D)MHT7l^LW=&YT-gUAta(7YNJwx*yja8udiNUIy?HxkNKXm0Z4s zQnqZ5C7Jc&D$6xODA!$6!S#2kG)#9ggFjwr?7cT7vutbBT}g6f;EOiItE*eggq2P+YclwlD*DJO(Sy@|nvRQ5K@9SbzlQy^< zpbE|v=^i}qx3esy=k{H@luThP|~nrL)mIH+Vtgw zY{QqRL61TzPK?fB#TSaaI{%do9DzY)6+)z!Ws`_e)?uIyD(zS6$5%RGIA?53j4W!& z%rmni+i7s=`3qy8$#0+g#M}{XGxPm{VEXAhLOS;8i!3A51dZQfkX^#a6i72TmLLyd zC%u)K%ir!cuMGT)c8|FR7PW_ND#Jb(-}$o<=axt z7zo~+Jec5g#L28ap-a8^%4(hFQ)oxo##A8OFMf!2-Lz@H&rw$D@R~AzX{`vjnz=78R6dsYjEpU2Japq9>z=jks65q? zWE*`p>B~RUmGy|>GGMkJeK8@Yc7pffzyS7A{SfIFK?2ACS0h4gtWWJ2+hIe)v=6;| z_g)e>{lrM>S(A`gfyaFQy0heIcCtSP;E%=A^5D%UZh?fxg>C(uD*sWh&0wSo(W!B6 zW0{^I$*WU)ufN=yuviR7d$>Cl&2Y#&=?012SiK=30wOuBvzQW7G+2b`MPZ&F&(Fzu z7C08jsklIeltYpAWB2BDMbh}czyQhG zZZ1qZXPVoxZIkw%fES}OUnC(>gj(rb;4(X^Wyu3ppX%-uuyg#euD*Zws=TlLnC*gx z)BLlk7H#>@M?}OmbrpjOHH`n|>v4kElqStMZ8`S@1nN;Ax72_X^2=C)?D(i{&-%@VxNr1cEN+&i%uL)?-ZhlMrrt=e zdE!y+iQqp<7&18*--q2%Q8_y@mM1**bJ%+BnHNQSj6jSw}NN&se2345Wt<8OP#*C=Mz+dRQr+5M90y8YC$;yx;xgX-)m^~t&7&I(X+i(w;HXBS;K(t zBdYg{@*NsqYi;Tp&n-2~f2wqU;lYJXlP$)tw+gw??M&hEMdj7`~0;&U4`bZB$L zGd5qD(W7g`1=`=k6H=NG6=jShe9#^ET@9*SxpLL6SNgv{^}6%z%_CUcMnQd#Y$5WS zr!4%YPRLv9wg;Il0<>*EclyQs`@gpD&|!U2oEuJUt4tq0dQ`u)!Ki7|rWNK!gkpBs zorQpLUWK)0A^X;z3Lde!Em|RK{+;hwA)^*U8`O2_lgul1{y3)_9&9*l*f90kSNg82 znm2FWAMc#67c}GAg)8!-0}a?!k_8y15<^?p+t3Yl7dGvfp&@bUpoZHk2%l(6pXvuf zh3ZVCW0+#fk=2NOW>X}F*_T-7^zQ7Beb+}q?Y`o>*c&AyMd^IN`Gc)^%&?l)I$fw1 zZSukR(m}<5&EzK>5ENM&V=qB2VK+5=Ukn0en|rVvo;M^*ebsCOgY{S0&ING51!2fMyvI# z^b1Nun;O6InNv1R_Evzns>Gf~PFU|&5K^>(rMvmDR++i z8jjb6To-ycacP1snXc#vlcn{R#QP4mpCca)%VhG=cv)@yA!D4C1(}O{g@}Oecd)OY zJedssnPz6PST+oJaR#k*R#YcFLmWQpc_{O%kJ##Gr!*-?cfNcO)^8V`z!;qHOxHX-hNf zX8lcE^EYUb4T6z>F)68o=1(p(qm5VV1F9@d$W}+*zCAL&X+#>c$)cau z?rEJ2o=*)dku9ew6j4~3D>4BUdor}9thnS`C8+U(HzkUs*x0km^nh|7C8`09F~8Zj zFSK;-7wZ82VVtwqdOiNX!)i$O6YuE+51H|i3-I?M3J%fK(H}3vvXs|TNIu5Y9B(`h^87TnQaFT9g^|& z=cmT;k%!U@Jj~LJdmG_$c=IUcuX~}d*>gy@4!MUK>Lv8F5x0p_dS1Nf(X!SpqtjBj7+1yTWJA)0p=?00#U~&NLI(Yb&ES50 z-LtAaeDHvki*WxDanTz+E87noZ+&&RRyL(73-li@$6=fnlND_I{`OE38GO1mC z(F0#=c2M1|&ow7ph%-k;2O+=Qy^DmT0g5V%7oKKU%6p9A!uWeD;Ko}n9>^qUa>j?m z1VX5%b&a^@qAMpnyX`DroI7_;!ENH3TCEZ)!o|y%+mEz3Dc`B07Ygm}XIYiY+ZbHP zzt&qVR}HXj0#x~H%(c12X=aR`DKSy9^5j?gv(XF9W4oojt_=Sf9w1KB=z9??BBf(~ z^tIEn2v1YwDO=ozqQ&=dEyuQOmN->8H}BYS$f8Aylt5Y`@t&8k(4-0D6N{U}o(>zd zoCCja)dRC${l-O6!e}SF6ncWN@DMCDzplbhL|lw?A_q>New3aSg||wGIYFUwj}*vT zd)t;J)K=+RQ?h_)$ns6!CtvV&k(O%n$=cp9?3 zYoQ7AW)~)w6_S?vx@f_eUu0bCpr%#O4bO4_HF6xlI0X%#?%TF(v18IDhlGCTrGtuH zPGvhL2s)0xcKzz^jbY^|CDYvdE#oKzIHOT)7hb$@p)KnZ`rCMmuu>c1a&PLv!nm;H z46asHdB7>#4ZA9=Sw9g+Qw1$xLM$}ZLH+x?T0dMWW0SpmlYAFDe@Zo|VJaGu_V%s~ zUzB}%i5IZW^kyJetC?`c{zB zNi6-zHlk*gv-q<@0uz~1$c&ByK<@6V-+CcjgsLXkv;$1LmB zyHy&^9`RomZNx8rB@Wew`FKyz84>LhQFY}4wPK#2SX(!8w8o$6>h0UY#X5srUhr(l zi{YLbN(KHe~u$=`^w z(p#~usGLBf5neX z&y3OS05`X-d36o9ZrlhPpB6$c4?dB2%dSh(cjh+%O+>}bVdeb!6&U;|BD!BZ9J}+= zlz6T`MRYH}X|{0-#o{`d3;jy7NHQhMI;L{t+xtBpD4GidD%Y#P;;Zq3{8Xo?WZHy~ z_^y*DZ~0zyUf0e;&8ODKoecP_bB`ZI!%1gA0@nx7+1K74aY~pGzV^f61<8P2vvLhu zPm?pm;KSr^QM}-rP{b5JKP2MNW|ZVBJ`W2IkHUh6uA!$i8I%!yn{A5`au42l$WgTA zK0^d((Ym!F?B})c^;DM`etwh%<^!RmC|+5?&B@>_L{ow_`lZ4=Rlf5VkB5Jl)%>_3 z>7*OQpCCY3@y#m%zex{vQ3?U&h=RI_7>6wDiZCR$p%|~ZUX{D{qtnLbp$TJ^+gY^$ zOd51abQ`w2g!H0RAPhn@ZxlYs*QmvPUu&6JsNF*J+XHw2G57sE7X4>kccGu}rUc`_ zk#t1y11qV1gA8W$V%8WQ{^2>B27TdXEx{t>vCto-|Hj2o+z3y-E^0e^*2C`!jdh%? z5~&*?|`WHz=CA+>K-Sl_&P6Ns#>X61L-(uwQI${$9yuJ`6#H>}`q9`(O*sm-v1 zJplg=&o@z-w_<_^M{r<-v*CeJ_RAM?677sLt7EdT> zS7k*ORx@+oN5ty`D9(Y}n0w!28?+XIBg zYaC!&tD08g{A<_FV$CH!a1JAgi4sz?A0bAy$$pZ2b_G$oTBL1G;>=WHXZ$-QKLMqAMW`6haV>Xv$n0aPzX*t@x0bLO84WH95l2X(s3mvR$DXv zK)}pU_NGo-iNlIgd8sV!Qhkqr?$krHJ}*|STdy9eHpRD!o@@)AIB^2EyteRvw`8I` zt}N?9v|pFx*jq@XGVJBvEZ$=%{99z1wZYdAmNx^i4C3Mq9Ym`;3ClO_LV!U6sJ zZ;>?kRWi<}H26^VVjf%wlLZj51Nx6LN>@a@2a(~Pv!*2nG?3j5v>DfTnRQT+2{eq8 z_)Jwq&&toXf|n_HWuETXjY+Kv3a(B#k>Dw6FEy>XOF_)cY2{ix?8>K2{GX08VJvLMd>*d{iox!G-bC%(z-bkBJ@4 zm`xx)`N^v=Po%v-dS0UQCdx_Y4L4ym#Ud|Qi&=cEWkuwjr8BCGO@Uv1#XVgMW9C?> zRQlfw^7zXiKY0AT@EiUtm401V%!~~&MYp*hWm~%Q$9|ilrA-q%CRvpAFU=nVTdA$4 zipu1caF5*nt~B1=U2BB21l`*_RKe2FXPRO?K5^i{fw_c<4jQ+AKImk8J;#=pZ7bJs znfcFoy5siCD9V_9s6r4Y4_559`*_tQ+Y6CRl*-ziDwzM_O<>s!uRH5DZ{BzN_U$vJ zrzt78mrP-e=SE*hN=g?xuwpt7Ra7>I8_s!hfCaMiQ_{Rf9Qtj!;PCR`QW>a?v(5=3 zWn;n)X}3>Q)>!=2nzv~~+_0I4dz>S6$NXSxhMQ>yaXO<|UA2C=%0=k3qFb0A`~FgFF5012hq-IEaXTKGAC5cI*+hG_d%PSNjGGrr!Q&sh6CxxSEH|4ffS|_s{Dp3!wTr2bXxSmzi zGd$mO*qU?2_qq~A@H9$t=zY}l(mk)WNp@8fZjGz?1aA1BY{!UCkvJsCA`Js5A#=&{ zi)QBiWpq-4Yp&X`VNTquX0^XzF8TCs%n0eHxyeN|50BY&8Nl}e{u9#ak^WDkPYsnp z4NVuWLj&fvT(ZeCW4L_!Cm#MF#+kBSloz=`OaS@mvYxj{bzvBACC5@TuU{N)(fpR_ z*bT|YF8+?i58DLp6yv&|9`d=%WP(k1CJUFo%h#N&-W($%< z&0MxCBq|!H@x#&!Zkxq5=a0csap2IQzy>|dnlRxr%&Pv=!NVxK+*zPktAMo`VQG-1NgN=a$kWbyZI57vQY zJ&SoWx|B7_RG|xq5jIWVASb5~r!Fsg$c}I^60>tIZ|XXyV7Z%)s^=7_MAnbij#c!) zvs6M^K*$5le7aYO&+16}U{SbPJZZp{Jl|gG@{}gs%m0I!do_%z0Wz=s<#YaSbHm4cV(`9GmWph)us9&8>}YFN-i9A5ycaF9h9=E z)_E)7DFDLd>CV*+IhHt52t|~rg-7=J_f0VL2^PKO3FKX_^7ga=zd@R$TV=pkw0~4j zi**A{Yo`d|i?v3E_n;?^qD9Dj2bvbYDVNHoz%ViA6}V6z<`%N_4;sS7sA~JBq}2G` z?dNZ5KAYNUICTz4HO^mq@A|(PMb0ECJJAryK0^`ofRS7f*`9@KOl=q;=G@fqoJM_h z71wrb&?C@ocrbJPTEQY_wVojzmUoDWWEDlmXk~g1hFBR z+cc_M-SJk(xCwj%zl{wFZ5!}@rmQ20QKRTgij}v>*2%R3;~1TK`d&Ypt*g)pqAr9r z+r4X7FBYyzwC>F-s0_EWm%;-3KUyf$mA4sh9ej0R|K_Hb4njnU!s+I&uhYe+nPXOJ zyOYncmFSwffku}<<(A1u_ywhwL2Z3$X-bSGhZ~W5IX^sV|oX zdgG3>`Qdi+^e>NrA-Qu11)DDfBVoFo7yMoP)9Hb(oekm=*HBagHGT9={9+_hS=4_1 zCrVTHtB&2B-CHOY9}po{yeEvm1EBV@8VKQ!?HELt^)4~1DCI|vNY)=2y@M^3lYeEUE`0+_TK`Hv(l%9#>>IFJl}(RyHxuWo|qdNy@;C= zna(Qi9-4rBMRyh6Mjv6FvGnCKy_8)(YsxD>Svr3Go@Msy#YOq@-|%cgRlu%yc7`&#n+j50uMCqBqg|pPmk66KwO*mt+ z=T^i5-p^&l`^t716TIc0__4m0FB{62+FO+UBkS<8_o-9%6N|33mrY<}RhErJ-+Qz}#UhAR~vq!uHiA;5V?9-n~09T3`)d0U&i&wLdUtV?z&1AIy7PHV8~oDaNs3azFkT2`TqS}P?gsvnVEqThppis zn}lCF=VhWY*o~CrQBT6wMVd>(-vh(~L|0U_z|zdR@8#p;Pid!dTZm=z;i+3%nGYZ5 z?!H?LmIU4WqbPpP|BX=T+*3*=fF&m3}zmck2RMF@%-0ojoDI_7y2F zLA(T9l4?qbaOg2BVG3%TX>EhKPWLIib*n&NmzfWx!wBMw3+>d8eb#P)M}?$_)Sv}F zS)vD&$Ip754r4FX+YnLJ6>Lb<0i=|ZEu=~B-@e#xIqxu@5ADaE*G)6fuh6Merv(|k zRQ8K0k76K%YX?Y|^P9#suY&-uxFUVESxR&$FOJ4TpTg2x1wc> z7C`zdS?hVQpmiFX!7u=L{UZ87#UoDWEQP`;*iL&u(ZbMt_qJ{0*@`MHHJ)<^(h05R zf+&DdiNFKZFJHZ?TJ?^##_3^BPR&harI#E_sw{Z);KAGnvzdWYMcN!4Uskl85M&~i z&85%=9iOeZ^dxp)Q)wH)j*U zwEju}HHs2j;H&I{hcEeD)HkF|6nRtTLR&-;5m65j6{LAumJ`CP z2utjA5ml33+#i{I-@?Fa7vd2V$b2+F#g3wk#w*v>T2Owj^17Zqdv@m49W=dx{-yM1 zhP7RI`?4@E)gzab;#GvgKo+Y^9rehpRjaFF)VaB<8o^u3BBB2aZ&qng8T@T?C4T-)rGp@ zDx0LP64(~N)z#8L^xM)E5|aj_>QmMuC!b{^bdH&>pew(X2r4jtA>IvW{f$}>MTk0b z#IN8bqXIyaj&J??^}ABFO45_q=!$;i!MT$s_3nMC*-1~6l`tddVh%s=d&9@ahb3G_ z-$Gab{iqSphTfJjDrYvBL_pYJu&J9_p;7yzQ#0kf8W<-rTMG*1)U^{ZH)lGV8Vx$E zO)~%cv#P(h=QwbPMk>c1-39_`)jVPQZ3#$Ld3r4$5_()X>WL#lnn9u~BX(iqYvxsi z%OF+|q7@>$xT1=e7a4zl`d>$&-AW%QqAftBu^z-jMevGy%TY|ce|DMNMd)`snC%Lz z-F?~}K&a3zFPDDEw*Amud`HC8R`E@Sm~AfkY34ML(Hkd31GfX^dKT9JgDJy!4-yEF z3VZKvSrYpFjljugK8)3q&_O?`T-^g_u4IfQ`PTMb~AGOqn%-G_6ajnCkSAo#0xHwWyCpT=nYJ zK{XiJ=yTVrc4@62mk6rn1u)IWDf>YZH$n?KlUta8Q)cMdt;gZvaBS))~{X`c^;j8h3= zf@;zRT4*d<5hSGvfq(&fdqa|=nRs8KC|8ac9`qa`;+GdMGKfzn1dD-7@L?=MZ7lw2 zP;%qw<^9tP(Nq3=QbUg&D3gd4;t|Sy7I}o@ZmID-3x2zccqECI8g{eHs=5BTq9h|7 z4`bi&>(h2)xZqjN%^V=02-O8Ui#dQgu z;50R+__!Yg(xqLIanZYX@3#9CG!~&(B!s)fH+86tybMYv6VPN|Ap6#-av(68rRG80 zi3U=T6v1`iEv2WY$Ire~!Zah4DV`Mmh#Xx&!IGf0-rQ}zXq_+>dREc6q$~zLmd)np zW80L7qMlRNqJc-7xtzstQ}zbLyymgUDnRosVrr6Sx%pjiUb{w~grJu22M!;;>RVmH zV%Pf#wyHe-2qwca?3#Astz|(3TRhh?@d~PFR~D2)`zVa0me73W(jw490k1@lbd(FSTsOd+Ngv7rpYqFQ}zm9>*$D-DDmjW9;K4fEd(RGP| z382whr}`GWThT8R`k66eK2+7|f|N;gk_Ly`EsEY`)Qg#O3%YP&S~PF2|DL5wd2kCB z93Is=T&^v5M)@RV8wS*BRp!xqhs$QPtGz7vct(fXPs++33kfQ&E~5Zivx)TgOGX}L zNX3ic)iP|2(+LN42hv;+6)%qW!r5iz%yRPec@>#Nk`z)z49WkQ&*roRHEnj_1CDWaek!QWWS^P5ylWdjX*YPv!Ut}$w85w80kHw~cVbOvAbAa`+n!DFA_T6$s zT22=%YGau4Zo}~D6SMQ*qodm7 zF0*~QX8ehECIk08?l)#j-qv?uI#Wm)2#rXR<(Z6SGd=a^DO2{ciLjmM>ZpF*&VP8y z?Vi4On$FlY;kGHZuaBiSWx%jgaE|Mv=j=(c%GMS632UYX52qct9P*C~?~)=NB%b;0 zlF4wL$+K)2m=mjH7Ac~^LM&+z_A8jO$aUcyDkE4^M_qFGUj0YM7PDxp+TfGS!f01ti! z*s;BMF^AeqvC*KT6XaQEW}wW-mc3tfv#fLdWj)$K_lR%*c0a8HSD2`uW|pWD_!|P& zaqsLtQ4>JJh_Qk`_lXMb#brGSiI-(+>3<)?Lab=}tsVLUA5roCi5D)24TBUU}sgzjB28 zjYl8u?F1f3W@h369>2oid`QFHCci%3BUyF3u~pl3g@*sG~h8EY&EH1#t(T-5tCP@ z9|g-KfeB_rD#}~s3}BxtVh?ndM{o@Jl-(-pvq49omXUkZe^d~_K;_d@gMX)|kKyN{Z2!E*St z``cR7@943%myYU0r?GzbgDs2ptd31RcBN#`{X1>%?0=?P`t03?@fi_g3mz~+pzmdD z$YI;r(;B4n9`}eJlMEJ*oi6%GL;qKN36HPt+#a^V9zKej+r6yktx|il@T^eavg%|o*%W1W>#$^hO|AJY(xPt-&!=kuGq7spI8B_~# z6$_IhCQ;_mbv&r_1{3K3Y-CcYDzFir1IV4ivlu^A06Jn6gBs_2-8;@A*iCGVehNMOwWXRWY~` zd{#oM^nEV&mHs93fN43XnQ_9x`^s0NSLP3q{vLODoW)LB%(AOUUbeG3{v`Xx!J-ZB zr}rgH4EXcV4|99g+c-Vq)XjHh%`2-6m&V__YIf-Kj;VX!_j{^4_1fiFo1U6Gd$u21 zJW4bR5#$H?5TdB82jo%H$vU0r+K6N<+!OeFlAoZM^>weXK$5 zq3}N~qJ{1c0-a`H#vZXETvX1gQbz)m#y8Eoa)3t;@Fk&@k|Y`E?zY-jHANChvK7-{kQVk2Fne$>J)t zO-gF~1_nr(jU%_pp89F7VEDqIEfPC-#m$AWEY2STdar4v$V|yoU8nz0)-U0V@oH77 zw<|u88m5!#1ewhXUWHxme`J2VZ?s`XONivAD}>0EYd%dl=vqPA`nm^C#Oi5@EEOv9 zoOosA8AcvpJ5x(04I*VLB!#$U2T{BhNG^aAtA5v=fFxD57_uXUWCUGBpRL?M!-vBf z>V7uAsF#{5jku>T3M6xvo#c90n|KQg^+~+ocI6yY?FNSZaQZ}9IjLd+9`B58 zMP9J8f_o{g@YxAtSLiTb{IWamtuS`21~51b z?fQBxnf1@^tuxYZMwXP#S-#8Ge;$9kRVUu}{4;V(uQ4{+Ww{T_-nEH&9ouhhl7UDu z!;WP|Pz=N)<})*vP>rU5lou!2*-><3kVjSMz@49;3e&0Ou#-lU#G$QeOHQ%vDowqz ze&99)+(Hmta7f=?y@su6>PUA~-h3-g3IB!*twuP%3_4;?6j zB*=pt_BIY15sivZImZAYy}r&@|4d=7}d` z+uN?}*m;b5(wMOM7OJ?Ew*${rD7_PPdP~oV9|DVtLjUQQy?56xFjs{%$niQcu@j{S zm~MTqba@p_{V%gXVGbkxokADSC0-~vAHn-m4e2kVc1~3g9w&q8%$a2H%&KwTs#UP+ z%Pr9r9-`v_<`VbRg@o<$y)PKARcwtHdS(a@*>c5JX3?A@al;xulIT3k#u>QQHD5i8 z9wbLlROa@1b>}*K%8&bn0wu*2^8h*IdoN}lp8j;W=#sPC@D~hIvorv4xO&Xw(#-Um zkQLRh8-`VIeE=@5#YH7QmQS8ru~l^9gm!i1i+6g3_r~pl;)h%nsXm!ZZP}7FHaz3z z{y`%?6t6wKzhLv~he?jk#El89HV3YrU1D97@Y9U7+Fl$&p|VB5aWf1S&D)}a_?n7t ztK4Qbqb9OUBgzRvtzW$9*P&OH4MBP^?R@8M6t+-=jEG-%Fa^nnakIGh0Gv_FZM7pq zfKSH{Qp_atUWN7i;1z^k+l19^f$VM8Y)SUuw40(2fZk{?tld^i+UA&3l9L-b3bm2hjUs9@ zYE)Tx%$(5BUHf0ze9(0AaXh~;uFopRQ;l_}9r9Z}(RfI&9+ghj_1oEe@bVp_if-Q8 zHfV^))3jTIj?GX1!83gD)4?XAQ+72P+`RgkiF?w2A6o05EtMOu+kZm!P1v~B>vC!? zOdo7I(IR%;KRKoKPEGsS#%FCO_oQ`Uul{HduF7Rz-Jh+fbc53QAmNJC!;10rwi~m* zI)bsOd`wKD;-U`VQ6SYB$6PXM`c312t#~W$4y` zX|C*>JBeE9IE!?HPADJ3@f_yfs3xeYhv@1oiBC7H{BY8klJx+zo~6atW7AR7*yFRJ z=j&60#~xVg{mqBbwBl4S7z7wy7-u2dzcRGRuUi-=ZtL?JXqST*#Wr1@n1oi8T*Wd6iz4Z zj2!&d8O;o^9lt6s`?I3|W0M5!q;*jG{NR8y`9&?lE);ZX+~1X|SkZI(>T=qHhR+6~Q}Z%aps#%aMY{pYjQ_fQ z^3C82Pp1{Wb8F_lQ&*KdqSxG5|b9F?6G5ekJ>d>_i38*Re*F?%7jUn1DCe^tp ze6KMTmP!4#zb*uci?6Zr#ZFn3U+JK=qzH_lkvikL-?hrv&LI)7!sje1?=J~f(xRj_p2Px4otI+ioz3YiAEq{$4tMn3?p?bdE~->9PZPVBh2EVsGu}F)pKgN=eaes2ScG_^`dt?azR;LN zl1JP|xTm=y!on12Po0(ST-|na-+Cb{r&7INF4fJTLEm59AB%vnqHk|7?4ejCiOrPi zCUX!`5R)MBVy1qRx5Sm085@?>yrh^yAQRD@p_97Z%mUYJ^@ld>X0q|JO92M`i>`53 z$KnHhx8&9@&qQaNiomZ*vdIV|bv24TMxD1A(z2oqmhG zbbfe;T}{rqx;_?e_3y^5gWS-G7`v^7<6j_qDb}YFeaMqMhX;{=a zHapiTj&v&rF?Xkw7rnj8i7j{lpJ zE3Yk_>mHZlBiM0(qz~byizL>pnERIB;5;EhcX62xrnRYL(Pcm2r1Kgf%slaoIJ>OQ z9+!e|8cs`WeDdDn2JL1%8_7E7&>WTjc65-zIMNMr$3q$)`B$YvOA==4vrL0C?jkMm z)aGcV{#FuGZr!@r{;Q>DT(bw-P;LrDqSzF$$dZ@x@@d1LTGUure7t&YLt^_X=-Dd}lTX{*d!1V#ja5C);_tBLD87e9uv z=dig0=(5mALF-QpLcAvofB%$rT3Lso|xL{zMIUfVq+9}0)iVGEZ} zo!fm$!|7{Jmp+|33EoHgvP5TQRwB+r(aFCCb!I=T6fi5{(pWd$T}97u$J30G%udHj zad#AT){2R{$n^XWsBv{k@HSnhGgKTZ9!~cecCRN1lybNHeTl_ZMCJx)kV4*-{WWgu zp`>n`zFiW}XPR#CwgEn2>gj<_RUe!b`WyGO{L?a<`)WhxK;$A&_Zg?DP`D22DBa9( z_buUcwRkuY24ZMLdI@88dGD8-QLU1J4iZN7BC0ufSl~XP{@~`-^k; zLM{yRBzut~41Avun2U1kRWi$72ADEMPM?+7R`%|BPoF-c{tPULdyi$~)UVfIMpv>P zm2NPMl1OAns;n3UBA^K3NXB-kol))S=&B*vxFHdcq{P+C>mqo*v$LBfWgpF`B(2q{~Z({JL|i)A1;K z=Hhdne|_JvB%R_O-Md#zXkOZ%wL?iRRY)$?7nwRzkD?-fB`2e_^EWi0$15q}u(z6O z375LBdxf2P5=Z|Y8piYK+#3#R>mWCi|i*!x)%0?-b@wrRvf^^O!ChX33MlpdfDJlmV^_zbs`VzN;Br4lSij>V44|&Cy+lp{` zSDC!h(Y1}PP@0~pmo!1V*BVa0;Z`y-;0itrw;0{;t?9qnv>|eIbHY&+WDTTDju`AP z1+NauUsVjk6%(PxfvAKRCfI&(9(z7GMZ#C(?u&ET-MlK&y~CUREt_b1Hg8=Udd2BT z*Pu#%*7&so^6%P33Az`)BXiwjNr~2I8;QPTP&7-Xys`E|UEQQv zxlfJmgRL0WVuY(nX@m4ezF5Za*`r$9I^VF+gv9=+c)j7FoRd+s!r8U6vSkTbtP^CE z&Q-1wlC5kaAb6w5V&G#r$i8uU_mg11x^9;60kEeJu~98n@t)Z>-w4EVKE z68zV9+*?i&NyMN{VmrcxRSCa2-OO(DTak<>>5qXck%}k*62pEMnub5|c}HHDaCL_> zosO(&2w(}#ua`Q+_QTAN`x+~I8ksrbl@t((3~fF-4_7W`>+BEwRK6znlvx?*rsu80 zj*|8RAjv+4CoqUR$dGufrfNk-+aJqUpm)mDILSV51?%=PYWVqsJx!%?`45nXs3$M3at2Fct91& z{KdC(Y@&o>Ezg^=L?qPsJR#RmZbdUs2zVYhbKIDJ)5Y7FLade%AJb9I{L$tB08$Pp zLgXCj`mWF2|L>(r}kMKJ4zgrPfbW3U;di4$m2SRtj#IND?-dAkKx2xcyef~ z*E_?Rv|dNuf7@TrPEOjK*^#s6Ld|`iIR@UXBVADXcRdYXd^1U>a64`Rv3$N%li)%k zvTXC{O$p<#J&>%BJ&H}EeBLQ4z7Q#oE6W1-`_ykYVTIq1#cbJMqj*z#|AKiGY%;PZ z`9_Vq1NLxaY=T~Xa5S3UQUh01YG8;}N~`kZba060*=K(JmzJF0l=!ihvLpl!A%$|E z{CdTvV)G62Ls1)5WRLkwq;LXf=c9XD^LbUOv8Ilq4nesu<{dE$d{%bl6*1nqTXMQa z;vm^5puYK4GjFto=dE_j4J_^HWE7_|z2uhCZ@+p+u9jHGD+0;oM^R#((r?oiTG_00 zK)WvSC=HIpKk3Q7_|<6N@jcSy%>I)KhcKkod0#OD{UtpCYQ-^*lu@L4KDVdZmxSnD zaZ=n+pgC(zx~NM63JqgH)T-<28)HR-SKeH{Fq@@75{~uM*wUkZM#Xlp)nsZ7&QEq1 z^vN}r!m!#)Y3_pojepj7)dca>O#zkSOX36NoY{8IH33?(H zt+GpHdqS!ONe^}F060+QIE(srufemrYzl2Sp+=$j+kHZg9Mlx2-pgWqt$#u|+j81~ zAH(jguRQnHe@{A8G{uDIEP{AabdVvM83Dl=)j0DMJ{708YEhH-q8$Pu6DLYz#U5@; zw*|hpy%UB-ZK-#8ZQJhM7wd{*jT`U&cevq{WkcP!)I^h~ym4s7MmX@cwaIhQ@_C$c zz&7Z^Hprsj$p1xCbF}w}s{GVXuE_d0q~^!0sqS~ud6`ND>c{6Vf@DHMgJ-lCb@pk` z8?{kQFK01pt4{L{URie15Xhdik$<7HtR2a8IhwL^61Gu-VlI0dOjMUlSfjyj%4K#$ ztDBxS1#EAU=GQ-|iPVP)BH8LE2pDUFh|-eLsh788o(m(PR>$O5G+uLI97+VymMh#T z;&G1PDiK4HnFSEY`f98P)f+SSfK;Erc}U*P={mea*oEAu$19tQH6M?OP*0C#B6*7T^vZ#5dZ%5%d|OP%7cv@e8Wd5G`Nq&0o!q zDR(1jB)c;I1D^X{i#~t29avT>8>rxyB8r*oNAREv5;gk=)e^jYlRD+(!dY4%8xxel zdC`ZGQmKAqvfg%ohfp5CPKLZy4ZVVt+TE0OfX7JI-tPQlM>2YNpvqG-rzog$dF{@E z5dRY9W3OK8?g0N%BEsR@Q(Cut-<*o0bvVlPvwj3A+Ok0J)?b=4?yp#{!Gg_GY{LlP-ZaDZ#ojcx-;Yh+b*t z+4N^Wj6tyUwXHC1-nQ)=*OSqr;{e4ZV1*~_fd6qn?>QBb`J#mL#!{(JzvX8am>A^} zac!NJ3=>S0k!Af)RMcdxsJtQ{2p`zb$Yv{SR0*O=K_McLgwS+@-+%#{JBrZ0x8w9q zA@Tbs);0VWy9Cf|n>_kf4Bp7NzdL?@T06x(CSuInY~!*W!qZi%9#H*ZIa`du6DY=? zy?DuU&HGFL2{C$u7Kitj$u03vX?^C~z|$A&;l~iZ%(|zoe8afV%04gZvjVUBBH8!5 zyI`)p2$&5GwbPNkDduEfS881`MBDBd=WuP1W)>caq?_D2AiOT^>K~DtwjU&I5+Y@@ zdEUMVJWu35TSIsUd~4--^WZt_nq47ixBm!BIxs|ph#AAh1;$dYnY4&pGg_6;9_lCT z#1TN{_}S6cn!A756u5nUaP+o->_o~vlI5uQT(n){Rwj&38!j&KrYIsou90B)?`@MM zNXh1c@%U9QPLz&I)WE5=(#_)B@eSC*_#$7oa2~w4kHJu17xa9`kt5h+>|^_`Q%D4& zDVhq6F7aALmBywb?tx$aveD5#*Mt*5aqTH3ri`ws$`zdA?wsdct4yt+dfn1cFJBry zAsgWbm4_I3GUFZ@P@qjbEXU23XeYo%75)f$rY%4&za8^-zTfW#_&Ftb3sanGcADXm zGaZ^+{U@xE^Z3Y|hF1RxnfGA|!3ZKLagHr!#WDqD_jB|0#>Hn*U8DeiIQ@A^>g)t> zSxuH*%PYScycU#~9?`GL{(e%aD#cs!5*ZpGV zZK%?1z7?@xN~3J`d)h!u(>@M>EY|5}d|jrh&W$&tX7kR1W5{>n9_@!*vUpP@yK^3p zs;C}lI8=#sn3c!~O16z<18g>PH6=B}50Nztp6$;NH9xO^BxP9NTUdt?e6&lS@9&#~ z)Rp(oG_j&y=VzZp2}=L$08jbj^`jLSc|QyvcA1+Q%<_aXs@Skfc@|;6{9sZyTR&j= z38X66Jd94t3jCnELB$g$99)?yizZB(!AHG1V$nfS!O7eexwC++sL-?zm|g*%?fakT`7c=+Uhmfqoc9efcIb(y2OQ zEcv-p{^^ouF7Q&=XLIHB>^4)_D7+(RFo_+RH4x^3UXK;R!etw0P}q-sQ|p~Bs7zuq z-``$g|K|D5ejXr>Jx39D-^u>^1?%{c-rnA4YQ*~(E*abO^WZ04@9JI#;nMX^`|Ct> zK?I6Av$_}|1HKL%;>?1oyyGKN=VmwHM-@2UT{A!68LNWnVz5QU`?R5XD@Ot$?f0R> z0j0A=I%DyoMNda$7O#=|Enhdwgke)3LD*8mPmj~gw?V9CTS`RF{7rM70d(7}1{`%9 zz>n@&Pl=Ih^zMu=Xg)BwA0NVMpCN-=eSjIw|NuO=UzjO=Rjs^N7Jq zO#EUZV<-VZAWaTX+UA$5Xqc|?e^xF2?W=PN` zOrp60P?Yfs8}V(u*5U>&nn*lI@`=h2JW8}n0TLw}fa*fm$rB_UrG*KaA;}`j<^ST3 zF%%Itsp_V^+p${teLbFBqi;peNEU$Mq#oo%4^TC7Vld?x1JCPPB74n1%Q0**J1{Aj zIAsdo!W?o9045P&4g2XJx<@0vb~odiWohBd=AyM*@;r7Q^x8z(B(s@;E%sxY$phq@ z!iv(`qX}P_)cN^@mk%xoxySeIy(N>9Hg>Aq@rHG{=ryv-Dq}uD%PLQWxF8Gg^iyOU zH0$SgcEYeni_^<=#n<|>PoOR41E%R=kun7H&)P>3&VUiRreF1!5cV<%3{Z;qxV%io zVHm@C|K38ER$S8z>uv!jQP4R9)wGc`J0d29*aI#d!z}o)K?7t}iz%4R0j?o%_(cZr zQA)M#*y8xB4|a_)Q`FkveRg2HYzj-^nEV%rtbrCH3!Nt0x3a9W!#P4p(LN?UL$1<$ zNJmu4%qInjJo2#ktmX^Puf1<>e_^vxou$vJ+^qg`SW6VK(y_n_YEM7Ohnrv5=Ob_` zlf!b@oL8px9#Y?aL|wDYbK&%T6_sYisl{q_;q{#A$#p)pD=)>H&Qtc<_9|jifn*vu8={NF?Uk@^eXxzC+DE1#9_92_Xm)UPc0vDpHx_pY7bq} z|I&@z^-{W#_c5c8?}7Dm73@W_h27v_{kA_dgC&@%3cItOwqIG)WvZ%3I$`eCe~IC= zrIdb``@T3tWjOI|!9C>%h;;L+I* zKf?@Q(Vu#+)6Rjt)QA%-@4ccQJ%(vp*J78MWHUtxL)k+WudIryI2%!JsNa6#Dy6ZR z->Ud}VCj(3do=@-5dv|~ubWkerGg=ZF~2IsXcexAoZtC*&ARhl%@dCV#KbY?K$`!!5so>cw!Ko`@-u&)7fGn$<-4EgxRd7v|DTlrBj*vLOmIt zGZ&2-&oo4&{YZSd*Cl9)%~866@S$Wxov%9%e$46+tNYcuieZfyu<0d_MS()3U!pCO zd-9Dnbz~$Up+ zg@}?Am5QLTXl=4s#j8wiBd9Uty#q*KLMyp&AR*~xDzl`o1++GfD{9qLiUwHKWY~DpGhgWA= zj|b55p!hcQFN6@I3aZe5z<@tR>t6%`O5bGe6a6dOvUgYf5CG1blUcG!3gcg6Uobju zp>Yzw0@buQv_J|)m~HgF>)I0}(~WQ+w>sNOx9Klu(4bbE5|yz*?7(!kyu)a+lEs@t zJk~jz8W`1Nw3)*IN`k)S%U(@ZCfDeAdkd?G{Y7Il+Q;S)WWyt4y6CAA+r!j9;?c%!Sic59nglv9(Te279s}5HDa< z+?6^}`U;&myXJLMDQEv1HR{Zr8#*dGr&$Q%wG-kPL|qB5)mGngV@DdY}tLux|>>b-X^lSb}F!S|M(>}uQM{(#{klf+VfzN&TA<{ zd9DXIb)Bo)+E}}w`&=y z`g_@j817^ZRx)ArRa|J9`LH(3n;0VVFZ)oVJ+d^*$YFodrAgc&0$P8m<$3yc-9|7A z;?jr;UH+<#-y!9YlH#UWIfzI4FD(GFbcpWKq(PAN%CWv4O&agJK1s9E=k*g?N)GRD zUOIkk&>Aob7D|a?8Mr@Q?@$tIX=D9-eOXo+EbxS1b=^_EDZdnB=Cg+;H@~iHEPzQ< zM*yGmO>wwb*1L{Qhfz0F~ zd?{X=%IH!pep1=$+c{Qx8PymV{#>3LW=#QA%dY((>{HLMTm(JQN;?U4TOhC-`()v;MpijkqD13?$qyopvKTE}0{Rzsg_(}sx^RMRm2 zQ@R0E1oLDhCabS_A~*|y`R>f@8u_PA)&3VN;kYpJmPH~Nj64XwfB*jc1`8o;eSTC> zgOsCEinGNh##xx5C#}6oz#pGqrEe*Cl3_UQ5xXq{)qbv$YwRZf*TWk6{L@x>So5|r ztZ;Ga^b1J}XWrMl$-CcNIi zc!*s$_-cZM;rC(6qeF1A`jlEm3-iTWV3uYW>+9175wGJJ+dN-5p&sQW*cx8GYrek!|^@cpyR|ZV^egWpkwy z>=SI*X@FYdxcti>AbO=5xNqFbtLiJmDFKU6_n0IA2Lx5W(MjBNk&TmlsEtOVxwC$~ zv~V2EfTarxxDmnzhWbK}55r8R4rZOMlt**)=BADm z?XX)eQ?0IaAka#+YI>mIS7`vVFDf(UMve?MMX^`75X$)&&dizz=Tg)M|u5*#;0DWQkak^>9@ zO?zn6ugYtD^Kb`KL5nP>NuzUk&KRY}3Nx+J=XpsM{o#{kj6hLRhWqak3b$}VyofyEVYkNM^b_c=+Xa%fI7nC zd5X=E}`qa_kvs84~yOkATgZWIf+ELL$8)b?%-8nf_=Dj+q?#;#XtpbbBA{#;@C z!<<~8XPs!>G)iRlXS3Ggm*IH~WTf=&{)^rHN>*RbTfNz4S8SKVBlDln8Qk*uj+8;} zV+xji(3I?p9W=sd)XoiUG}n4=vwJoINffEbWG*E+g-uCn)h-k_x8OVtJ(b`^Q6Nu+t;=&ItN`b59%jg z*s`cfexArVPD>x=egPA2W+5cH*NA?WlRc%t*Fv|(k_tUM=wc<>L*KEk7^K4iz^hgU zgkOEPiQg(k{#sbPDNr|~#3j4@TIMR|$Ly8Y!O~8VCKBm2fxV^5c8;+3AaNI;sTr`v zB*f}(>y#cCTAS7u_(#=z0)m!<8N`&IrLxey(xL7@?(O*Yv{ja@S?~#H$(NwFtn>>* zLBhUIeD*zc@4`MT&k9w*-f0A_5gK5-A?g7()S%L3j#$?i2{MsKxVgONKs zmCarrvMe}tP1*9it@YOA+PVjHSNlGiQPwwb*9bhghg#ST+3a(`$>vd6bHi3cy1y!W zeBydQROi6bpj+0{9o2V_mpC>Y+QA`q<|AkSfZS^GcWLaH%W2EThFlwRzF&Hs-D^D3 zuYBmOE_}Dur0_}2z^(iMWB0Dzo_2+W@!K>(NfU?Wu|wE z>j@i`T6e!TS}9eVs@U#h<2;%PCZ|lO2_^-~3;X{#dlR^t^Y?8$`>wH!B`U^AmKIb} zv@o_)Dx^|cEYYTg7D|hKS2;ymj-s?Lq)n+1Leg?tkV=X=rIPmjf88f$=Jz~fp5N== zYrN+BHI~lj^M2pUbzk>&p@9Cym*ZnzJRe_HUmQgWiHEcBYZ+IN?3yzNGoUR*m0Z^j zED#bOAC64*7?c!~Zqd~Ro9Ztvjopgzk-cFF>dHyNikL3&@dX9N?7X)QJv%6L2vc&% zZa+W<1qg^e)?T#vpED8OG?Qw9W1UmF5YKSCJl6+_0+`_)i8mxlBA)!=HY^(I!h_w> zee@*mJLggIaqVYT$g@nNmU}ts8BHq$4_7ed?VgXkGN_$cSYF=aHnZP|?a+6WS@^Q_ zby2IE(*~AZWud733rA6|ttq3mE$tAMaLwyXP1$NhKQ)4wm(6Li^CnO0ZXcFMQX zli@hmV}|oF_l&j&_foC7UOlg_+_(Gstza6$2hmj z^jAum)IFYKRW#qQ1v8$!0Y4A1Y{3Q*}zNLYjxa*2wx_uufYPS0&{7!U5Z;CPX z?)7NlVD=?MO-09wcTR#t&`FHZ^xQ|@*EFM`dq1jc3_1^5ha|9R{6BKI;%}ge@u0X; zXGP(_X~Rc>D)3+F`$hWT1{{SRb%@3jAVWkv>Qryc0aX)m5by^fmR(y=ogjj?gOUff za1#%G21sde=-KbkgGIaL_xId&Yd&Elq?(Iy%%(mCGO9=U^IYT|IO*3^?qE?Vnk4Z4 z8sgAoF-!lCt8ddh9vL+f%5?Oys;A^%@7(F@z3c=m__}naRnodb`l->QI|m%gI&Mzt zer>$s{fC`#TGkm0nSO^qWE+(oDJ;k~tJ(ACHI=Y7FH!TN8I^a86goo~+$WlEc9^vc zli$-;AfR_BoWV8GPzn)Dd*62HnTKmlrac0L_e2edWA z)B&MRmIrD`;#1J6L24U>47MR_2WIB_Co{B>#Ez~3`z?t7=gq8utu-AuYFwDo{r%QtE%Tb&%F3PHvKxWIz`L&CA67PrU*k|Kz52~-or@ z{pgyrc3@Z|&xY39eOzqrFX=_GI5R8 zp;0>1Lx$T2%P(3oe)6jo@sm!TXN)j@E2S&iEW9fC#S(t6)xOS3rO)iI)+mZr+O7)l z3|N+|t#RX)PP0=@L+{-B{DH0Z2aV=2BRw`Gio{!nC2hP?owRYm#izGfA@=?&r4=fw z8nWjUTfOae;&{brTxS@p=@JvHjM*VL{G7RJ|H}04mfm9@ChxW;KM`WgkUAiDx-lu6 zv^SRNP|D{{-z^G+?AP8ceszs@QE0GW zUth$OEw}Tc*{yt>ZZtwS0AOGNJRyzmC1k&gG76QmzxqoRv?(kU=aYPl-QkR|&#8kAW)yVw?9shmHMQm<8d7|C&TL&W6Cgo7l33>~ zRyMqm_EoCbYNsSqzV+#_G(p)E4Y&S*+gIz~W+AZneb9c4h^E=ln z%-+S7l&Y|9x7?7wGAlYuVpd94oQP4ZsX(>;v7%Si*BFBDOESys6Fa(UY>zRR=Mv0H z+m71wzfZSn_13js`p_{r)nU!{U^k~22DjLwLQCwbQnOpZ8bU}a(vLL&)PXjxm_67! zrkDad4pvNkCpv2)`I2F5aZLDfz!xwLN!*XmbTrZ!3Y$==!+tQ}B1fQMk31oj0xs%* zAYJ1eNKJj78&NF7*baX3N1Cwz%y&F`8=zIFUy?srkZuY@g^`2NWTk$-zN-z(#!;B_ zr^1XGOAuRX1-IhAutFpZQfEovPkUhm7)KuL#Nyyh{G7$QC?ZuctLgLQyKy1LGwy@c zkxR!a%jeFWys1KC`-h|McJl1As__~te7zI;R}Je}$W|xm8q&+sj3=$XriZQSgkyoj z1&6nqGwWB}svKw#dN%bC+wJ}A)TW23_M813%qv6Lu1B9l^khBLVY2j%G6!U(r59aQ zi7ea0w)=8ngo9pXkJ=o(1L5tAhKAB-uQW_7UivJpIrO0Y+>{0Op2^oP4nJr5cJZHW zZzm-)SqEHJY6OnS^kx{eS5L6Bi7H90kDlP5H+b36HsNcOr1AZCcDZs3>^$SH#VYpx z!7L1uxg>4!@=3at?V79kt=5B}V;=Nrto8FTQLpS|kN&z2jLZZxjvb0>U-h*!R%5d~ z5$(Inx5r~bHIEBoc)d|j-p(`k0ABb3U`<*^Mx-Mrh4pfD3-nfVKEH};xXtGP)$dim z-sA6mVMSn5O&E|$Qsm*uaM4(cTali2T}&4`4t&QC0Ki>(ML3Jh>S|jdEW;CHt%(8a1y@cgqS6Wim(1{_Lx!?r&$(C@QcFJ-S8$H~jcNLYn2O@2_Ll>4$&wBe!V=myR`FPZQo zN(w71Pj39sy;>$@PKTL)c4qg*?UTx~&(@b%Xt#$AhPjNziW4cPQl3={n|GzLOU8@)*RSINyLsjq z-4w6l%Nl9bjl{P+wNj5X$1dOZoNUY-(#q|CEaVaa2m_B2xSK=~9z#6r_D3W5O|eGY z^HRfguYB_$bkR0aP{jb4?>j^+i)h9~g2A|Q0MA(rys|72->j$FFLVGC(;ENA65CaC zRa_KWoHERv)l8kQJd(w3tJtNuU3)8e&=$J>D%Mw)${jm6*jhY2Kjp`LW$!m~xmBrX z*J&key;;_@EoHfYg4OHEorCp(N50w|$)nzpg~|NTx#irpaafr&uMYOC!zA64e)RBVIQ5 z>rCRFRd65EaR6t({_VYBr_Lrz%-XH$@^3jovge1Zh~LOlYbye4#-TO=tU>n-3>pH+ zFg}I~F*hLKsr|ZnnTLda*}--QN^yaPECBmDjKqAg5klTu%G!$;FW!ccIvN<>8(L0W zG6DjK9)Xc1NiG&;y15Z)DU{Q(3x#j0LnF_|YMynjuhb^eum{auEzDS)d_&P%omE|t z9WMqHnloGZIf%gzd(tv8p|UlU+{h0cbGR&#ccMTA;>DmeI|W;qES}aJBkf_=r%QUN zb`e7vj&I`Z?&>P}PVdL&ocei!y7_B^C3+q(xMz}$iqDGs^Viu5Zp&Z0N%-A{3&!j6 z(iIwy$Ij^{0us^t5c9T#&C8i2D8B>SCHYvc!2wqT?>_S7vP-EK0_Q!c?n zy-Gtgs4MdE`RX7y5h+yIwd)pEQfSALSeT$y$gn%oK}6!owSo|*TtN;}zve_nd}dFfc^1-@He;oE(q?2ao;pJAHU z-ZYx^U;w3)Y*miWzRdXhYp(o*gyaJsl+@!Y`@pb)v2$$0v`6X)=eI8ybngD_L!3D3sh~1A41yBo<*A9ZZK|ad3>yJpl*If%ZkCa(QPZBWZW%X*X zbTeFzp}BiYLhsK5usum+E@@z9L}~>EO+e8(15-FHl<&V09#@*)YaR`b?&T`Ta=%T;u`i61*q*Bs_1(d(`jPL7 z{TG3--NDAE9~vUqKMMeDCGll?+^7ZrdfcK+RJ~_a`R1CUm}0@2!z6`q^7?3|d~Jyl zgn`O z9UrlnNJD@WCi>KXkA4TOFYwCwS85ATBmal0n(I)FoC(IOIkhS^ELAFtJQM%%PK`(T z=Z2CODjB*1bCm{}7u>i8vdcq?P^)d+j!4glK-rA*g``U!=84cq9_nPAx>pu>?bju5 z8x*|U>GOgy>jeP8y&PR@vkEgkSj!e44Oq6e_09jdOk}FGz(PzvWh?oQkP#kd@v^68 za`w+#L@i$1C)fMby1(VN++?T8^k*!xIp5bMfWx7jYQ+J@`HHM4c{mthL zmTf&}v@=%xs^ysIma<7KJH5DSe^)oo870lIC+=#=Go8!7yScY*KPw|F&>AiPv9<%Usn%SA}C0h~U-Z-JH;I^au*OMpcM`TKGXlP5= zKo2XlS2DH#Y`S}Qc1Vj{TIS%67S;03OLOe;H-5g`TDk1|GZ3?ZP(%PoK&d=g4&GXc z_6^#!UV+O1QX%t`g38Tr-Ojw31gy4CfNF->3zm)4!fM2z4~UMUvvk;TXMiI`srD8? zDaqmY7hmy0N{+vS98m;vMp3f05luYl(!J1wmq;l%k|c@jsfDtDM%&oz<&tR==10Ye z7CPnFv(S~j(2UuN9W>@5F`E2wVG%2d0Bz4Ld}gOo0xVm%vzhw^nTNOM3b8@m|8ZMI zGc4AqhtR(&(uR6yjHTrhX&o-vYARLqx2TNOjHCAXz zTW!~N)gYlQ=i2HkjrKcancM$NUCXkohydWMu-ZCP>H2w#cRFQ0X-8@XP1{e;cB(6N zdtdcHLTvDA=!XGG@uLSXD!Q89j-BN+kSvsJ_wwWY_Id*k(*m!-f)D3JxdTzwg^y$O znv1rk?MY{Fi*9DCvZ&a~Id`+v&MorR+G3+3>6qkCmu=hX4fZA0MGV$?-ScYiYHrHE zI!e&5r0jhIr%^{gPD991SBqbxD8|PyraIMoGwX|6Moq7bLsJHbzwt_Cg(1W4rJUx55NB{?*3Wwt8`Kg9np}tU0gpb<&#NX5G*)ue_u!Udp_a-u@xCGorqV znOgnID9VT_`R-tnLDPtYi6HA~qTljxZCijaF&`^kA-JoQKB3Q_oI~kUazxs;5IfQix(|nC!=!+M}laifr zA~;%*LecsByBU7(kS@Uc`2Cm2Tq+(0YaqLnhX9gmAnFq7;lOId9ILp90L$2-OsGuL zE;_l_9e+s9AQUFvycj3pvovm@qj|tvkojOSy#o60JWah9PLt0qXwKsY$i@OmYNC&E zAg28}@$enngyNi+R9=h+sr@f4$M~}DSBDi>g=*@QJASs_(f*C0aIDp+xHa6$$@u-q zNqv@QMwi?8hU&Q7<*Z1TKjOnk?S@Yo6OP^Ijw?i?LoyKI% zaL(AlGERQio>|(zt+W5rM$7j}8%!$tCa}BD8HH=E9rNzs%6FCyFcwm(ZwegLo}g$H z=~`+SgrSH<*CXNj=F&dbu(QcZ-J5etog)+tJWA$UzNgc-{U~RnT6YlU-Ojm7inDJY ze%t8ORq9sA)*0B?dR?;QLgvG*8X9gJlvWKGr*~y%=IlwvKNcUt)9l{ypXDaLlai@B zoAdeZYCHWy{LI3>-zyJhb(-maYd@UU>XQ7qEa&xLpTB+Q8uQ+aiWxCF?XUK)Ub87L zE?ZLn-WE{VeFTpQct!R0KARoa5MpEya!d9~(S&Pp^+h-L`?b}Mk?D0aDiW4V-^ji+ zxw1NN(qRr%?Z_U+q47P!m-}oiwSw7=AOh7~*tKD^T$X)uBCLIWgfC@V^!PNW=3Wj! z!1|#@%BP9x70L}d0{{Lsuc3t#f^y^e7HI2XuYz`}dB;o7Lr4L%Kk|~`oy8b@CtT_X z$(o5!bLiLBm&OHxBqzu*qoW2LM4s+@%^i#pL8vqP_~=Ba=3$g?)atXZE{9C*-n~m} zgduT9p1TVgU}*t*CM@A)ghYY4+AuqqjHzmI3m#R_ahpCJR>9+GhnoiS28Un5G1_y! z&On{BR=^>5pk)#ntw-dmpD%5Hl%o;#B}yyJAk>6v1^!5-0)H*xx_Q=1*@yaG))(JN zW0(!psxp}BIT5TZkM~s>_ceq& zk*ojh5Xbh7(LnCXuQ3Im?IL@t*bHWChM|>pudNZCEiph8EB)2>m#eh5O1b^P?8y!} z^jJNIbF;u$2ECw5W&_rKT+BNXhsy6etFC%EyLB=Zj!-M3&BZTr5XSQ4p zJWHr+$ontY=xm_j7(Tug2Vh7fkAzEI!cZU!c9&N{7f=W`Ft4F)mv{IYPD`?_wRt*F znf%dxg{P*z->Hcj2jtl+3QFj`6nlXa0>+BN&N*kX++&0)ArAzx8_zGqpooFw@qJ8n zz}7*LW1@Q<+5J@Sba;r+y4 zw*H)p#yiCWRUbl^pBX?-uF9R0xbUGv;GAPQjAHX82Nd=A)g1Snt2G70d2x7Ia&SxDm$VM)P?4|A`{eD5!zZ|f9vK)& zc&>jWYHv%5P=B7PUsscV+6Unm1|-f+3KS6PF0&hdn4Hf*b)iitBt~1{1XLqVmuUCDcUey4@wX2w0Owt zH%*euw9u?$SC$S_&1I5bAbm2o!CoU0W2-MuOQ!Are(bxzVs`Cwd7O-lu1^zCJDYr! zL(TT>3b04PLr!lv^)MT ze>><@iS_#+9VI6nS@(2}`!n-&ur&EO)w7ITlU@6JBG5`9MxO$(0L6nlc;>XZhwGIM zRrY3$@8{vB!~nRHCBo--3L=Bp15q=nfwrQ^g@)70iXbWV36t8#zkcl&eyfJya=dRD zCOl|*wDFhma2@qU;^LprSq$g9D@@u#pn9(-?jMamuwZ#bNI?&8a<=2Z-`((RM@9S< zUrB+Q7_LZ}P;SIV0x*fo=!t)rk{obMueh8p`DQ;L>T4>#Z#>FrJO79^UJ?;;f64x2%fXAs#HN%M7B3ZHre_GPw(kBE`neK7GfO%p zIx|(UgxOe@z>&-oyp=V1u_wc2Ykvg8tZrObM1G}V<79a-KscND`+GFxBkS%83S4)7 zu&!nOx?T0j5uEcJ`wuVnyuZ8uzLP`KLZI=*R~X#j4Xq+f(T-KxmU@CA!W{}5 zY6G3l(py$iY}a6#3zQ`v(?~S4_Z+A+Q_A;@_d;G$GAc}%)LZyArLoemX^`D9g0PlA zclJZhK%e5z0zA?o*J@yWWz%C=2bo>3l{w)q^>F;i)g&yb~X#rR(w_`3&)7wOl2Ov?wa}7m^ zsXF|C##%U0`z;6kCQjQmzY>f`>>gn`-!|QWA4=tjQbWlK9UIaY)L;B5Q;j>bjzyD2 zoGG=NYjlYf360F9h%>{1r&>GrWmI%^^|OTKeZ$|23_dJ>1z4BAVfHPyZ!$ zfr?ri?h(KuaIEr@#%6B98@X;fB(-3@)Se0bw%?`n(qpw*cFm`=8O+)M>CM9Kj%zKR zG)NyYOT6ji5)Y8EIsaQ@d(+#u2CN;e#Y;Bq-Nr05$h)E?EyU67&ynf8${b%DQ##?= zV8JO#rC^z=L{>;0nVV~%rJ4SLs*C&6^uMGzxuTA_mVyM8D`fgdzz`3jAA!9H^Ww;BU<2HNd;JbKm{Qrpq12Rg z7|E8x=HsISj&G>V_xy8mRr?$e{*IHL6k00~qnEK+Qu-1)hHBr7R^7usfwcZ`6BRRc5QstiL;9bd%j6|E7NDu-;D>PB%GQMdQa;iBe$=hFz}|Kexj~sK;

~gS54kN+qSH!to7ky6AU{g(AY_mrrcH)VMAqQQz0gFdKoeOh z&$WM#vLGx#7^ys6U}02gbb-OKCL9Kk$uGWi^LPWw1n25(57K>#A^S~Uaez%pAg7Rc zd_mZ>TpY556Sh0aTL!d*2ndXjFbV2V{w~`gkiYAA92tclBkg=b+s-d=rxyfz7*+$h zmoMKFQ=N+IJIIrvN74tla^PpB33P4f@?!Jxo$Omt(A%3ueGDHSy+_p%^+=e@&S;1i zp6pd_#W}xvV3ScyoD6$J!e#;?sSY=pmn~?QzZT6M?Mri~*F+$WV33ZHD?Y&rFf_3@ zi2-{4M6_}sGz93Bc1&i#tLs#DJxkE2S!jewL>iL~P0;aJ zWIUEK(igxTFxsE9ZdM59*0UsDs$D4^*UEjr=(r%yg#j${UoTu6%cgPh{PN>T*pnJ* z7zF&mJ5tjD$^wYtxtI;(3wkzt&C$E$wMoluc#B$qSg^I@qP&ogMo#El_?1QQCuMj* zz6zcm;SV2vuv1Zo2MCW_vf}w)3hBnzv#YN%7G`{ykP|?>_VEq8XP!ckrkB z;>dmLq8>;33dSQ-p#i= zyBucB`Lz3mi5S^g@6Mz^1m>6*j|Va1Bli5SLtJ_2dfnQ+Y!O~4F?SZfm=~CrU3*-4 z0(56YnBcvfRXwa(ZT|!-aw#K^FGj~Qwf2|N5xcF228}t1P`4nLz8p`Z!AF54 zx5@S)XoCgi32b$dWNCiTT9S`cU)?ATNf(!9d$Pp>>Oxh-R)nkL3ceUM(l{Oxf1o-n z{xOx=_jZ5o znRu6hE*-va6gu@ei%sWa>IC{c8+#l+(W%>c0(ohD5Ttx$2X zLNM&02ZJ1Vb-!-FreC4q$J2*KhvKE^7?)x^4u^_tUO0|`=L9HX+prP93pfuk^sS@C zX=qJjGEB%hlzA3SAK%z2519c5lb*~qoXq3p;nC4MaKcfn@6)|brPJlhW`HmQlV*D+ zX*exrf?j}w0)v?UBX44$csQ*bIcEeGNioI65M(*@3S1C(XtSRZ{M||tNhUW+EO?;I zm;w7pee3jgg3obYZX~03@x`tl+42kvnhhco_Fyw~G6DfHFtC^a!qV=Gn4|%}#X2Ve z9KZO|%^gZx`Xn)c9bHJg@d^wt6c{4ROEbh*AV4V()N#T*D1T5W@{_X-#hroCZk>xC zBL$QT=-zr&Hs>iL-SG(!6%Suf+L2|mY%$MAHSrIq4R*;xP!6jcOesV5v?C${S5^v2 zzTGA^V_)U&IMPOg$p-HtU7W(N(B?@HH`W*^@_kK)F&-INdSz8D!&5QF@uejL-e7l> z<3gx=>i(OS5`93Hnm)Zy$VQn#+vg|Q=naYd z6o;zK`4M^NH3vZDy$4&Ib{IC-L#f=~spD&ekD-&9M-GXtgD{i3bv`{6GD3Z6%({@& zdFltHZ$;>#y;05-RgkX_uJp$WBghdl{|LN4Qk1Fm5?+eZm6$%B$r?Xl0(gNHv_^+T z7A|rji-HOk>0P_~TJzeuVS)AdH?Y_lp+=dmh)$$Z1aK{Hm>nAKCf_p}b z4JcgeD>E}mwS?{3!-W{ffJAmF=nNPG&yIzPkTL=x{YG90l>12vnT=cZ<1DYpu}Vf6 z3bYU*$Q(0)xHlKlur~OAByrvo+HR=6tRJrgn^q*MK$pC?k$m6b`yj(RN2YslOQ66; zR&5BmQpnmvaM7N>vWNbtUw( zlnom|-+AsK9Ot3fvl%!5VMP$%0TVk_@c9pt$5y0k|nWbWmx5YjBKbU%iGB5Tzp8(g#?bLF4%6WVxqs`K5hAkUV@Un`Mcn>gq3T z#)9U;LX1DC$Erl=>5>d4au`1>|gbo+~-=3D^eZjT#r?ff&AnXCmC)rw<2@rouaENz8xQ!%JsoW*bXHP*D8#;v!4tg3-?i>=nAmLo z6+{My?p4{xT>W7;0mG*#9&T=Wi-cqVKA3iVeTNh;N()JNgv41{{9@UUDu~2YhdQxC z?BA3Tuuw3Q2Hn4Z8O!`An4=BSwByn{{K&nF(ni8q+&@-Go?`E7swumYAjfM4+8`0g z)K^uFB-3!7@@)#HQuBxq5owZl)4Vbx9k9t?cMr7)IvXAr+bMmBi;c_oqPMgCua5Yy z%>Egf9g!Nv;||o5uo}>Uq`Lg5UM?JGuQJ-X91|apJV?>7@ONFmx6n9@*o=r4snDbL zYoaX?JXP=(-CUZNLrJ55au6vmvD-%wJL=eZN1s%pRNR4M#G2**q>hyhG+m(gUZS zWaFEE9!+pHdCb6c!+$-RC^NA$jc|1s@tfDfuc!y-w}50<3pUL3Re$W-Q>!!x(nJh2 zENpx{bhNaXEQI|PzGuY9?SZ*kXhLPWwb66u&Ku?r`ym5K0t3nA4*sEAd~XjMF`9}# zY0$Q1`@tH1+pxUP^4My6#HAoX%0R1_(6~^|{3mR?LM92Zp*FjKTAu0HDKx4~Y0TxJ zO@nEeJP=uZ!9OyIDdL8so7!*xevSd%P5W_@FN42M15nh)f3?FjlA@u-+Yz9IP(Ms| zja@C(#UKMxKZLy>I{}2tOSDk{kvk(Ouu5ZnQY`0H+64oBiJ5>7B=N?6Jk|dT*C{ar zU1x=_F^VzlmsO}qz(Y)<;j+}5t$4FwqTGS-^s6eHaNrnfoltwXEeSpOlM8T*F3GdK z$6VH2Q+Wyai|o<@_iOk`GoeidhA)nI5BPE72wV8hO`Ll@$w8UHbm?ikn$X_`lBh3W zNI>=N>DdrUY_#izBzVd1I{LQ&<^zRQ^OLu)pS%y^=3Rn*4)zoC{A5&>x*qd`JYLh; zYyWuE%<$M)b%5bC#Y6F1{J_?PIk&m%IWVyh$kCX7`}mk%Sv$m?iDn7SNR&qWpv@*) zmFwYyt;7tQwnR1t2Ur}R0evG9_|!YiqbYKPqinRAn?sPd%8>lT|%+xk1(|fGhS*t zpe7!Rp+XD-D}kLNOrnCrk>cRN)q5&{u0c=Q97l>s;)Sx=l{k^&aiwV*`zWe|)1!hq z0tY}XIo&W0`{#9`wHD5~YM89=V?^l08RAsnA3!`k>e=7Ynls46f*w6NH)9#24GD!7 zB0nF^7J{w}6W?AEjZ&v4*!1^ymV$>i#0hvY;%DKq`#8;YaKPt4ZDua9O3l!HqnGyL za9^ic1oJuIw21KfNaTZm|ME=#(M`8Nv?~Hz1oDu}q)saTw)gex=2cIC8Ul3^BLCHt zl%1@iB+FeiZt215JL0H4MBE|2ds6rYLY&QU(w@N*{6Wrojjn;8P0=7I4>NW0t=*>i!h+sZqIiMZjnSX7)@q8a9 z3hrpCOjBL36}VCyTrHAXW)=bp@p~SC0H+ehQOkr1e>`V-9~4)azzAsT0W#3R*ilts zA)0?EdeY+F40!?yh9v2LOg@5CLG+TXVt`A* zU?~lC^}v})lU-Rua9`D3!puQ)F(ScW2>bFD5mivRC zKKmK14E*0k_ZDnvV^5FjZk9djZpJ<9yPFzHVxS7eyLsN19g*(Zy#o8z^MVU2nZljr zpqL(ub_<#E7~*7>R;Q))^Ijmbli#7Go)aKNfdAH07wq3;vF0W;04}=-agJV=5z?$o z7iXf5i6+CrX&P&`p|DAt%c)Dt{t6Das9Eok*&MDNheY^|(p;?Ek30lf7jpqE&Y|(r zqB-%%v_ypAy@}DMe!K}na9VWd<*)1RcjYNx=(GHBzX)rd$TymR%KrdX6z=gj+2UEy zw!V#}7z5{)XH=S+9^xSg7~O`N?D7F zmbjynyy+FpMQ2D+l1K0s34?RJ@d`8f1;IDoj_-ce(7uBE*|4TsuB8mD2?o;4Y>AhO zJc^h@+9aQO{*YZ{!mImM73=j*EWs%bbnW{Q_w=a#LCH%jWhz}65z)~H1BK!uBi~m! zpg$C0l0O{<$9wy-o4&33u2cOqh_GI?+cKcpkuo;om^`+eIvrmh@pxceX$bjw((ESY z1}$cwv&+ocpV64+A?R3hl?AQ+g%P)I?eW+rS5ZLDTs?445ToLHl;dr;!GRv+Hz4km zfdEzdzBxYZN?@b3YsrY9{btV1RQ#qeWYL2D*r-7pgSCD_FYt)}{p)!2e%?}zcoxP` zcgQn?ya>47ms6;=TzG+x&$$|ryXIV|>?wrwM0^C&XCvUe79B-%ctiyDC1=iTcG!Xh zN*gwHSU}IGwVQ$d-UjmSg(g|0^h?wjd>!Rw)|v2ty#)oG&x7}mgq_%S?VQl_L0=iE zVSg@Eo~o=o_N4KMCksE0j+eZ6J7wO6V~OULiAjm3;&%+|4@V{K^hrue9u|FZt(1_Wjx+BI^b@x4?Dqa3MJ+AIdh^QgQ-f_ zHUdf_ni!ge`zkG2qLPl(7o@N*h3uecrEkB9Ne-wR%a?DX!UW{ZHow}*VN!W;iV=zU z5)e6nHKIxhFwOv|^87n!l#2BiJ)a2eGPyp8BG*BxmO~^@@=a!iKr7Y)`^5px;acD& z(E>@Xzigh}ct205O75g%?5t>%n>aa~f7GZ^&e!i>h;(hza)}$GYz(yE;)M%W^J=Bo zg^TckDnv&Hb#)!((I)@>@Ze{kT+g+`zfAiO7HFppXx2+Rl~ayDk){g@#sH>3A#?n$ z&9{$hX_=nNf$qXKr^BeZ&9L)KNl{t+`}glf(YjJ13`W4=ip!TLl2!q&Nsr)P6GW6y zqz%gK#)*1!f@Yw2Tmh5taKKei(tg18-k6K{0PT3Yji)fK;~|N|q*sC3j!_zC_MTkx z#3f`lye!mdYf=5$?JaC&a@}-yU#Wl6Ch17C;f76{qBdNb5vo~l08u&Ye@PPlKI76e zJ9RGyQkw>SUA}=^Dg4_pKn)NeGGVvRKm7LKN-{+tr_VQLH?cO>6XK@C-XEzOQ&Rn= z3Lk<1+Qc_`-R|#Sqjf_|MS!VVSkSoH%XXu}z_Ofx+~JTaf%S;-OHd7oEL`ZPeqtDs zd|^wT8{hiL9@)XTah%y#rZ!I-?iqqt5&P?97v|e7V{jjzTVoRmZ?OP0?k!=`;S?)r zqYa}-<(*xq%!}`vXmDmv5f>5J0J|$*du)Ey$0w|&#u%s;yQFX1wrwQO6PsGUg#0p` zNIefVCdqCB^l?)tMZ{fymWBb4qQiAkKyl9F9Zb4-A|`(a8cBc-es9KFsI~YVO~BlV zxqZu)%T=szn%deZPH4;Zw>LN}Q>RYdVj_J$AYiTwwx8DskKvPcqHv1Vr%?bOcUC&q&KPGdCr;BDv`ct`SW5qx$et8 zm#$pl+1``Wo~Tmyh0zmd1tENMY1;_4OZB&aUd>za^}_>A@^e5_vPb?-!Tom!fzwH| z3xd$N@V1EfCP~Q4`>mDKcx;}i!aDhQcW$8nRA`oS(|#V+AJ43#sXXfG)AgL$llDR= zmZ+;kb85ch_dD84jVy4W$Pth`U3x9qF#xpKFF#^RbWo5o%iG%|QSoNOFSpWcrp_R8ThO6hWc3P3ZhUGU#B}>kXeb`}=3^aS zY4eXSLsU{yT`bu{fMv~2NRa}0l*s7X%UOKo zCgu+`;krB;T|bz^*h(?A!DYZQR;bhyzuW^}Aq#t*9)^UhXHB0rZC?tbk0%jnXO~bl z^|TbQ*?0gid9K3swHV6%=wf zB21#E(%3e`8YM&hhX<{4aVDTyAf|Z{a$wZ=X(kU%MQta)2=MlKG1zL;ZWgUzdT-48 zE4b}N*3!ZgL8752Qfz*Wfi)1YY zI!Nk>e&{Ga22e19LRt*Y9~~8iV;x24pAsO^&sltaD{=y2D8ZkayU*u*j(qUrxB&h^ zAYzqU=@2eEk?-uGU(1oHzu8O6*V2Y~b$+Xl#Ntze*}-@GJcRkE?V*iG!hTk%AVFa? zggdS;+JG$CN^0sBDDBKkqJ8ODl*1QX-sYn+I~qFb^QMYHz#JOqE7?<~0Po__$)y*a z%X<7s+mv-XI9Q9^-xoyV9Wu=imp(Jc_8LaIv=FTF_8%FYz}BH>lLM=B=xjvt!U-Q= zKw@8?GwN=2Y@~ruyl}~a1%IMyKz)vF^s!o7w+7+*AxQeFpO|lz?0@Wp@<_-mpuj>D z6iF+8(|ek4`plVOygj;KW}Qvt0vPLaz0dDXE`!T4 zjF%ApXQ9+0{B*YRDccA76P+B#6k3k1;Z6Sw7Pa68abMUM)wcQ)j{ompPp&`X)e;X8k)@#unK5rB-|^9`n>S-W ze9)&E{l`U)j*h^L0HUj%-QJLIOkI+F;b91t=A{p(_pnm8wVR}C#Sg=q`N=g&0hz$D#ot8(nz5b{|ME-sj ze;pMf=i&2A#PN}L?z#)af#AA-|C%SJI}}~$9TNoo^ExeDprBv?2(0ST%3*wC7j$=b zBe>Y+KB{WJg=&VzuG(>iF-XAsjg5&DgZmPdY>7a0ItoeG08V50*rA$#tZP3sarCLP zssiqq4bgylV$fq`aptGQ8m9C!i%$h;w`o9h`7ToLLR7`_Bla9bh{MQTW%K4`?Co*! z_wSRUKTLg}<0uFG4hR!X#7;NZ0&WQlxE38PMgra8UbRtSwqjUo3nk(_3rDmK%!YdG zd)CTXmnGolnPaR>Hq!`9hbS1Cntv7-HXinw=e$l5(Rn z?aj%*qY|d=OcsiSi9Y}SF!8fhFAwmdlluJwx!VsOjE0UHx~oTKJKK~7w{}iuTMQU# z3+2bU80Pkx-ZQ*07`bFgLzC(nlm7Zcleoo3y21}5&J7+pz>b-D+#4qor4Kw@HYhl? zEyGlmkAXF2lm`#iCSCLOjX>qXbF?F`ClvZTmnjs1bBufOjfCQ8k*0JeY;@Ja)=#|j z><^~>ilbKhs%%!x`fZ}xcBD22@eNQqO6gC#c`#{#@Er@4(x<^lQ9LYr4^}yg`X&xb zY@sz8NxajVakbqplBKm{ZW-%tn1y@exh^Su+5bQo8XE#b=tH^aOL~OSJgS|S%A4s z_Ms0Cd4B36Yy_w*sjD;n z{N+pJCJ!N+za9sBVhzn>CnZsFOWW@7`(qOyn*<|Y-&jsXe-Rp!(d53lY!5OPuJ*(a zI_DzChH~Jtq|C%h^+|4?n>dc;yij zwLkM>-LOrSFijIwblzF2Z+ivtVA4U92&@ob;%2Dn%}Zn1=ojBOl~usLjFDVsAlZP_ zhWETNJ$e_5#J+IrBQR4;ZA>adH+5frS0^=*Oe7Hd_>B8NAqPx#sx!x_}2ui-)pA-m4HbF@Z` zw&;mA5n+n^vBP>r`;<=|>(IF!c4z$fPHw-3Vxd&)m++K?^{h6d;Dx5&??x3Z%t*|T z`^fn|DX=cjIwM5kOy#252r+}VvB37#`b-H$!}U8^<(R>DmU_-vcL6D`k4D5K$R7#}h?r-e?Y%lw zdQHm4WP@f=qw_x!muC65&&;<6Hz}%=ddFVav~=;}h~&p#=A@x411Q6p%}cMKMBTf0 z58bAkgF_NE4cJWaQ-7R{Fbia;V4u(>506qT)}kyDV-mYiM9{IK67BJwkPz}uM;u>m z^$s|>UQ0`h9+;YF43;9%qt!Np-UtBI>|8f&wedXF>uz77qN)K=hZVx*gaMIwePf$& z+LdM7%jAy6w=R;G*E2#Y7#GIg;_8|~TEbYC*$8Z;{(WK;kPNuCM&6hAL7s_#MVSVx z4U7?U;0y9tq05y=5s7%N-JmGs(j?rN#jjKZJq+&~H^QMpthIdka+ci_7gz9S6QEa5 zDH>_W3*otqFmjjP4g#CqSC1xV$}L-7FCSqr2)Jtpa3na~99fLPHEsaag1CB4ueim% z4sG{#Vl;v2$KluaR_TFnRP@l%79p42R=M;8Krt7XA0dj!AN>}j*!xwgAC`l%>`~#s zFjdsmOMvp)16Rb+9tq8Nd;(9ZSi&Abg!N~ZzTn~E!$88%61n2>cUsXh+H~pvkyM6C zUPWD9T@^JotvJJUI^JWpZOa}gx4Lgp(R{POazR}2uBASawH~nr@i?-vhh*!Z&vZ&` z+l)H~Hn&0tKMGwNJ-pt&HZj$qN2C3nj-%g-z85p^@(*-R7dPm1V}(TXSL{f;;IkA5 zTBa>_*c5RT0Cbvxp&Spv!9FaN+)eL_HDat*tL?m|1&%^cOT`K9It2)-sv~_g9pPRh_*Sqs_DLp-w@W zO;r&>7UAW41H-QS_*h`L;kRthN$&K3N7(u#rb86c78KP~a+OP^4!q9CWQwE!s1O0T z41B+Qd5${vHOVrYcs|g<+co3T2Ex^e>H=dl%3;}-4KRJa2Zmh;A@D3a`h)Q*c?a17 zd3(~`(y^jpw$#hsERpM|3-+joqh|?@VKm~P8CVx&Yk}{&DRa=3ruOs@+Ddj=vkzr; zA_HllQN$D@A0uxh#PDfN`z&h*3dnpH-~k<1nY;+~q&(`T8D_}BEV8I&vLL48@*(xl zTb`5Wt_phl_HA`2yZ%TXcfjg>vUMQjs|7*;a_ynuqXq_W>kEX3!A1NG z%DCdRBi8f^m`o-p4*uLV%B&)YwpP2!j;M|NN5lT0yveV06yF~n#IybTRPu^6zOx7^ zCZEbeq z`YHJ|VfOU)@qx&sy824M<7otd8-PEKn3_g}JnH4BDuL#URRV@wL9zJd4OoRM#Dfv# zES~ag2>%GGVx6r<1@v}2uL25L(A;_3fv_ZLfFgf2EPsd7p>8D?ii&n09}UAq8{LRG zynJlQvH(K)?9~>iDtjR7Ow(P`AHr}>3qEZKYz!t^@+jR7bOow%E`% zEqZ+)x5`f``}y;dgE{7j_3)8w&u|;-7IsVs#qJmH+8Ye=pUqw)s{7#Z9Ry|?s^j!- zq2d*DToP;mkE-LcK!&7}k`b5(GY#ynV%`;sL0TOc#tK#$9Jx;M8Hg?yy#oW?^u*Ck zY=wVR8=5*O9@DoD_y-|Hq2N}mPNmWeUteDsjXXZos%515q#T|zBwc|wq{Xi+?*p2>U3;Hw$(%4Izaa&MLXRqlT^P4V^hP`|D zl2#HRDiFQ1(>L^wB*0~HP#UJtB(f2zU$i_0-%vv1J1OZI&0n+bZh($Z;MjJ zxOl~*nt6F{T9|o$zB#9> z4!Sg;tbMh6tJ|(+IvyE)$)hXg1evL5Xq0BS^d_KkB*gR$rsPay41atElshK!8w#)1 zjuUoiy9%rOVCpSiq08Urp+IbNe|41Tt4!e6H%PwiyvkE${k@%HtPprgr-W32mCVx^ z;1dWS{VyPy0utklR+e4$D3rN_RtV(MqT3rL098im{emZqG>e3NsSny_O(S!n3h;{C zlX}1kihH{7O(h=46+jzm{vqX%9{exJBxviR9a0`yRpH&XxONO~e2xSMhs#43bUPo$ zyT%SptC?zf+?$)0>cp<8O5hxdw{6;z_gP9e+0LnU01zop0~V+sSSr_mGHJa3gGtUR zr0q`7EI3#7oUpv*z1ws5-dnVCrS=$pp*69=PID@SA9e5GWX3sVXbN5eB_jgyG<&X> zjV8?C(A72&Dq)`))oG8C6MupShCs1r)km7Q)fcM*;;XXV9j*zCD1N6Hi8XPj|EvsG zp)!Q*wtR5Gy|TtIXP1#dW{@jI5ij3<`4)y z9i~a@)H1W|-sM>pymqwRvCXk&!kQz^ohmH94QZbpHmb7po;@!X+jVzv&Zs}DB<{#6C`(4Lk$YvJs6|8q)1+&kYBsR69 zitSXc;EE95ALusl068U?ZV$n8uqowA+vLMG7q%D{S*rI>kyCdNVmHcZr+*+8 z2Kbr;pAi!jIo9~z+(D!HZ;V%?UAz8lZviTMT0=&B3UJV|EF(?!{r7fyv)M5iV+F)x zQn>-6BBCo{dGlDOqL~HqQ!ZaA>NtcaQqThS;jG^q5n7rw5FQ@xSN#y03e{iaY(5?b zjEC@At0~0qMN=Srr-6sJHb7O1te7JsKi#)lCJJ-}!v$o2Q0Lcsg1wt)UaYdxKi6*j zL|{5Un!n(#t}egQF{@l0(%97cf$q#-`pX@Lk0ZNQt_I5cKBK38Dft^Bqf4=e2MLLl zeY=p$shqxTm)k2RgMk z(%&wnD6SC3O$md$uQIrO+RS*}n8-EeTYu-Pl~7bP#NGfA#>k0~BL{@j3~&_XJNCAv z7}n67CAI4896KsrWn{Fdx@p3Wh~F?5K<5Hpgu0*z36=Uoy?yuN#|!O*ORH>_{naL7 z7D;X5n6sAuqsPCn@02F``&X}DOS8909zJ}S(j1MCad@VJihA9yCcOsAl_Y|KCyei? z2L(Txy!V>1!9c@km_u7NL>V0K+&kM7qbckZ_ju><3rKHPy)ITjgWv1oyXrAVT%F8b z7i<^bO7zgx+yt)}TMT)~GK^Mta5jnKgRURZqIkB9^Ps*Jc0DG|x?aC**?jd^QBTpBv!D(EANv~M?*2A9#U0q#zki7y zkm3a@4@67SK5~A!;_Ug9se2p!AIXo`#bT{N$|N*J;hSthlGP zR5q@(Ikazm`D#0DOc(289ylFt8jM`A6T;(VCriBxm+Sh3>^INOQB8Et5>4$cFcPR( zJuf~aENrQ)Y$=shYKDe}H=!?KDqkHEoAPNqDb&$^I1J6#(t?E(dLEv}tQo%fu-xX( zhH4L`5|}}n$%}m22{3&7qUkI23vIqS^qNgNIbpp(RPhqfylFVPcu!Q1->m-w4#qQb zpY)Fj!cp{Z-dC^QLJYj2{&-x%!FSs+Q>Z-Tv6`)pz}bB|2W+M4lx$G#Le$xiap>cO zX()YZ#wdGRprVU<@T@CZI27)3{2#13X9sQ)_3yyaSAb0!rbM_rvG(sD+{^)fwiSXc zfTqbT7`3)4np>86Wp;C5Z)LN(y1Js(&1s37w*$0eFcIQbSFK?YO$lu84XB(;z(?4h zs7EN|BmwEV(>VbLoh*B=1A=?~`n6sy|Cx2<07Kv51oRsrF`AjanCsZU__-xnI zY`8ae)q~fsxA3s+(SL0I3(H>iH`CT5ec%MQfs&{muW zb+aLF&r}$k0c4zuch5v}`6t@@=se)Bp_%Qj;?k!8G%-@@`Ux?T?FLSKsMK$vASrh= zSH{ttZE^cvG<_t4jM1TTx+9Jt8f&AMd+)tK7(yaJkg)Ky1n;sMRk0>X@%Z{WzUp@S zc1l=US*sB^lPf$_XO#{3LWmH-H_RpORPCc>F(6XYc}9h|BHW2cSnd@9d+47bVlC~2U4pcGmKtpN;|yPVo&yVHtS$c10}%Wc!rClq)_)yg!J0q8TP2l_m`q{ zlmQ!od_Y8xl$2FGM$xaHB;OO(&~RohhBIhZCDF{&02s&d#S7@CoWW3-H|1Msfohx; z0zN^Oh{-}QUO*%~mt<8Qc~jw-IaCpd*PZA#=*ppRCF+gh3aX_y-kjfDJYqGdSeVZM zQ`^kKY#gQ9q`c3E0f9qz_ibdxLTwn6Nh}Y>2pEJ_yNx^Xf#%K$@TA3a3}|LaL>z-6 z>sHL`sJ|vIUqBL!NCQfoF$P4ftL5zMtT1z!XeqiOW+C$UM4x%v=?M+Z7NRovcWP-t zOhH-U!lg@IL-_%d-{aU_X=IKzs{PJ;9=B#iY$# zGx^$R{i2Nf4!H)Q2DUyCYR(NDLy4&!g6DUDOADUq4lAoz8Up!61AGSg21Kh0yH~nQ z6_xFP38`hkFoCKHr2Lg^Fo|sfK-4C+*J7YPxY~?MpI>Be1dj>*a~39|uOi1}tZ&4e zG$hnsEgJ5yG`*qzSww6o!ecXAg#{MIM4zJcQ4?kmt}T-{dl;YTL?UC76C$pJeAOE5 zC@nyikek>t;`*>e)h%0gU>E>h=Y^OT^Wn^3!ncD^;_0)#K!gON$FU>v`NKsKz=sB2 z?E21Ohyo-fCoUnOK4$XVt;k437WntC(}Ee-z!nQAq;5ueUJ%Sx3+%>k6@8zyB|r8- z4n0wq?|lvN>s>k%j&hW~Sd@O)?{~C&Gjn_ANC5$%C* z?fx}seeCM%nt6DMeyP;H;i;hhmSztRn30wnyC;22{ky<{jY=6kq1B;b_B~CP8oWO3 z;(qcLVuf_Xcop4#=g12A&}g)orI=fG8~t8sx2*oHy>3jlj8OSJrcY>RYtA zX=NpSF4f86wW%>u1{yudIWC{egZ~scC&J8R_w7?~tR0amot_*$!%&@XA!5>^pH-7K z;B2&RY9>V&Fa@TCN|Jf^F>;N#B$2uqJh=5FY-+8={O)TW6i9XU2h-NG($O$l6@I|Gq ztwsfd8J*9QIhLta7q_LFy)ZTKe5-!v#0qirWTAPk+UHaz3v)h-zmGeeay^w1lRR)k zLDePg4!7iLY0(;?iDweJqaOOTS4bNtSf%Vukl1V<761KkOj(DokZ*rL#`mVH3>n)8 zGVRaHWKt{lkJmcWR`TjjeF3y&79Z)Y-6R;tG5uQ9p7J^A>+4dN(g9^z{pBjX{4>m| z>OcEsuGl2(maz?__S&Aju^%Uf+_}R=hbDyzLfPy03nTWSdfbdR$w3JnivI!Lim zkrbstnnfd(PeE|sXL)PC3f-G=i#zvKMg>;3EPx}NKLo(I+bem}!~ueI*A z7;T-&>Kjdmst*4+ZgJN`!mRPPyFNh=C}UXL5Y?Q7FYYS2L!^*zeg5=mBX(#3!H_!o zc1H;eC27p9iYu#z_Pt%4h577DTDaWzKDl@eH#4bC3RZ}3gR_Poa0s>D^UTkI!;3efd*+ zD&zPei6dmn3@83o{^rw$iWk8fieKI4FR{MRp=lt=X^Y))rDXYqwVmmkHPct|CQdu> zE!{2ITg`&7aI9+jk4of?-BWC@5)>}g=DK{S+6nodN@w$qRnFIqS5C#pp+Eij zNwc&*xi0Qhb=JnLgEN~>dCafq^!F_iYjb~}a_mxP^!cm?$k|E^Vs_PcbQoxF+5g`2 zEx%zEN2~vG(43Ly^2`$&=YQ(k>f8U`r0R6mmOc;H!*A!gZ@+(VbeTnI|E%bo8PPdc zw`IAgYajEiJSfKBe%Ql3`i5|{i-e&B=W*YMbT`Gb4^P#}NO9t%4;l_~-xs=8GhR?0!2H%m-B#i#TYsp|`lj^JY(k z&K1;}1-cd-fe#v{9ahQ$M#g_9KeoEwR01p7|G2!2olVwr3QmE}lpcf;&E0RE* z!F7z5C^@%6y|mUE!e!76Z{+8h7aVFjxa>bzgp;+_$a&qonFjy$Ivo=+hWan;t@}KN zz5PrVD@{fLNv(9v6B}dguGplfA?kGg@#8_%xtc#6q*4aF?p$*31H)e~SKyK@@lc4X zyn36z$zI3%Sf^-YM*)^mYPAYLPAexzCH^1AqEi>!#;^U9rH-}YSQ+dd5%gU7gK$e_ z;tdrtcdQ>Wsv^?e|MB)jaAkED*qit1irG9lFEO(5d40;UnwDUTHLX*g-Pro%K%+;Q zY(h+U=I3(-HbD;WoQ4V&|C#A;T6cFwpHoG!V|y{z4cq>g#oDCVxN! z*72;c$%vECpJAu*M8W=JR<)P5Jo}xKqjDCAZ(TG}9G;qei5?I+V)Eq4xX)_z;S9%Gq)eC|u56~6xb_@}j2R|^UBJk7V%C1H zw6q55gz#GsDUG}3z|%stH*%U{k;D22R5JWPqB*KVoQ7V!NZlFMQo*m=Q4eU9rp??M zEh=<=z&_swjJpE1C8TjSQ!fapkg^YN^0y$<3YZXVRK%0XG#cF>SVGsi5N&{=yscT^ zFk!)56qCT?NQVf$%|4*IK)2yfzhI-AZ$!`K(VmaSiHXhUkbq0SBxN(dE(NM3d_Hvx zsIH+K{W@g$&o$iicLMI|{dpAlz{8v27L8?ksYvCy+p0Zp-b^WP)9P!!qGI~dXQ{M) zhCWV~*gLgKzJXa9t`<4Ll`FaD()&iVJma4tCZJM(;byam4rc@h4DV`J(C%cB?mzNt z=KC&n>dgL~8@6Zavf`H|^;zRnTwGS_tF`PukSAMuVwBkR+b;vJt^`wgM@z}681!q? zVfne8b;-5c<@y>sV{1~jzNvG6wio||qqS#2cm8c^!~t4LtIyMB{3^-V0R;Cu!Y=_85d0SQY53c)2Vi<-OycI9-RDJFF&E zRLR7I(})0djnrgnC0Qwbn1+}C%$CzfkR$kSvX&xlEDcZ&)5eoTzd)&NDNXf-411K9 zw+Te%WZO*9ZS#aVS_>xOZPr)&S>{M6Vk? zhKwiCwR<0lb#P=Eq&XC0G`s2Dk_Vp(li@@NHxqR<`AW@>u?R=NNXR*d-68epB2h|d zqcgd2K*KdnS?Z=~@eHW>uU44hJ3w++vZUpHvCs2ha~_We89~nMWV@Te9QPdqZtXHQ zra53htej9)UxlE zT%~Mcx>I9c^Yyvsic_N{ zcyrrCMdmD-$1$(HC(dE-Pf4k`+{D{(r^mUk`-#7KP(#46pzf;728%624zq1PpLYLP zc;SRf+|jBB$$k=6Uy`ml)|}~VZ3in^c>cmf7%W3(RD4}NNu#{|uHIc`eR-Ho-@$t3rOz7*K?xbO5>1mh^?(FYrfF*7m7AG#yM zC8+ZzW-{aIX9V2DF-6nI6l@RmM+AKFU?N5;GaRjsH&3+%+mKO8&<%TRCi1A<3@5$$ zSzok3Y@<&tf$c#-WW#DwtYG4u!|i|XrP7GO4K1J%g{gh3HOhPK74pL)B7$wFsKj}0 zgBYp`NjE&9|2+A`LV-5e4)g38kF$>jKO|)Rp}kQ!56zr*p5gbNU-o4 zH~|5g&Rg9g#e~xJxKvJK39jRoWCb~|>aV!?Mx`oIlLy1y$A6tX-+4EXF0Ti3*EY4B zSG#QytiylyC5m{BN16Ujop0LaZrl`mZd6`c_v3_~;8cE*|KN1SpMJ={OCS_ya{Kp$D)$I*xlvh>mSg20rvtC6ooLrq> zM}0aP)l@34ks$j-ev!TBvAv^COT4k>-`U$2QL3BKraE7WQ>!FlQSLX=<$aq+nQCCg zoTo>Itoh~MCKs19a6`MlFGNcEB4eJC5Ew$NJvB*oC3Urr&WJnKI#%+IPTa8(8hqm5 z#vB6dciT936f_gB%jD{B{Ou%!AVrdMXnD5nu%h=ERzJMs@*m~qR$7%0Nd8@N#{QSw z>&p~yVqogT2lY#$P2E>9uN)*zn}Dpt+6u!a5oRdcXu2-ZqEZHeXym5q`|IyJetG|^ zVH6J-?A{YaZVH$yFaHaK-=cl5*Flf9j!WJx(5F6vN*@O&iC5|D&VbV<8QlXEgW2`7 zLU-U8w)Z+MG2c!aVq(kS6xH(VmMYFWStrYl&N!0KgNY;E6uwW)0oQC#@nE&=ptX;25yCPd%*O`Ukx*6TnQlD+o>v%0LBNY;v8^8 z06?cKGTj&y#ODIBxr(hO_VM6L%&S~~<|TD`|4RHjis^uk{<=kM>e_VYwhB-&^U%%G zSR%U9+%Nhb9!jch8?34opWOr>T>R&6;u7s2haU+oE89%TL=Hoyq=MOF1}FvRHjZU; zI=R)+!9pbHur_qpEs^f|oj{H->Um@kKy*ei-}%1k?l&#KKW{J8OHUI7JuMHkk~ZiR zG}1sQ6pbgGpU`9UWW8Jb-ZyroB}xXfIFD=l4?Hop=|6bfeZf0(PKh7Wr-W=Zt1C!v z&!2Dp*6qV>K3rNH%Cmp(d2xJVXHINfN5f*n5-5K;CH%ko(j|D;2ORG7D9pUBe6%;Q z_2iSsE_@BQZSltn?JN8X=rdkOEsTJ-; z116n;su*)Ju(;44<#nIJ%rw@1!!joQh5-ZO8K*3^zC`1LSc8p-imsHe)Hh~BRkJz( z^#9`)Cqbmm3}#5=E2;|rbMmu*G~j&QPUvw&F+#XG*CTu&aLHR zxr>@{t`Ch3+_rDfB$qj$)n_F7KIf|VNkD2r+Ofw^o|NPGUIaxUNvX*&UxLJ2E})q# z3<^QuF=_`Wcyv~-{NwGDK&j~R>!^C=h7NV4NdR-~7a%DIYZ80db=XJH^@kIj4P;kI zX*)@GQR9Zf&(54zaxD$N0#(O!&seGeZ3owwK*%{x_?EgXL+r;T;m@p-D}`M2CpLK8 z2F4#vd#rhxi`aD~V`F2-Lgi1UAXSLmBq2t=VZRo+eZ%1avnY1=S~j{-Q`?3To_8c8{4b;aX#3y%&;v_OC0^l7#~AGtBlO`d_|a6Noi^7zuy*T2LYAEH_N;c1-DLCYr-1Iw&m zy~$Nx_DUyN?33<+HAh9=x@}xK-ei@h^?x`q{KeU>hWUf2T54T8|1Xcu8&fQ*omnrXAU*_t(u0l$nPXe105f??Sb)zm78+yLvh_GZ#IFk6*n_KXS{a_zV~Q*(aV~-PLKn{qf@D z&g%y7Au!lJ;kK@GoSy%bfzsP!2L6^K$+o2DQD80;mx3Ecfw?S0?{&0rr3S>(!H892~+VDB_;*uRk5N%14# z%5H;Hd+_lH`5Pt#kJD7VlGE;!7z}MjBiMVLEcZSM4r+Ng2(`HR?|cM_u%7qP!;WS9 ztHD?TG8E^Kl8Ag5vCP+THQ77~xNRsT>;TvR3FUmw!Kx-@lentS zB8*)u_lHE4>|6p07RUhoCLcgT&_Ez;6<_OJMDrIk@Iutx@)IX>>w6Fl9WKWIoExsq z&Ol$p0SSEeCHHk6xGV?(@xhQj#Y0Bxu3a{X1=h*VdB@ve3pgrplBl85f=%-phSCD_ z6}SnQiJdxiN)G}+cht{Na&LmF!5_W!sNR0qlgYzMS-ANLrtYxSy<&RrjhJux==ASo zdVwyEl&RQ7l3n1;gF~wdaZ@j{d-Xs#dGvGPDEQq*U%7Ine2<9ybEmfFF<2(Qw|ByA zvS!z_Lype)e_%T#;fGiJrlBD@Z38j8WTgv>%o?Yu{GoAj``^F7d&Xo&a^upDF6YdT zA~@f8f99IC^iOm3PMR|MxnJ{y`0%rc3CDUTC;*4Pdc*X=uo8$)NRVwmI0iDVJHo#@ z>;oU+o>lklEh7Kq>s!Q;okKE(fBrIBVn*1JXXm_a;A=ooLkbLbh~=rU8)9HUkl)M_ z{Wt08M4&(u9v9%~NH!(pF4y;Bs7lcm9fNCaZfytYsS?X_`W`qApd^vNXD?{-I+!6# z(7?ykxO2tD>;F8vcu>%V{5QKw@@;4qjy%jI3>2p^t{XdH;-U)}h4{na^JYyFn)6jc ztzDG^Yl4`nD!pa%&#i=>5zvU;Q~PRc5#Et;nx+ZQF`pP}tLXZ483jp@mj)L~h=pjf zW}`cI!65PL2zysZGi+ zTVJ;CuX1f2IK2~~CbJo5=MeP@ryxW@Z7o7>F_4?We|x!%ZBe$~#lXN$8s$QK-v)IT zEQTA=AZbzIku<$=A+SvR>SS;hp}QW!G>RW3BR3ijg@yeU!@ee+w6_;6)FW_EkEfag zlnl6%Du?wE{(gRN`!_d7f+9cwHOANVv;%l?c-4f<&3j^<%tSw}OS4tH0R>0tWIq^h zBS7f$mtXWI2o1rwd!eS>GSoe!L1tjK;XWmQU6AVplF5rrZ>5b-5tJkWM8Ufiij}d= zlyP59K~@yX2y-X$p+XTq6P^NaWZMQS#z?#)YBb4@=<%aRrzLOaNJ1 zJUA2<1DiIOJ)HC#^y%e`0)!etkB4eXjhp%9gBo#Va&otx)W3riCcbk0sAUfqTOBk~ zj@8Ldqn9EeqfP*M=7vF-cwaJpI9w>;^Mo^-4bGjhrSd-a%2rW=v92A)n)}`*15gsZ z^Pha>3*28Sv{0dmC^=EwBbiIGd{)AP`m#s=0hqX96qU4f4ld~5%*@Q-rM4hw7w4?h zh6)T~MbNY~x!!enK*Z~UAvFgWCt;3@#hSev7d-sF%p)$Wt9d-?&Sl0mU&0^MI)w=e zP3Hx4dA3X{Up$()H;CFJR?t7Tvy(lA67$|EwfHAxJ_ogM_A)^IsnA*u_}3B8SP ztHU&av~|PVw@sMCwRRMfGbt#;DjJtOT67SoIv7QpCG?-^DuvM@)wb4-Dvi^S|3ZE) zB3*qxQ*4I%M&S5f0fB<4W3ZQ~2kPGAalVO9+B?>%it@RT$3*eJ6!I zV$#l+5B>1^0<=J&Em2pPiWS(qp0pF z%k7(2d)g8Fbak|iSFta7rnVF%7WmvSb4#tux2Sd&?Old(^U|=9l2tUl-FnL=JIIAId$1a~eZ4^vW0t!6W z2*zAXbESNF|7*t&LQ(2z+Q!kuPZtP^2FT2 zqWtMoQ?}$DlGp)?FGi~KaMlQ{U2{vz%~n=1KOe=-)+(VKWAg97bkR55B#0WL9?j$ub&LJVuKmGGFW#0e1x$%X;lq!?0;PeE(Jqff%*WIGIF z#B>W1d8HSAG{7^JtfPhGQ6P1JWlwyQfMwA;m);IJg zJDHVz<=eA>H|snO4cbs9tZgEgYC6r(PSI;|7=~@k*ez-u!_`RgG+2%{gHkPm`)Fsh zVc&XO-Bg!(u0cCE7gG`_pyh)~Br&bW(ON3H80S9ZCqK@8Zouc8Be6X+G&I8HxH4Z? zM!ZD9$f~j5_V7vUVJH$5WM9HJfW@^zy#;xxfawSe0k4WP6Xr=rVT8?ugR$5}hbrx$ zczDSz!-0k@1bBVKdk*pqMVl-4bI*NUwTnFb03#8S(E_lFWVRsY)F;7lgRv9FU1;zJ zl7esntDA&fg2bK#+N2Ur1TwA>yvzXjq#Wsa=9$v@MFt+;GWYl1;&5@P(mFu;+}HC9 zL)a3s{ndXjYPOy{#G^lz>U?_uBf(HH_L<*g4~i75t_QO#axP?N z;MyQOiWY*l78eDHfphIODB89Yh6G-r0}cn2i$({z@NdUgQ^61SEXecy&-it9=B`bv zvR?@QN+twg9UJp{yyh&MVm5TF=qK3XJQU|he5B(X*1^m}(Jh1E42lVL6IW8Cl>#@Q z2uZ)duNRl8k94x4w1F;(5it=?eY=js~0`rGx4y8dj&=E0&H3AFP%Ti(LzwC+M z1$)9`e@C$@0erL#nORd=N)o{DlL&%^*%sy`TDG@mj);h`M9fRm5wW<=^;T?FzYC>K zF#`xFcZ~*+yP2Dta@!V(GjKr>gwjKol3GS5-Jo@BXjBCr>APTdVUVEvm&4i;d=N4| zD2NZURb>3b1_>uZbO(>ad>j*+-4&Qqlct#zxL46{$V$6|8WqS1qP~Zt4A-JIPDuAp z;N6bPL(Y=M57x8TA-r?vcA={NxOimjB|uh5J+-psyQ!N2jvRJLTKIxf-qL&2Q*1=3;3vF zZf(64?ILel*q;|KPJz4b9J+Fb&wBt7tl-MIiz^3}n1)H%c(41#l66B_MQl)U8)p#= z{*$lx@%{3v!Tk}=hw_VTEuaMrQij1F6{5cU&%Rsz;WyQc|CI)r{aO8E1@8hM8dx+x zN0kyIW8ytfRSI1&`b{QK6RJYCJVsJ5bH<24*GJgFBh(xZ7~blcsDas}jsiTekj^0? z^fQ%o9ho@Hrt7Gzrp7YmzaJeu>h9Vecf_EQ%#wBkR8Vow(^e=>ds`E-s>^+(MQCFylGO82Vu0y&S81yt-wp z06#d4=7ecO82o@SQfBG?@-Lh4rC<|&q+tWXttn$;c-1yYR3)Oq!otemOjWQvEkW0V znTDxK*5{o02ySq=KXS1|rgNU8KahN0e{Y-0TSu~~7A7ZUEEe*8CRI8{5SG4s>eW9{ zXh@b_jff==9QpvjSl zj*2R#>IFiP(%A++@IJy-7j$MbS{$aa@eD&{#0|r_d0(;uhDg4O7hFt)ztyZ`QLy5& z+k?Ofvh$i<_n5+>4Gd!7-*?|(xYjx|Gv21YOnnT8;}-EfprorhPq-8#l6rk@XH-R( zgu98bMafM-xOaP+!))VUSY-3e;W8@C>F1gE0BVHZ!*?9#@PFVqU*E$KMpOuY&Yvu0 zmhK70{(r&T@xyr#h?m14!iGIqM|J}P(mK$H_{cU$iL8Ya4Stwdb;@3iifjoJHV`5m?g^c z90jyW9s%>ElY=Ut)a<05nM}G!NDJhR-tdNQ&gucI>|z?-#2LU?c>euWXhxjnSQbe_ zj>*xY)TFV^0J#nJm2`eRQSWmV7b|jsLqPTc4JN$>bh5M*?mKxY1~tTs{y^=LvMLI9%cBl~3nMefxX% z^rFE4&7OZ`ul;@{oqS=3&Hc|`ikAdWz8U-ue48o}P@*33VhrHNrso+X-T0%fWr`OjJq{GQu|78S#)TQHxcc0u*VrD!O}v2CR`5>p9#Bjx4e3^VVBYv? zUX;uL|GzXWBD8#EyPm;pHx^@08U%-8^uYn`yai4=wEZQdC8XthX5DJYKxlwMfX(Z9qvJ~s>?GnL2g!)X_0;q}K30BYx`Ts@skttmUxBnWKfDf;RLtJ^-e( z0vkF_?|$#O=mNxh;xS0U*TVYOxXS!G!+&13Fy{FE9RnF|qoNufub@Ri(0XCua3cyP z7>ADM7;cynkNID!6nG9zH0osEJygs!1ji*=n&a9+fu9EKME<~s-7$z`CEH2zlrV## zH?6I_^b_^;9Z20`ovb9AmwQN74wNni?nCu3gQ84eBXu&PL@uVZIHfz5aHJ%C8Ys5D z*mO~Xj|8U6<|Gt=t-W^V&K==;Yv{XZxLxMX`<3KxLg9?`_y`r^s>y7^`7u*HAbZl_ zs=ILZfRGX-FkOo&Ls*^#Qe%&sLXE>XWtB)m;=PLWRCr^}pZF)E_)dCb~i} zxbL$HO)upK5!$*Dx)@Y}e!5!`SqwyK4GpZr@Bn^eb0~p{yk9XZxLI2}l&ESXu_tIK zPGd5)?cb^sYd*>=G^ZVr-PUP5(qo(A2$S~1@nQ|af?TIl)I7I%KGPE%^bJBBm3-YnX1s^;lpD6#Z0OJVCaGIx}H##WL zPdK8*i}CRSO0>AW6F$MNn|oFETPD#WoilgNoLvL=PCJWJ6<8K_@+4qcC`nBhxjg-N zkQJngg1^7J(Bopky4gQYS1S0aSG;DfyD+05|rMs4B<>Q}8azfXVx1LRV1`J6;cQj-x!hOIS z!1lOgpfy2HX9}M*gA)KZ3{|K^#Rb4J*!-nen-g+H&vwMwb@Kb`_}a$Cp_ehGNl)c? zCkC~GO?P?^YzYNTzwrqF+!&3&Vi4l zNF!SVHfT)-l6BgO(t^k}njr;z!@3q1(KB)uGK z@x4J^@wGvHn5>1FC%leQO(hHf``o896Fh|lBAU2iUe=SkzG(qSg^e8!?H|s5!0i-I zsb@KE_)&b0#RNhF9*Sr%;_ulB}6))~J0$0F7wfL|k^c&hxf;gSi(tD&2&H1p{X-^FWe8C?fJ>evIH zvrB|ffm*q_bMqZWX(2|YhywmhvUiQTQ!#Fo7ZrH-pr%A_LWIZ=5>#AnOV3FDco--e?UGGPoE!ThrT`V7GRjis7zEzc|CJ%$ycfg)qy9 zdpqznWyFa|`-$IvO&2&R%E49vcVX&km`4!*IjxiJ<#YD1jR$5Zd+v+%htSKT?cagC zlEkzpcSjji0HWrU;ARPV`}VCuWbvrPpfS&;{0X#Wc6_N=Lh6YtK(b%Y2{6?&(ODq zB@E@BT~A2ZM1K(t=OxVs*~^0iN-8ED{P<*XdBg@W1IO|$bl=dVB1ctpbZ#2|FjMc) zRRUO&iN*S3{BQrYy)9FIS*{8=b&HjiblX9ZLD)cV>n^g=gi+w*ZGqrp5QKleP3GNa z!u0~$t1RMXPZDavK7#S6cmP;3h)c-CN-`6Hq>!FHveAEz#|VMsbujsabx80aL@UPf z$76i(pa&HYSP4#=s_6zyOjD!?DbMrae2P~~gC~&5jN==%7vH$$-si$u?|pbsasz}l z;0{13H$rMtX_Z_%Gp@3_NnvQBLMwFv%%$B`WzlKF@3P^BMQKMgp+?!|Jx~P0qq=l8 z(8B^8^n|%%9^>h6AxD|e{6K)iBvl}NCm6~~8h@g=31VSUoqralg#twRN>|+uyA>O%)xLT+Q$ef&HJUb4&nE(okgfvQZ-9GSJ zkl;Xg8b#hNpV~4We8MF{5W}~D!XJ7Jr>%=-5(q94J_b|MuE-98mbZZ@iKnKzfvt&aZ~Yr zamL_4@@;aKMWiK+lT3h6*}t$Kk8K8=-yv)e-&YmWeFUCdEPL@C!v6EHnCbydl#T!V zp`xF+ zHp3?+^hveqttSJZ9zZjPkpoI$iHR*lrE7>&1+*_MU9#RGqaJP8t}$iq03d4{=4W(p zNncrOdw(Q8Tq%x{Cz$0Ze)UT%CJrB+kB^u)x(oEChb>Aa=a&UxzAPM)loM@GQuovE7wd#$=7~(b91hV`ZNa z**~oo%{uH1g??_2S#g@tCQBG1Cxg~9<3s}BcexT7b5IWDH^zny#s))*m;^bj56z4V zT-U&iIsh`f4j(b1U2fqXlZDS&G9dRw?qBw!hV=V>v410LjE;O`F7lgBjH^Sk2dAep zEb_BIkkW5^R)YdI7+eD1DYg{ryJ|$YC-rB z58mKxO1%4u(*OE{nV$j*fY)5<&T`m6JPtEn76$R?707hhgFM%~SNy4FeVPp8;k7PP zQq8Ziw~n8Q%8C)_IBkVWlITqGoX~y-SrLjHM#B*@0oM!8w9tw;!#HF_%Njpy#O)(X z=&{dA^yq}q3B)-iKb{8QmbIbG9v(=P=2o=CJfVC*Y6t*BCozX1@&LYG&`h}W-%A9j zLbYvP`*t98jQcS`=c*gwsYfx8`5D$;#uI=21>G>wJrUWvaKcNp>rF4pBaH*((^z|; zosPlYc+nJ?MP$!F$qAr~TDzaZXW0uG7}@hR1WH8^MLU9OVD4__wj&`AHQZRKMP~5I z;E=*b$Uj7yWTh(n?hUor9+cg31J$uA}0Gs}D|6==(A``Y+2Q@tk1SRB|QNHp2Dqo`5XgQot`XEAFX@xpEk?>}W#o%p32D3g`+{=`pyH@k?T`rvhxZB^#cq z)9&8flTYw96zlNd_TT&M;x9jxH(mV9pD)Kw@5Xy#V2!`E2B_2_=2;lDlY?CY-3!^N zXdB6XYb)(~v4&;vL!pf)BA%7~n-Gi^xpb&P@q}gawH6oVQz(NCR4ij3#Vn6U`T5$gpri^IaU(h3>CZK|JHOJO z0pD7ig+E%Gdp~b&ipJi0gne-I4!AwU)>be9IXDX(#(=X!qA#+Wm|WezJ%v!1)$*=* zi86f%l}7+TN^ssWu?3)(J4;6_(D-v*Xwxm|Y-;yN{Sy zfg0lXf04{cUt@+6@@}Du0y3w8w~M-6q8Hgmc!wlwFP**a_o!voq%(svTAV?@T}kMY ziB9RtvP*QacW~)b@Q;m~<%|7)6AsYx5(o!gDAFxOF#u%TO{_A>*clzm2$rXe4NV?L zN0$m}r33#_D{;pkUk%BBUV~Hmg^rseQKt#cTZFVKw2MyE!`j<~0vcTJ#;*mmoj&$l zBElepT$-YgemDSVvL$0*$s2CWC4ok?_*NohS)U9EW`I5=2>vRxf3C&ZvUna6U46P{U$V|vofoHi?2$53U9o`3UE;{ zHUUa7?rh2xdkkdZP&9APAbBrM3tYJxY9DeC^Uj2;xkJ0h!?bBJTH@OnU?gd5z8yFS zk4CgBBs`F$->7$~Fn}tRo?>4L<0c#&Mrr#>rWV~M9~Uf5E!-9RP&pS}SR^lR2KbRF zT>r4S0zi#A!%lS6jdlFKy4wgH2D9x^0v!XvWkq|?u|~(oZv;$(;ifm}CYWqe4jjoP z-INC`Eh;CF)*T@2LH|J045Wxcdkr-Y%{L;IFyzbmYksIQ|C*f3)SiT3eFNBrW`wr_BU#`EQ+}3u*!1?)sh zcXh|_yid-eb{Z_xQruW%^ovb`Q?aV$R&t{&1kWcMrnA^mUny$wJwL#yFd&hF__3cI zi7danS$@M=%O_Ghfz!mm_U>TZ5s9I=@+cu! zQXB{?81s#|Pq|}N+VJMq6DvHf7ZiM4KYUYl0MurN#Ys)or>s1PmdR3`OdhE&2CL1B z9|l_n%wBq_eA%g0FvzDip?}_p5hFTp1^219Wij<-M@F05hOF)IMFa8_h`CpZUO zu^h?n(mM5xaOv!#$~M&p6jIC_1RT)($J8)zlB)mTxH-T_m_TPc9FrtgR!ONE`o8ch zS60B+%byUAefrPcd##vUmLXMnq&7$9Gju=dXJ=}dC%i+aUWt=2oUn21SvG>ZufuWvU}?U^iTf9bZ9#=kI@&E^_7Ag^|=t9*B*Dy?;Z!!jZZ z02gk7IC}q=fukq^4yzy6M4;xO|0;seD}%U19!FXY5<9BC)yzLX0Cz4XpGfv|(1(OW zHzWUiLC_z@wnjHo@yu~xH{)8nz1C-16sbVDNQSLwazbGYH3N=(ECk5?$PM<4Za+Z4 zs13o(5cpex@tYfXtA+r3DN7O)CCjl43BW>LM>OTAz~o&b$qm_|6f}J;BEq>wBv%%J z4mz)zi76GD_uo+{J>m_YndigxERry7kI(nTNYO%BaojL5 z90Oh==@9;szdwhQw=>_zp>|r!hd~sv*@rV?GfHA;%{prA3(eq4;1yE|&0Gf9XnGLU zEz7RE4QlxvbTdf_v5kmOC24pVoWSD%0nZ%Yv>OdIZN278_65Zh&@L))^-QP&7jC>7O9jw0}r8KrTO6hQYb2MXMj*#@RAmJ^nVflw3GN&_)G0@@7{wp z{@tGquW%P(=1oDt9DlI~eG-kCCRIKEt=f6d(BMEyhk%KgWs6DEr{3)%zFzE-!dctu zZ^T$M;m4O@!IH}j6Y&BnT`HpVnRz87Jb|BkQ0OkZ-Y4cNo#a?MsPPhFSS2{P-Q?PI zLbv>F+yr|2{nBF^2coxv%no%aMJzSwUjE*fQ`bde6g0(RoqQc=XaD)jVJ}05h163( z;S||jN6?>}um`I`l|};lA~-fq1hFF}+g^kDL}BCbjpH81tfGiHls_A3_rbMoWty#;-TgtWdO*@mXTFqJb8I`@Kf`Yzj&NrhJ`Xb``3qGHqL_G-vg6yYE zQeHnLX)j!d$}kR#d`l5mAgq*V$E*WVG$V{egj0fk8pXvm9P@EG3b4sU+g*hjIvUNv zfktr%cr$cV;Moy5-qa4P=c>22_f~)EcmSuN$}7W(8i~;nvQ)83LWqM7a{bOo(5+9K zMs`yh>=$<@SJRD$ZWh1pY-Qz)@;(|hh9K#BOw5+0qAKs?`;w}vjeBF?y|A}m)X-iO z%scb2{z|4x%C{^AU{8+r$?NuH1_3$sYbmq_3#_|Fq_hDY7aC7Nmo$2s#m*AS~}*5 zu}7)m*)UbUN>}T$%)FlG{Le~OB?@N4HS$eUEv`vVf9@AJ<9XdiFXQLl!!$(}OvaCP z_ljz0^zq%6-nw-Ef<4vGimgmUBd*RkVXu96_MEb*Hx`G6tXq7oNO-%Q#4NKbW~(?= zU;1ApdhOb-XZkUtD)X|3*;)MqlBuy(`rQF-5KLhDgnVtwOG?%TOp*Df1-J^CR6@Qm zhoPFm)HNeoJc{P=0A4zz7(RUXkTUz=a;ISo zI1lkbRI!)(DxHS&C{RoAbwCHN7QESqkn%=MqFhpH^~B~O4eM`o2ol$IOcItC>ljNL zBUx-|E-5YUODdE4dA5SWR#XA#w{y{tJoFKvNLt7J-Js|Rs%fI2465oNUgR{n44JWP zS!VU8+Ntll_*3oLnv~T5d0;1zphi+k3W{+9!tJXKBBHyrGy04wdukjS4!moW7g4a( z_38~pbbGqBbCTQ5wDe#{M|B*y7HB>ZW3X}h7{w@`aU!=^L*}EE0kj)Q5qZPsHDOxT z3wWGh9!MDS^QtG>gC+%Feom5u3I=1g3j}K$VKStaNA@2#4COn19S9zNwzU6hc6not z72d{l&@biWBqCy0r~!Sr$k9xE9rLAc?7$jhYOs~)2-aY+>QeD!p#kEUfed^qi9k|1_eGR%O(rO!~YvNp|Sx-QEm)>`?dhTKR37{i6T+V&5O#+1hWtSBxbSUzrkfcT-)Ux)MQ25OoDP`RhDB2 zH!>}aR0IH2v|u(`y$2IlfF4jeZ1)nBrQ5d_Z5uorN4sQ^GuK6{i_wej2#oGe$f(TBzJ;ROz3;vZv@i zna1)Q0B8FxG?UtK%ElFvY8N92GOJSTLNB{C&8D)WMMiD?dV(wg|D4dwO8gAl7s|k- zolCwfP@3oW1|k)Sly$WL{&8(q5F`a`1XECMIGkH==N`?hEUny!BnU#3z?Mg%!b+CD z_a3=bq!Z(px29nUrctFH{N=S2bgiFfC+~nZfvJZ{xsQ?s-TwXv=?%)A=dfz6Gdj1@ zkE2EbmtG|=X(FVaWC@O;+e@vmL>MQ^ELX>elT8{aE@^{Dk2bXo`-4cS%MC+)>D<6$ zxfnnOh}}&YHWW!g24;=^dU|?^CWWGqg$8J@IEN9s=JPr`NS_!<)ATN|il7DIv@OzVb_^`9yZy z2K9+Uk3eUL^+R3i!VxBF0O&#su~x9IsI#c9P3Mn`+5ch61nH`-ftJ38cg97vnQV*rWZJJv90CDU0uhGr6z- zQ&uHfRa3TEQFqgehB;sE@9Ft;VE!DrK1;Nfo;w!e>cQW`pg!!T`zeBt44#`PgN%1B za*Dk9ISd}l)VlYAaq^7p0lIe{5=1~%<`m^(Kd%8J*(AZC6&$g84d8S%^W>3(1dA#M zpEtl#p{%=TKhU&6Ri%dk&ww=tX!6crF8j(Vucj=1Z7}xig4B* z_MRd$)RK@V*cU2CFbyzNr2qV7q_@SJ2coIS8DWN-@Q%y?I!UK>_SEDfo$LM1cW7DO}FQ z66y?qHl#piXylIN*z}p7U%^UU)e99rqqa8^zNe}M%2buO+Dub_oX*(&FcMw1(7kQ*sDGywLpG%_7;J_tE z9?yw%w>)prUf8O^3RRGre3y00wfjS4O(7P1;=VVJ!bNA62l<)27vodmly^%X^C}(*3)b|1RAy)bt53-_~*w5ukutpzG`r6 z`1TLG=XGpHvs;Wq;8g9`Mpi8&)*4nM;W)7lGZ`? zyMx+YDR@M`VNi+T*G8O`A?L zz5|RT;Y|mC<6oFbwLh7tGM8XbvgjCY+rETy9t$TPGDve6hBHPd{+NY9poK9gwOtq~ zL|!uShG50xzD@FwbgFS8>U4rc5SxR_(#QCJ)0>Dfm&~> z%%SsWbvdu}6&L)9O7&6Or@(^7i6|chQ_pxJ2d>QYFle54lyqRwE7wMN)L2bs7hy!p?S6wBRow+^wWnM&1O2 za}%CfGOiF;3wRDU8^wl5!yWrzfacQ{Cl2Pj74*l7Ft8$Go&NLCk)-GoiLslgN<1g} zEYmF=_3ENMkH^!y!hr~$m64PUphJZl21pK)tA!NOd}+ilLk_{@9k_bw$-VpxI50|iM3O^U_+M)R#|HR8Gi@;JOY%Vg6$cpr($z^Oh0ETQeyHwp ze8#ZQ5!)e|YmJVKJS`z?nmdf9-N=EDd|PSK0~ge!b0Z!NV%g51nHrSkh?^Jr^Z4;i zYHBBO7pVcFVETqhFZZSDcHA6?r@)1W!ASqrs?*1u#^!)B2%=cV${Me^+m#yzW)>jJ zNAx=8xN4YJY0Cx4hlQDAa@sT(s%Ts)u+zu&jy4(+AZTn<9X@<`nq$Vjd-s;fEOCUkF-T^8 zg;>v_=Mdg62y&`2`{t|Ca~?uWM3uqc1*(~zL&RvHYAvGTu(__krLF_?t^XQHtmn1R z(7|E!D)0q#V?!+!szdabmSQAFuvFHmtMBHw9f8$*n5K%w6jKD@3R)^kK88ofE}T>K zAG=@gOYNz(yJc0a01qT2gans8|cqbzCG<~8z-e%h6x*R@5hor)2W8Kk|UnPS93QbebLYkLlLtqWR-+Q(EI zU?E%}A}|p6z6-yeM%RFrLvU5rv!u*uo24>*4O^T7VYYw`h=LB*B01kLsx#P5Xv7() zk~dyxI$nM4#X3dzhmq;YhaI701qkH0{~5Xs%y(XG9O4+V_|vWDu6J^sWk(EtvH22~ z1~;s!$(+`MrO-TxXy92^3rZMRBS$MeYZXgK9cz^4r391b3_m77aJUyJ z+~Ox+x&!MV*vMwx#Jn0#K7a{uFYufNh;kE}G4SWJIJ7Lm!;aMHybS2EGd<@pE1FI> zYK(zxqr8SaWl@SXL@awC8`mEc(NcG3YJLf+Cj4m>15B}P`0d@uT-4&dB5O{M_~zpAA~Xg0c6G1xgE;@f(CS7akhZ&M|}6 zjmqSA1dk}<5`bt9M$JWb4A@Dy|4HA1xp7(;z}Cv)+9eNWmW1ZW`aMr>Vy3uP2~UyW zV3at9v<#qgqpw|C1Jr>_lY8(*AYcEgERQS*USrdm=3tI1Gq)PyRVTZ&5A*T8$q-lr zIorU$&%;HilxLa#1qhJ#^f4PzVbDm10sOeF4Dabc(it6_ww~rvNp9m52=EaVmL}H$ zUd(2|IH3f}F7SROB_--69gn=k+(~)^AC`-nE5sVjXI{OPdIBXQ*$xm_PJ@7G zVK7v!t<`XAeQsd@gnEfku;4}EU6M!J8;s_FEYLLZhW@$ODgEpPk0y21TJSYa5x%$5 ztAF*nPtkVO1~#CQL<%B=*5DILHnyoDo_8meX@4va1U9D3r&nw_&Pv%9UCx%|w2Zf>Xt4AqDMl^-WlI(D0L4 z`2}dvLJTp9x|xwucGwdP0V2`?u)`d94AV(~ZEgkKvu7mGb%uNgd5pCtg*F>S>fa&J zNoN8A9{pb}UWT>mAa~eB=;DED;+)xI@MN`vybdysuHiPqFJ}PW!xRf2t9Hk8wy_pM z7+P=AAKB%Kkb7?@1{sVeQt+X!5^-X#G9nwo z!;zOo%M~30oPUsFETid^9%TPAd-`eMn1N4bQpcL}L9fn)F(hN%fcM2ZF4h2@kC?ms z$(QH0uWJ?@|2RTiiGBZi>LM{*$J*LDJ-8B6=!k2ZqT+r>f_GwWEUhkVY_j_2(A5Pg zF%4Xx7rmaEx-B6g!LT|Ld{Y}FrA{iJdi$&lkJSXVWMkrgDS$h&Z>;MsaE6Go!f6`} z3~81N6U`9%z!dv-dJE}MQc_ZqJUm{XQ6*grE#Z>lK55u4S{1jUYBPl*(aPU3X?}Qk zI3T8G@B_g8sOpU(=WLp9#9e_mRweI{6pUAJqt@SE1xFG$Et!8gQf!hXS*_uxnPG#G zEuwk@0HXugNhpEm?e^MXhk-J4{1Cbd9l?j0BNrY{wR@_2_p?|-(l9{y_@!+lm|umU zKQ!UE#>{VSg3rOWj?stxfXtKL46R0Qu^kLH;RD3RMgk5lI7XF646C=m8A=#I>15>( zRACd^Cs#By?c(u9^H>7C(2`X`k^qW{0>*(EIk2P4nm$iHYfRvL0Qfrq*|MPOn${_F=l3UKJ5?0RaJ;VwFY?@7#-nmRzehEN#uyl&W%4 zbvdZg{4RhdFTq4nM@lTlf!1Igl@T*weNQ7Gaz?+wb_2K+!6e#6qoKm3flLtexu{!F z8Z+Gvtv%;sWQO;3?Ln)8&gW-eZw1u+b9jiGLxka*qdgR|cPFi63xjh}j#EXX^(G!) zy$DlZK=d2WB@Oxrb6))z7>Izd*qOdY0eCAG5Q%!`E?Ke-CQK#0ZCQ1#NxA$?D!r); z!+qS^sWKVO1ON{m%p;>#B>PgDNW%Zw66?IMcbjvUA-FX|};`CT^kxl|qjYy3K7Sy)`LN+rjJ8s(L zElsWJdNvu!jd@EssDBFc&_s)8z` zl&Y6)tE~ko=;^!?6K>O4oYgBfhYN%g?&x-b^j_LL^wvgJnmFix#HWG^JQ)e82fSSg zg^dUi!zZF!@%XnE->p-IA+aE@S#6uVjDP6X4q>`iV>ZC`S>4)}c* zVT_=3_9P=JLkTv=Ax$%pqR1#L<>0TSqEctzsUc}&#*LGkRX7=CIw-IG8<#m{zuA}2 zxJOEFVy04;T-Bj@-9S=(w8u~|e(3U12*xzZRMg&Ath9^mNGbgBUQqbcsrR`}=t&MhFyQc#8Ax~YZ z8B+CQMUzL)l)^G;S{+wF!CBb~;RypS77aBni|5KD@i{PfZZHj0s3~)OJ*C z*sM2D*W>1q1d;%?*r(3NbK@F;%iqF!l{YDv2KybdD56$?5)x=+7XP!h>Mg8R!n{OX z)*+Q+D}<54^K?UqSDf$BeG)Gp@gJLYb)VL^JjlrjYP!Eh?9t=LB_v893r$#NmLC~5 z4vkOdxaZb5Oc^2;1eFC!Ok5w-`%+;q2o&khKaiV(b`xUnH_+d64ma4d zShWqXX5GG>5}SVVwV*)wI9zkZ0YK-0KOirDnz{7o_V(rjMYU8%YlfSuRlhioP1l1$`pBOGq9o_T|M;62qV|;7!x5 z!Jvx6vpxQl{Rd#YBZ1Lco0%1ZL^WaOl%TRh*+B>}K+tN$g}=R>wJglp`9`_NJokKu z$00DGHZg-30j$Emq$LMz&PlGpZYw0!HGX;tLva(}8c@nBn{0B4<}V5V*4^<<=VmnK zb47CIHH>u7tuayG_K+aC0A#5Sk@_f&nP8?rWWJY#{-;k*7X-(9HhvS?2q5U9|UMhVUn8;uRkJ2VU5|5{$)7P%>Ak=kf64Rj z{4p2X7`fKP{y*>7G$FzOI>8)@*(*^k)Ah^D1l9t3xJqVlaQa65J-`}9YnxJoahTJR zG3@O|2e}9ya*NUBr3Z#m8_C)Wf{Nz@2V=$; zS@UM1r2KbYt6p$-2Cq7X4hJ}+sR!H@mnmpKFgjAGB0|Z$msmeU7fuqIA~WD>oMUnR zI*A#9Pxi8Nwe$*uya=dqn~z2a0!o7ZwC6QIR>Sp?aTt<_wwY}Gc;42C1=T_oyrkih zF?(?1gm0Xv4W80js*y+pF-Z6Y!gh%O9MreEIdwT}Q1Jhu?M=XP&fEU~%Q6`w#F&w> zg$zcM>||Pu23fN2Q5Zsq(L%IfhKxP?5++MXg-VnbWTzyFQX#ZlDn>;m{a@$z3Ufa{ z=6?Ri@%wcg&vV?fslM0edw$OId~ZbRunyt*z{99~K60D_1LOV$F}7Afu6ch81B*N2 zUI4-Y`oZ$%=u;{G8?ovlQaZ zsn02pHmgw@fkTH#M0)QxthzOjyNCAoKOY2+43B^6Vbq_X*lQmUKT*MBU6lD>?;OKR zj$B7QdV*YYXb%X9Lj%04_BHR3xu$a$DA$rs_TiE6BF$6+%Z>WGWj4;Zg*UXX;@=P7 zRdgy*Bb%yjb)ewj`i)V0_&I2_^;d0=^D-7WyusU*y>U6V^roI@ZyURw*KYRgW7L*02J?eg`UB41Xa5x=X%GFePGB&aI{CCK2en&BEjJY~a_yT91)K}Pn z3{2%$V6uvkH%Z>Gt?+fuEuJ&>lDNyjSsW`?r}D4Moxc3H`K~JSieM%zh8tPVpqrY@ zlWervV`>keY9;uzs>NPm3w|5*98^o;Rwq#VJoT^UIXA`)2#+bym#cHbP;vo(M!AQ^ zIF1{)BhIu8O*|iD_Af$ib&WLs?Fsolx~#LokZfcE0BEbp#(0sr?S}rcf2ZN#abmVq z$<)zhH_V@|{3)M25uTc7U>+~nfyhHbGzH`YDfa45K<8zkQU1)Max) zrf7(T%LKns$jlI^rAZ;6P=D1Q9ePa;ORaIkZpuVB0UtOf7+mk(JzE3)p+CbtbpqOI zG@g<=LSXRbj;-d6bTF-Zd9Hs%@b}qGtIf2^8QHOM^?jpQ@Up24K`#fJXa;<7X~q=~ z)WWadbEy>YXrunKKf}+Vop10JEEC&~Ac1Ifm74b1Axd|eBAs)c3&jaJR5%@-%elIf4b8bJ^AC^063BL!A(F z<5PKa38Fx6uh5sN*{=sgw8QahM%a}HETcm~MMk)%d#>9J0~vsijbxG_53)k*$?`;y z!5r;Mp?Lcr_na|XIAzL_ppz5-_zt*fzVTeVUQ^Z}^H6A?}I6`5-##-25i}ZEmdB3)f2BJ>0=G zJu_l^?W(sL^A_t{vepte4C`tm{xQqe!s;x)Ku1+=4D&42rgE*tQ~CHt8%REky8B*a zC7=0nTk0_I3rf4|+n1L`mv%y@w$YbjKl=%YEg<-h7On!KGf_xrh`#J2v7C6mWzGb# z`FOL;!r~%#x-0?3N0RguiS6<{NcGN%Sz1jY!B=(6mitnS->~hQ_}kUiV(BYG?ivjFZYVHH7dbtyv=z$Ay5~yD;wQg6 zduyDx3U3hGsVGJH&?9pi6rP~JqX(03#XXDgU>HUUaQ}<=k#j34#^Tt1@X(K5^cz9IA)^L7U9?`YXrA|@=t()wPuQGt+004 zP5EJT#qAuO>|i#wX~l!tY2l&QvrgD>tqN%$-XiCY4204mxnS#lXqzFCXYDKN$+lh#W>nqx}cCTdDRB2)hurR9%<7SP%f zt{S52IQA-opyr$ur#3-I#95<=bxHfytuG3n&-;M9)Zc%vG;=u(9{x_#N|7WuAQ$?o z{)rdtDxAyqjTQ1uCGszKPa9m$JQdzeZueU09QK@J!EwXsTI7QboL=2{SLf_mh6jSj z9n7>dWCxq_tdV?#aG3>zqUr&zjrQx@H?phQ?M+#K`H%D7GuJ=qW$^d#ASOl*s&?0W z?+D{b{Vs35oS6XICH z+$OB~jdgBwF<@)$^zJ9;!tch69C;Wqj0p9azKkRH#!cEESiEsln#TkI{qQhnN)j&< zc$SA?27TSlsqn#BGJK^|xEnZ8kk*;3)sWV>KKi4fzJnF-xBKPih<#n2o2)OS(l@&9M%sOJDC$6A^xxUVM+uvnxjhxtEeUtm6)z0gDx;A>Q_4n@EC(!Xk z!AqaTV0bM)UUDA9ZRH2VYZnZsFIN?=K+8(pw*0?`1=c#{XxGa}h^>_H zZ@#R~UDO3%d*^L7t~m$!Y}CQ2b*Eo8?Vh%%*?Nz)SQ3gmrYstOY}mTJP5!oPPTZ+p zw;Pu^Ff33F#Jx#uwP?lE&WSI}ZlZJZ6?!RKusLpYuI%-<>a&#>xoOYIiy>Yy4b^FC zd;o85vGWs0K5@VYNu-b+yq$PS z(U381&Bp^LLKFs4=;aB(%aWB!en20qg^-c>7S_UI#{#snJ+ z`x%AUmQ9=XQ^~S<3zE@6rcYb!aKp?ed(j5hZW*_I&aBR~8>|(v)YR|JQU9p|wNrJ+ z2Txy%XVHUGdFzbmTf2Xl|Fqd5Z~(gdEOn1ngqj3EVg>+uf9o;BV}>~Df~spcRK5>?ZRj7GT2V0MY}~g22oNx2mWI`FKxz&H z#%H9O9ZJoTQtLVg#1D4ab9vpQO!5V15?NeIB5V=Pz!G|$NH>-8qhW&2oV~}s&T|oj zcyyrk5iyGAk}#Qtc_XHzA7DfGA$<`gZ~=2b1%!+QHvPgEoULlo71BC# zLNy|;855rKi}vRkDjivs!Yg7JBtd613W>OIi$A9#y2lEpybY=DY4*`I z63pNzv2@=RXKwab-23sh!3}R-ZO^E!|Hu9J)}uJz#5lJ!uHudT`9VKNb#8IB`lc2& zEw6sD_Eh_pdfn~6@V(;N$FS(i0QC=sdkiDOFOPqnynWM%AMNvQhZhw#NlBUFlyfe0 z(!L*NT`Qk*X5qzeHvGQ$ntqo}zYqF;>5gCBJr;U@bHzu0ujR9nH`n`k580DZu%w1} z!C9ZWI!oE^Y1TELD{4kR98wQqrrtP3go$WCG!S049XO7$Q|@L{R&}qsjbR$NP0uF& z_t_}RWPwg5M^eDx@3~0Ri~DZnUl)80yS`hQ-RHc`HO@oG|0f#@2w})KLh%J^7T|Hj zW_^c=*A@*z;wUs03JY=xv8*u}AF<#5$?(98(M+7Kco?9nSu@Zy9hZ=Cly6GkHddn2 z=M(!a05!f(NsxQP)AsNpQ;o!r@%FZOg}&dtdsyn_yBqUOZF;F|7$Q&bS7PTSh^VT{ z+=B9;xSwk8yUY~xt~{e+BJn$Sux|#FsqRMLh0y7T9mWHzX3d&Aao*(w4z-yx+~nTa ztp}Cuj%PgvQ?Xy{Ye6%rxKAb&5Jy25m$Sx;H(Q{f#716v{KT@T_DT3rY)$lY)HW62 zkLnkO#Z9lyML5I3@WB3Y2lFAEZHn7t;*afu&rgenGlg%x6aA`{%|!qGuWlud^Ul99 z(YlBIvJSPAdLA6@W8x<)e@>tB_CU&a0&cZJ!}{)z%dt!s+lK~wVEjJ(Ef zZEg9WR&`$sMmNPj&Elt(7tR$FsZzMG|H~R?n1%wg*lN#DM__j3LL(vauZr!st&;X3 z{&zu9rAGyZgoeexU?nUin6%<5Ky>PlSlLgox7uquvHh4pE~8CcVxj2Cr4ti0n+ABw z)Tv~rKge|Af5ew9WaA0EF2XVZJPChI=DG@Zd%mr-=*@74_)J>vP?)8nwzM`B@(a=+ zlksKe?GJ3Z{xr9!DAne2FPdMD+~5vpUo4ZR=#u~V{J2d3`jbNIw(jEw9Wd*TT)9pgEhrRK#KNWx1WL(jitaFXD2v9lkG`?cAvF_fgP05p-v%uCCn zD;6jAjA@M)@vi9jQI!q{Zxs=CYPZlvgWipH`T1gW$yWClbsgHKzN#&vPD6C6q9T_w zR1{fIlxMQ2Fi47(Sdr3GI2cchNrO;m?2^BG(&D_XiS1%Mcm1^JqznSzv>(0QYE=(p zXt$1y3ohgq-er|DMqV0j#SjSNiS6ngKpW)eDEGJV zyoa7JBWD}8K1yFZw$k?mNwBT4pACzq91@!7H}tMqFU|{<8A`12FfY}5Ai7y$cd=_z zQsA@10>C_ta2nc7z5qQ=B@p>SpHo~_~hQ)eViNUMm>0T^`Yj7`*t!r*J*SNK> zxP0KDB3zQ32K#PCM2wzw+0VXke`_*VEkb#<1Pc^{W5s^?)7Q|UChIy*~d5qJUQ7`NUfW@zX56G{X5TSqHoEF&d5EmJ3t(yxfx6X(x-NrlhTEn zy90HY_Iy}R(jjWhg^5_)l~a8x6E~Y(Ve(!-dHUTaUctxgj>v^=FI?=eTK50=9*Vb@ zc=E~arCgt1%9{=1*2_K``t6BNbH}TL`3^dyQ{(AZy17}F&ToSYuggH*((P>&frMx(? zs{5B+dF4fAFBmPB{Dm$auU*hFcY||(`oLfV!y73X*k2UTBL38{XuPXGaZeUOyFup=T900 zR@8Y9kCw+3ye5=;N1Rs=rhji_aQYWodo^I~<~L-o66?6xkgHM6J*0$CS1mmA;R$i2 z$&Am-i)P3(S-nLcegZ_hK?c{o_4yy^SV8vNwXt;tnXh1PPgX3bJ! zSwH=b^}VR*r+l~>*N6v(m_-Pr7NfI(Rh3Zj1;+9El0!#dkGP|7H4LTlWRLP~@2HRy zutB=ZkL>jPUPs(RJX<{B$O}VX^LB01oE(GeQxeTAehjQw_sjK5a#XDR66L4_1Z=51 zDhFPaEP>XcG)1=$mY2OADC93f>x{{ExZvk{}QG4N4p=71ndhMVf3z~Ma z1@M74Ev_a2A$yEee>Q`a2C3ORs;)lORk|%DFa`3yMqueGxT2(S8lBH^JW6n-qn7RO z)5gtqypL!cB@qsn&S+C0g1YxA_2KM8zD4mg)4&}O1OE)o< z;(=k>pNHR-fUxR)Clj{jJivixJBg!B?<*$_^1rA$?0lXxX|B8mJFHgC;HFd*_nu#h zm;w~w@R>9B|3&%^kA??z>%{UJb#sLW$C}Mlc^Y4emygh-Ve#w`jFkxVeF)&mE{%8m z%1Dp?UQ9@5z@v~Q70xR6PVH!qDiQM7QIw}w9kmR5i#L<4EHIRO<^Orn_=7cp)=0b8 z`Y}#>gz)iSDHn}=46u%fJrMB?uZ8kD@7pW8#1F59rlJ2*jC#a~KxL%j5U_nzJnAjF z{O5~7XfYSyzqrwF*Ss53Ws!qK-iZyQV9VU7+B3#*3}B`k37y zU_~wNCl>{K?aPNJm!;bln=brlncKsw&r~q@A&P8o?1_jAHrN*~fOxv~e^> z4>p{^U!eM~NzOOshSe>JZpfvBgu7+sqv0BsJ6Q8*3?rU*x)^Km?sVRVYgnses}~2O zeyY2B#DW#Kci%oZrQ4S=e+ULWZrs(3O~bCJi}2mv4io3sao@hKy0q=%_xG{yf8NLX zAPtxPW$U+2+4{|}VRQfkDZ+H1&Yy$3=#((Vj2b@tx2wq`Yyy_2*ZkvWKFOJ{r%J}6 za5Ikg&O80$JCN^T;Ed0U(<@3(;2I6kB_2+5)cJVZiF!ri_!u2tTSm0Q|I(~r?ZH}K zeI=$u15F*wU94FxOJ~JP&ZjJy#cLRJM?eG(K z5`m*g4$Z3{ffvJ4ko<6NAfF!d1%f#=Lg$O{UNvqvf7MENY(h7`JKHWVp4>3Fx2kk_ z-@Yq=b8*m8_RTe_@j)o@#adb|uAdY)4C87sDsjjZclvq>|53um-QE_|kYfGmuY^Bc zfDZM3j%0(*Xe*3!j&{9Rh93zd)%P)W8W4@SqChT<19PqWHSSZmnXp{e(y85^-{-R8 zh?o7E*Z=tJ`<)aDgLwnoxlf{puZ$~87x`UZNEPkC78K>K#KD9~)TMM^rCA>D>;x-} zCPI1IxUI^nYACP1gPVE+=K*{6NnBfpzFsq5Eaee%in?-MZKLA`*Nq*j&3)UPn*m%4 zDL6!#f!>spN8VS2Y$)Yevo28H?{G&t9gHJFBKOoO^h=LhTA1|qOD(IAo9&8TzwE>! zDu^L%fHxEQ{o)L-I+KF7c?`VOe(SU&CrQ0a{sZ?2$Jwp=z$m0eNx&0Ys4Yy4LfDaE?y@@e(j{mA^2Ql&R>;64dcRVmP2c?VEFzUo2lPszNt%fkUQ~2IkKzfzGi{IEolRLvau9WeF%$HTh3vTPiGTXyD?Z#d7Q*OfBa{OBza9 z=;d&Eee;4BC8eXpL~v!fc|W0_3ew1oVq8#y?MxT$m@#bZ8BN-PvI*x?R!`Ech+Uwp zSkMy-HK3(fdrSOLn>`DWavKg)E*uNB$rHtEGbSe3U?6;U8qRLJZaP|7;A^i?k4m>> z6l~My;=Ry%BmKy!ISV?Qdy5~?&YiQ2_YahA7D@t z6~}*5xA8QX5r_Rv1Vs#hVn|1)+-YBF4ds$z%97Q61MQ!A=|ID1MYT7Grb5{<-2Av> zV4wL7ls|lY`ewy6Onvf5 zCiCnps?inr`pL zU!GuR2wl=W{W7Z_`Bbu@<|z3JJnz@)xBYE)uPolv-tElj5Z!AF2G}Is&-8$eGP4qH zX6-#f0tzYW_F=2<>#5u>KAJZJ%?uh-7-UrhRKvVSIt&&i(qWuaItM8`xZq`3UY@tw&!&gj~+BOZIWM`JX#W7`r$Aq z=pg`a?$zn;nLT6eXsV)|sdtZ>zkB3+vzBj~#Oc8;w7gAUD(ozV8C+jicY8Xspksc1 z=AERJyqwi)7djC6?^p)~ii}wfqI2Sy__g{V9jSS&@kE(|Hd)Dgpn z!-8{Uu_4ePX*i(rz*lKr=zuE_$_Dw8~+U^m)`PGZ0MXTS9 zZ9iVSNLlH>BZhYbqP)>TlLFYjg#@HE6CC>>6QPof8l$4&@z!5|dFtuv%QsFNS6L%< zm<1(|r?glZFkexmTkwaG6G`=~$`>-DF zZ%>O+DZi08DT&``I;6~3reTqnPxo3s!sTv$Kww}5&TQi)*_!33bNZ$0X*0v;Enmf9 zLEthJHi%h4S#e)50c1^WsbzxN;w`yJR8FJ~G;3Adw(Fmru`>S0UN)n}{)KWbI#s&91a^#3ObkxJsWh5stGHUPI zE4LDpRV(TXWmt@HtgC9Dy_@XIA>kNk|MQSw+yK!cwA{q2VgxceZa?YdxO|E5tDb%@N@|AMvxxYDd4)xw3eBHy zIS_rMyfOluQSKZgOxm>R2Zdo6$n=2@L65}9>pzgd@J{?h{F}$(yRE_x$w(S5_CXRb z`l{8^f|Vw_0Ks$o9FJnPffP@(akW)B(Q75` z?!9it|$$gUu!E;$ztWp&Vdo31rtB73iKaPxA&$Uuo~$^v5#@yGPf!^%v8J z!j}1TKgHjzyq~gUdnAq^n18Sx*XH7uRhh&WjInVW#nBbMl^DgdUzRj7PUQ&JTWAh% z1$1To8HhQ7AijL)GQEkThln#l&r!uwE%RR*^FPvNnQ_#hzd$73??%1&ZYJ9& zSGV%w!!ukCN?4-KzjH{s$)0^g(&2W_OU~xjHbA6tv2rjs&xDKJtpJHvzdGPk(LQ{ zQS9=?i%UCI0AHV8eoR?_dd;!$;6CzNyB5ixU8b2u>+2`=b9`%GYC%<3BqcH~wr|nm z9J|z+2*IXKZMCcBerzia>bL9KHEEt@mfXG!mKuviRqp==B#bnvTOK(&q){%83nuRb zenN;6g2I|_Dr_JjGUi8DysH!8deW51-gpxvG+rN8DsmaI{*yg~^z2)w&2Qest0kWi z*AlP06tBTq7WyA{QNLrkG8%j2e_7J%PUtb-rDGM9URCz}I1x=0w{2Xh-raPJ+c5O+ z)EzsQBu(6DQnJ`Bd@e2!QDtcbxwyhk-Wym;wLFP9hGT;9*Qnd<4oy?p?6ggz_S%=M z4mnC4xV1mJV(CBuoy(uw znF%bJ(?IVrzP)OApLYZo#5g@?OmyiMx`eX4vhslZ-~aS@^<(+N=IKLEWi>7@c4H6t zDyX6~NH7G+B1vp_+Ct*{rj65}W38B8G0C1` z{Zh?Vejdz9MU5iDs5UKy4K$trB<@}+>zwqo(BZvIC+=_l<9)Eo+#koCv|t)ejwp!w zH~!P3d5Yib3l9M+XvET>dCGp;eDe;(l#&pYex;#G$B9x2U6DjZ-3GEhg-E2>+K2=h zYQCE7qp&$voJH>to^xmyc2esx$4abuN!UbPy0Agj+6}7RV1DDLeXIVn^J7q6H>(?q zd5tfCEb*~4_lD|Ndz;>Hh7e0{*-Bn$?b8e2Gd|j`Vm2gGsjeO$Dt_UF+OFmO&jg7diXGnU+?8uB&t3U1{>DxL*+kfu9);p>J1}lPRCH){vhqFC@)cS)} zcQ#DKGuiQU$m1EdTw?A5B&>xmk&8-Ea@7P8l}Sx|J8B&kvos7^TSRyuj!5*$UEsWw zKdS2?_O`!5Trl$FgOv4C`QwJsj5?+ow2P2AxLz!ztHqr(uzXzVuo9(=@YxcA;JvVa zX0P8w(PeVgSTE}j9r4KTzyE$Jx^t^hfNXGP2ixfl5SyiHf4i0bcFAi|YgNq94SV(& zT9!hJIV#GtuDV}B)lxJlOM72q&tI+TumeT!rmM@XtZzJ;cbJ=#Jrbm%jy~1&&I2gP z=2pglPk-62Q8u@4Zli^l%y&5#ymoUb-Lb75rX)19$GxpDJa}2wNcIP;CIL`&jS%2T z5F$eAN@C-#kC!?|wswNKYa_=)}OU|a2Im4D1 zDewcL`)Q7th|3L%KxJz2G78V6-h8?RA!Ts?B)0R?5wujZb{6O1 z#k=|WhkcJ0ga(1@2dLc~UW&qzvEA_4R8MCj12E?hD~mbCtpzx))OP6!ncW}!O-ZQz z+*7c%P%t4qaqAV$gj_JEB3B_0i80?r!C_85*Vu_q{Svn%=D;_eZHQ^@iUCgu?jmB| zfh^odT$=H@@N`E75=zn~o>X$Z|M{$}_w2VTXFPK>KJzXW@sx)3Bijvy_4620KgE?m z85>w8b@fR&f`|dXkKZ-F_azWOgt(J}lJTW8XA_FVy*tn_y1xSk*N4-^(gjmZmBl)2 z)I*(Hj#gJhG*nc?UKa49*Z_*{Bp>W&zFJKgRD*vsle22f#y9GfPk|D2J8U)q@};R6 z?;x;ulJchQb=Tt+oe}!vj@tkSK}HE!W`(3Cf+LZLt9kvM`_GvhT1?6>A42&yXKf*B0Fg@Ds0s zidRU0BPp_9NRd@IN`Hz0tqe$BI3iV77&qj*w&@+TeE2~!p?%?8S z(3qtbyo5l?tbk;;=1quQVXY!jQ8^84`(MGT1#Gnlg2e>@YqWi6U4x;yz z9F_n29K4({suiPiM}`dnMODMZT}#{pmFj?Ba}@~~mJz#A%!c|68~SCuebya2sDny` z8YVJXYadpz_2Q>bg78GyLuOSM+mL@=!fTGp(i%c#?0>AQCCI$qd@36yuJSlcBzNji zXX8;wlWFxe@H3yJ)^^BI+ZE5yRvzPM8juaI+*ereT*6Fj-A@q9-yqx^x&ZUNxj?_Yqss& zt@T$rbMvxfy&yMKHD5?MQad|)w#Z>tzQd4IB)(RX_?}TwZX;#G^cE{+E~3N7kKaN$ zx`XP ziq}^#nS%15=AfY4Fh0RPDCJasCDT*Z2oj^aH)I$1&EK!mM~0)z#DORL$t$hGOS1T( z-`hMmowNBD51Rc24%6D>n5GlqaR@IJPtSvSrn)NI7sBJDGZlp!#LTI3D=g~>ofj4| zutO_@>zd}K`QN+JX*;{!oP$wwsAl)~GliOYOrc`tfHPONHP;+n>Krh8*3am;?;NWm z9oD}-uZU1qqPqkkN^GR7lD4Mr+D_0H3?OoN$CWLr9&<~W;>z;wKThPhts>|KS5scK zPe1H657UMd8%E5D!26jWv{kta%CqPJu2opwqr1r=!S>7xsp&e2X70e6P+NU~(~ zXOb@q>nnd#Xe*IXDstUwx9}Cww`A3E`^T^cQ%<7hg-e zJ5=~G;Afw>+$<5-_|$IY)l}Ms0ICujsl>s3;l@f#Lyq|eB}5^|)Op`yX8>>Fu!YI= zImZF9I4UzFcJo>KC7okCOSuHCZ=Vs*3eW^j@ibS^<}sknJp^seP-K)*R6cR8V#Xro z>aJs*QmhjcAW2($%GPN}{2MpsmeOs@c0h9}k~OhGpFJr>ujQyIQ+yRyrcXa({%&7o zPpWfMyj0Mh%hIsB&$2J&k;tNx4;5PCtE~8Bal(O=szgj`HXZ^RDoH_5C_r+W2rI(d z5ip8*0h6B9qSGV8D4(DC#x!h`faKvHn4S=|$U{NV@jDv^8_EL~jUvO{Cn!Fz#m|Rv zZh)KHv5tB3=8fU5lwREf49_~F0lxL9=kzd%GVS7xMzJBhO@ zGR=EWUrv+&qr9_pl4mbusmC~Fl~i?{2CTvqm&igylTw1|WkwSd*O7Fwns&2A2QHlG z(xf06X37)I$~Or^cJ4=fW#$d>>szvTCUa}P4FP> zkQ)XXotM3P-<|0w<++iyw-VP>8;w@Flqf zG|_l>$6WuCjkTP*jYvogH7$GISq{RStU^*O6W2p@KDFK<^;Dkk)U~4_VdwmuH_?s* zDL$;im*MHpWchFGRvN+sa2YmcF(rE55q7-H6EYi!xq6Lq7QdBrmg(cR>d)_>*|&W9 zRO2l8Z$v=NsSc3+liAxxbzR>)T1kG=pe()f1Of0+$4f35^F~tfvp*q(2nShAIWXv& zL(ruBB@v@3#i8)gqycs;%pMjnF=8}rl9&oW zX4#~)aegN9XGgya7ld1ge<2}-XR&X1lj$9`qz;PUQDVr=<8=)ktv3D$XWoCc$t0E^ z)a31p3t~+`N1^YuBrtXHn(NoDNqDA2&f@5@aAk(y{>vwV?GJ<{J4pJfM0&%2NQqn= zCdooz+D`WY`tS4O{gP~Dmps8P4;inZ+xnFbh@xl$L&b=2N&57!eVS&lf=DjT04@Hh zz&_kH3dLp7k}Bc$%#FfAknL8f47>U#dg>c_itIqVk3}6S-%v1E8_dFFMhfTp&6VoS zmK{x!+l~LTT2@c?C}W~QRzdF1$|v?E!p+&dVT0{y{gW_`kMeL8W5t#hoZb)2v8KlJ zA4^Ex>C24{8tBvq~v7zBob(<6&)6>NPcq3 z#-Q9h?U9QGF}>8-L5#h?ko!g~Xqea3ACqU7$QeePvo=Q^4OTyw)YwYTUU6g;@2mz$ zWalazpq+T)6h4hiMg4K1Yqpp%vmOr3p(+FKLy!^lN}_vkQv8q z*@LIb))MYN?0duU8GJCX+nz4+$bVHLIm&rXDGLO8wX*b+^a5bmIBzdj$qxjL~l3W!O@hPFGmZ^r0VF&)p(t_fxyQ9NP9y zzWUeYJ|F2N2W3+hw|Gw7gn*+*2k`CEc5X6y%1QLTQ~X^=-+>>|(u8Bf{i&@{xg0ny z#ND7VN|rPe|o$?%)RD3#6d+Bk2uc`z&M{isLCX zRWaJlnq!#IeEn3r!8VdrpeT`P-5PxTb>jX*wYqQ5zHU!;a6fvz&4kJz0w^TS)RMoP zo!a1F#O35Y`9Ik#jp_zG!um6t#dZR{fW5IK6MY!t%tuO8DU^Qb*e!($zuu&HyZhVB z=KTs+oK&gg2y?PfTXphT=6ix&Na7dAWc#sZP zGz&;e==xhbu05#pl2}0PyVSaQ!5_*sH%7VUfG7|?=)09PNo5{lofF|UyJ=4TtI%HY z4fjO|vc*PosLKygG?Z!5^Dt)CMM##EzKPA_$L9Dheq`R|!-PLG?aOlipu{?@0~!an(bv~CTxAdt&g<_)g4# ze=w}#m34?9TK+wk7i(m1>k$3r@Y=~EgFGv5pJjP3v)gG?^Hy=wH>G#v-ARzA$wjc* z)NlXPwa$Hf8;a%K}T zcVMBy&aEetal*kOQ#%)r4y(G!KIx6e29+bMhEzxKu=`#;_HloE%(;l#}`+JVp1Z) zHDnYtK%>}1tWRFGcCAT4CMItZ=S`9x`U8PK!rTlf1qf)zV_yVB;e^$xnsK?Qdr;in zQY9uH98|m~Ncep`Y0gNaJB5YTVbUZ0pYW@_&BC=IEa)Pm+{@GpJDhbk4o?rC6_3%F zq$%J(d#Z@fq#t+Nwk5N-PIFS1q@-oly493O4&I2n^qZmZZk0F&&R!=sV&S?G)EOzO z^^7-{y1z49{JL3FC$}t*w_UFe`uY3L`a7(@42!j1b7=f8z3+T=*gAIjH@^&<@J;B# zbBRe?OiqP&y?Hh0m(kXt`OXoS1HPTG<%goL#(#07dws`RV@(!T+c~e+A6NAoeLcNX zi>n(-${%@urQf3FrjjK)eroO!di6=?c!$3&`%h1gQ#9scB7-gu&F>xPY7dP>tt-K^ zieuV2J#j_-dX1%6crj!(dAYEMPQh-gta>%p^f{Rt-Rwv$$rjU+q@cp01q0u#q@_X1 z!@UCU@E4W_;#?M&okVjoQjw6YCXai@rV0?pzfE1#qIi`p|X zn>ZKQxe0~nB6cQEmGz)b)3+`ix_3{WS96__r? zx)x;nb&qNmTGsrUSdEM8NdiX+HKFdZ(pRsV>w3k-S>dH5X&#EZSC(pni~*wf4e}`W z-{W37Q}_V0W(1BZ`MP0ty4q%xdw$s9HdSLb6bmnqXsDr>kMMR3&eFRkCP=J!B5{2^ zG(wUu ze;$=dgR-=b z@}^+%euYFE)MN~^!*T9RU}k}E(BsCNmziCu4?wE1j$he6!1Q82p10ZPHoN$=oH?Vs zSp&GE0f~s=M3c@fus!bF{MqogOVeLR`SIe#kjtZMIdEX2n1YZ(c+v6Cr;d(N*DMA9 zM~w4TVoy)~nMF3ulEVkbtFywQ?2NzgewR^E<{|#f3gYouCa(FhIRlLlcE${S#plje zalF!lfvI{nbIa>mbHfXw$`o6! zDynz!GI$`Z=GNW``?ArsihM4QO1LL>56T;Rd-aBQjczrKc%S>H)z3)xdFlO?9*~d} zhP`bIw%Y8#y7?sd%gR-u@#%~axgVf{3R@v&Hz zNnF)P#neM@1sp9#0gOHf0@}t4)vw=5(D85a3Jrvh`7f%)dJ0=vyDO~YBwAc2+^^ZT zt-BiKRt7_%Zqt{=FiFHa*XR^PT4O3zTUKadcb06uV6A9Ee2+@IP4_(eboH3-V%;Q^ z1^%oe$rLaB?YiByo~xIit`ZYcTX2f|W66C1 zI5EHMCza<^th&gsKrr#SJJz%E@wJxDT0(KjN8??XcLSiNS!f>v-!t;i2&t3%Reak& zJ~VPRAPkR@Xq5)4wA0wpNW3%o*p8kV^}Ex1E&xC@ zt7UnFawL(0;*0qH5%L>(!)x8l^E-XXSb2VriylVU8r>@ju3PaC4IBo*b}=oB3o?S3 z^4f{WV!(QVn5kn}qyf53S=JM9DtsGb0d#6Pbi$(osLs)jl`uht5~P}PCG({cuz1`6 zq76lxhh!kk8OB6D5pVI?EJZu`Le|jqgA8n_l{5IDxpCE zE8b4dtG9&C<9rFTyEPZty?Iw3eyO!wtav*cTt+S{LM>0ZC^dGs-g{&g_I_j1R1}KW zN#AJO0Bc^@2)!SpE84Y-{%n2>fpm%yq)s19j1*qQWYNqwZQ7LcG*V3msL7p9A1J%yfV=$qDYle(;Rj-i(^MIj$tG z`b~&rOq|MtP}U(-B_<9F5ne2tk0V;2pF8SvIaxk_c>ThMn8{8(&~ph5K>PYkSR$Ht z>G$}oP5O#l$TD6sZWwG(&J*Ox$D}Pz?E37CzB4>$OT;9u6*j3cEr$ z82o8G^W5xgQYvD6>yS$QHmu91KYh^CKkEzJYcz5Rep};7OPU*1GF>6BxOF1($I00_ zm&{tpz&0O=SeZfM9=amadHVMYGlu-+D^w_^$|G~5%bi2R!gj?~CBqe>L9nqyUc+`ts{M)_4l;y*2a0Yr#FLFYm-W%~L>i zp}hM>2C{sigwzJoTNs%h7}R;50r2Vg2@}NbUb=P(__=TrWs0$}F{k%9y<8W|;YejZ zA62ebT=^6XU^R;dNHO2!nH5@66~sGh+&D?L^gK)h$P~7VZ9a^q>{bYLgnfvi$sGWY zuFTSPURL$gEqS%K;uzTj6D1`aF8~GQ&E%6-EC=+S@dImuP*1=yuS}$sn~6a0PCk=+ zvf-0yL(AZN)~j|{2HwtSpBm;MX?IEwrn?ntE`R!-UaP0F&X6QI4#5U*@AH|SF*+D6 zE8@EUcm&KjmejsY|NRj(2nh>QW1u~W}xrIX!wM?|OCfxR1ak6+zXybwiBf4m9gZ-}i#)qe?WR#NRy z80$RcfE?GIUR`I%V;p72ilc0IaBj!}rhDU=+)w4lt73`UnAbWFdb_0sD zz<*RvT3&7+c&wi%N_cJ$7OjSD+lB1ea3-Suax#OR56nMk;)PQPlZ6L_Ei?piu>2`g`AjlH{8C09#cer}(Fwhx5bFwEZG zpFP1KznGT1nIby1D-;4^>AAY@SYh-TX_IBHHPyZPiLQ5^ZT4LhxzdFXz}AR)huJwD zVZ>6Jg$WaOv0xbNr&kB?=S2@aqgYr?;vCA=uP~FR_WVcP2A1QN)Ah zZ&aST3v-Y7kv-B-qtEut+zoO}aniSxl_o&IVwv(+_`4=2p3^Dk;uWXythBdC%<23D1T9J1paaUlnuf5|YnG(Q9j%z1kZ4M5u%c9%X)mAqnBxycbU=*J)*@@Oghf9uXjqVid8g#jJe`^b&S9@BLgmwCBNd zQInYOw6_wp5*Tf-V*?vXznwDPJzlD`!2Z0M9f6P9S;G7g4a%eM)bl^w5a*$fCp~z8 zWAo=9va-H->{BUigKm3{o~?5)m;5^*VC?{O(6S4}0e+Q;WK9S&5N1U*vXkKTg)`V@ec^401z_j+pZ3%0K-wJW4eZBkS|kff*z&L@CDsl2llI;#Ra|Xe4Mt5*#jGJ zmi-ght1vM4o0FTrV8Kv3J3naVEiCyJPhr3FAk$ra#EtsKU?B6aNJ_*fAv|+kFWF?v z?uJd)opJn`chtQESxwFg2wEH&R?yIPpY+VgUq>@@2;EM)`E}!=mc(|{UzPp)*H%V8RWE3D8j+Z4-G4~%fR*vqkX@Z_b{4G_s!x%( za?9cfm6W+=Sje+}b&^vD{o-*~JPVNO4l8Hhyrr;c&{e{T7Qm1xT(oC;+f}c79=zZb z7LSClP_kZ5rOuVaUqwQkoa`SNS?(2>kHenccxsGT8Q9tC2#aSpb^B5M*lNvcRA0f} z*h-G_R`+Aq8+>ee4SxJ_ZO_m0QnW3V@hUcgMY?P>woP;H5c%SKt#Ed75;8BIsDCt^bPLC`Pq1LepvwwZ6pH{d>U0x%JsFxrO zAts1jvn1Z#Ih1eO9c+A0N@{8mb;%xY*`3|yj1MXc2rI_OS;nE;$t#a!J$(w3wy#)M zA>6LhbGC1ox-2QkJ*g-f*>P?k(?cCNuI>-VqW(OhzSWR3>LQbY#Lb>7N=W*-IUs>rzKgc)%Vj4k^4wWfMT0+@Zd$q6$kI-*{r{# zWWgSrm*`1P&4&P;KkMt;V+B5y|s;r&|9dhUFmE0;<8erL> z2(v|G>}b*>^2AHRRyGiruMzdJoPY-c4H>wID{Ue%#+5^Vop)skI2xRe-TB;k@dMMk zjGF)JvYIA^P!>gy0a*PsxetWQHOZWMx=(r(hE8i6b?(cd@RqPley;&om`z;#oX-({ z)EHR!oEzvD^J1&~ArFNj&ALn7Cq4gl87x{a)1X8jir_kG0n8b(b4o#A)EcB^62?AgQ2 zhc8`UOnjg1-cDG^R#wkmEi>dI!p!neXIBx%;j(D|=EWo2m~NTd&2rsYD`)2DoP8Gn zEOStmi_{V*u`3R!aIACLXy%8SeD`Wdzlgh2eU_FUii%6r?)nm0{7{E7*}5TpN`P-A zzL&+uZLVRqcg~xh9(z~Xvg(?ieyH$1HJvIm{WJ5WEl4VbO?8!I6{{1Xsi_?Gse51o zgZZ64^X0icGwB+mo`vLP2``mIT{_kI{9(1TGownDg_tyz6iHUn`>=Iro@iX2w5_b` ziP1mxT!i46a}EXhazdY|5E_WO zo`#BH-2{n?g($tIQD?#(I8()O~ap=!a05MFv>I}-s$U=y%@_|`e3=kok#KOac1=+0z z9fIF+2k0OSAJ;`F7~X6XE`{CD90aydvVT&RopX9k@KdZe}ITl2tll< z?2E?HXRKT#@d`>A9XeT&IYSjI?;@PW^myaLD8xur! zI(9sNI(-mcnBOMwO}MI+P@0@!sM|CLV@1>Jg9f`OS5nbMd7P(Cb>mTqo^)c_0;8;c zrLFjP1x+mOziFRFLn?j4yIJj#FcO!B3}!T5yQNn;k29QZEK<4sqY zZhHZ+aTw;8xI7=4^`*6ilS>sUzk~2L|x)IsRY7f@+v?hQ@|0H+j3FymwAahCCo%v?;?!HQ$k4a z^6v=siM5?x(lN*`UsiFYmh`;IBi+j}MiTAgBau z93RKqmUzt-3^SWsIVrPQp^=cF8!Gf``@9RUuk<$DW*<}Lay-xlK9+b9lds&1hCk?X zxpPP{JO+`w%i+nrPnIAWx%DL}rQyko%iOE1+kz)PK9+uX?2Busq5?Xu4Av|(c%;iO zP7lrz8&UpJ+8x1z;BWW}$A#g_}1IN^J8)!M=Tt!Q3QBBpv7)! zu&ZR_jQF~41&cF8z^cbCioJkKWMqd|UHXhW8{e)dB>q{Pk3YvoVmhI53O=>9gH0es z{`I}2y+u3VfREvhW7Q8uB&@LDM79~joG2?OKTJB_2WV%(0H<8de3^|ppXHS0#|eEb zZ#3)+_HLj1>S%{GdA-DXDpl-$Olp1>3Y^GjWqZ@J&*+N|emT2GJj;H(z`a3|6GBgm zG{PRmXJCK0p{hxcX~~nXC2~x3l$;sgQ~7f<8jgQkc<|`<3cIJjHYjvW-7;!@ZtzZ* z!or=`zn>Qn2R{T0xlxGedsahUrW>&HE-9kLtg#69IT(F|JD)SoDz8U(1$78Hq z%Kfj!mpezBxl;#)?DAw@kC5M<4&YU(^K)xeY;zt6_e+k1U@&CPHm=ce9$}Xx1dPT+ zrkl@{8!Y}Lqy5PK{mU;$89lkN$7BL46>&xdNVP-{BUW5OMm#jaH&<-t@u)hA&zf~c z>D{nFSz|B3ZInXEAR6cRmBBusJ<{J3_Lwa0B0|ERX<#G*^bzAc-S`WWdz$s5$c=E3 zIp-KB*-D8lJGcsUr-%a*c)vZk6|1X(ob(Qk*V_4Ia}Ou+eP@MCYYP}y%g@Jor{KvF zmj-*KMjcbbLY96q0*R)sFLp6-AAb_GmXN%aS^aFg`d9pY`tBUpNoLVSCW-Cdn6d6o zaBzRsnA)Z2gFbx*rp%nMEQg`&angt(CI@>ic-FRZmmSklY;d_zL!H#46*1>h}{6^u$b@2UH*mF z8D2Hu`R%L>UD5CEIvMt;bmTZPw=qRlX1!%;kSHV*lkTR#t|3&BUIhqAa??U-SGudj~sY zn98y3ch(K^mkdyA0`OLBg6oAiL$Y19GS1OgK4ZX^x{;(;cpzhU&--$YL= z)LWRPo(F{lM;XpF{<3zTKKk`L`q*NDwpGkSi%nNFA&iWb`+MVjUv{hgOH0-3JPrp1 zVcx$LOwR)H34j6>>alo?Yu4OVbOy4A72A&-ZQ&L`x5rpCrgHUktTLk!9OBboUX3&hs02}8Q=KL* ze1vXcc?EptSb4mCa3T3)Kk#v9 zr`W!d7yF%Il_{$Q%5&YyhJXhK>lQ_11BQ7z#1Ue$IYOt6fC5KCLzCv!^c+hgGg6_d z$#OZ14ymH$r74a|A%|WgW;J;bTqpRQGnXU zP#;;z{AygyvxUq^$K+-fk93$LKZq8krph2oSQFCn!gPhxctYYe&$UH8Wyu7ExQdvUQ=XV$@_zK?x zUE81k*jti*_2Erxhr_aabcW-K)^Jdr932sA+fHV2=Y4>VgIDo0U*@x0i_fiI`dO0R z=(ZIdFMXlPLL!4hNe>8I&avsS=Q)-q41Ef`Sv6)K%|Zl2_H8M@k^+F&IDkdWa53be zFZXfHJ;I082XtU#|5(Qr!)RW-8;J9V>clqUQ$^<2XzNs@og#CzV6MzA-LWzV0g+h8 z$vip2wjPt^hlc?p{aE1g)gt${giJ6D1`7JNjbix=*Wf$D-e-A91w)0UGeSYfhkZC0 zl^EZ7j)p#*q{07&a1IcJ)BNnXaK|G!*9E>;PY!d6>zO4i59k1bb!3PAquV(ozpVs` z%WMmZAS^X`7@g8x)jta4DFDJ(Q@n!0kS4xQ7!~e-;te~Qcu^C>x>29)?|xr-MaOAO9@~2yeuttw1RU#wxp_wts&j0Vhn432dGJU3>rlR<%|a9 z#PfSto89vmzg6FE*sT-p^~BDe3vlq& z)ls+r5TudI;TvnqjnosljQA8^_^nBue%8&FAjpMo0ZBv#OxnKHTH@q9&eaUmL7csm zan80Qr{ri5TBD_HSt<+m3-I5FeJ)*@lr;8G{WaRAvFk~d5vGYe4bjr$zR~HwKaH!> z8iTqCFN%WNf(zw_xD zp)>}<2DpA$idBa+VCCxQcm7g@HIT4ss;qbA{A^z({NroS56U zli4N)*_gn|nx^&Lb1`^HP*5Gqq5vYv=rKFhJFUl(^^llwEFR=s7E|$dEJin+Sr(&v z0-cg^yukxUN$@3T`0FjsBhZN~xl(HYOqW~-kFwN`9_gOvj97t*z(q_XgdPAaPzr;r zFTOb(k+HJfEMj&YC}b8eh-2bfC`Be%rT0u;QaRaMO`kVj-bO*;<47gapz!j)>aRM? zHd`#O78tae#EV+Js)mVi5Ck90PhpN!t(BdfeQS)3+q9gFRrdDwOL+tuF*;N zRV%N6zqRU)s+nsy-Ca~%R!+!pn@L1N z>P!^g4Y0I8$DjVvJG3x#B)BpeR0D*B$exHM*t|(_YMyXs6$N8yd4Wd|^t67Rr2qEGH8nM4pXW$~>50hQ17klMvk)#Cxy zbh12zMKqG8JaCdnxs&X*<*6Q$dq9am(9%{64Ghk~Y)}lCHOvOKSP}2KKYlGtpGr9I zV{0%BK4O1;UrZMh+ocJ?N^TjH0m7EjGOkfSprl@G+|XSkzI(2oCYxt21h`NlQ%j5U z_~F~ST#>RgWjgEpkE(d(3JT#(!kL=V^JOV)sccChgYfXLk9AZZ9_tfkg4;9wuzZi} z0mbBTER4z`U`;q~q^~O5!8ZZTJvy)@0W;gB5h2QgbyV$cal{UKBqQ$7eh2W&t>|$>X5juGwbyJ_If& z)eleZiK_Ge5a&DAJ$>PR`)IcjL-Jr}ZeZPhaNDG#tj^S8+tbwL!C#0N?14U{UekOY zb1x_d#S4s|;E*vQqmUW0@LpYufk+RmdOmF+0MEx02&T8q`nOe5#f!x}K;np)4hzZW z?I&vny0cjkv#hv)obGPKHyMBI*p${qui;?$!Cf ziSF%`72Zdv@kWb(fPLO#TgrSd`$)-|1nq0Fa&V!un`mpp-@PWa+U?5aCV7i#FUu=k(nd)^j;jX(!BH6OY~Qp5Za?nJ=M|8(uqgkLbMpRjZ6H8|<6ja9Xi* z;hqtthti8L^Tr$i%bS$wHzXNepX24GE|Qp#Dnfm2IjEL46>B#^EIh51Agg$>FNibW zjg9xLIdk~^^)B%$X-IY-DHM+d>l2>J=P4AGO~g5tMI4MnsO|1nmRnei{)khW{w?KD z^6XjnY}6OO5xy9dCB{xa=YOJo`(k5bTit!_8d+Kt<@Kj z2`z*IgyVG6YitZTV)E zg(LB6&E}_Gh^`~C<|RvnI>fpZTE=g&e|_&ZE}~b$y=Y-bP$iV$8M;Wx5-fXAcvEa& zA>!{8+gAkNN!tJ$SiM@V%nwUX>D;+9o(q1k%B_Seu0<-c${;-6tQmF`j%GDg%rKrj8K;MZnfR4wra6yGsQxm#go7!{ zdP$u2-CV7!tJaMX<7dG9h5sLIZvvKc-u7`{mdPND%#ab95yl=_BW0O%S+Zo`$}&Rs z$`Wn%T`r6zl_g~@SraY9U{EP!OVZFLNhOu){ha?|=Dr{1dEVna-j3&Z?it76y8i#) za-QGqype3HJ60j0lRqJ}`mb1-21j6`=dC+?HRJLkJZu?un*%wwrh~$luS6nr6kAg4 z36rJoEp(RF)j0XoPMsaK&;Npl_p}`~jhDT8;aS-IVx1EO{_Yd)79BVnHKYz6jVgKP zOa*!%u^Q@YAeWq7{Nsd4pKkfwysR@_OJr-IR8?f1%e!vVXz**Ys?0W`lqUJlGwS5t z#m4kxdIvy*Fz(d+uJB!Za}hJ5c+#`01zp*8ffX{pC{S0O-C@eTKS{ zMj>hM0*sNnS{xGgCimsiYHQC{ZyRie7D@>)lgd++Zo&f3>ind3xK9PM!JzDKLh~oe zOlh$q<5oILvU`ojJ)Z*V^qm0fENiRG;h>!sZLi9{P3ile1sf;O0BJcs3EQRRU}9;< zGKHZ(KGO=(cG~B7;lH$Lb0WjGOU$-|Wc(81nn#H1hugo-&2Lzvcz2uhtg|lmTFoA3 zd?tI7|3US+`cI=p>BuY-?8e7L6<6)RzJLHrjl@FZc>K}qK|1mcp&Z@{PzUTOf6TL-^44ELpDVZ)@ z`}`8bCvuvxrbQhErefk(w6UHrJQfx*;)=@=aJuMY5O|GT0**JE?wpQ`6?`Bq{;^5s z)+vv|tB6m**0g9h#f{VLcp2CyqmLv97y+-)lB6LVrRPERAToubrxP(f=O?;aLm_Fx zN_vjQyhnjmxNNpbT1Nixx!hNnw2xs;73B;)ysD6#r?CLZjK!nJf8Nzz?6T;pH6PmVf8?nlpG3 zn~EZ8U;fKsnY2}o3UMQq8@I?iO3O)X-bY=&RAOV5hW3BEi#9KkVQgZV!`WW>oZGntJmANMTYtflkGFpo?dOKdI7%-tI6h)+rR|JYc zw>Ny^#AoFKzQ(DK*Vtc75Urf>ir~av&hH=f)9d|w;l;dL)+NKJ0Ognhw+PQ_-iVuP zCTFh1O5nZs+h%DjN=}pX>mqAHZM~g_=hn+uq3UvTb6rk2e`wSVad3^rr8OVqSuzO{ z9bI8UmWw~4+%zmRG2(qkq{z$8yAX=8N~&oVO^B1I`>tHMG9~O>n9JY`;{zHMxnD-L zT`!f;4lru!9Y|#5a?x^2zDKKmP)1*p`yD6$j8$;D#PHD>&XhBdqtwOv#~1&7u>hj; zI3AX+DKE#%Wwn&!Wmr3!|8itQ;_*=lb}U;yQrK@d+JF)^@~VWv5~n~^*JN!u`DqP@j$3p-t9l!k!eJwBm!4kGp_)@@=ATFV<&C-1 zy)bQ4V86_gyQgK=VhGcRL{pAC!ZWJEcedgHOx=J>^A}T7YY`xc`aC9P{IPe<+s1^( zhadg;bgpLqmb3R($P z2gDeP5If{A&47U^5f$5p<_^OWnu@BXvsdg1ff+a-o#+%M!=J+Wlzx1;&-Zz0i|Ou&c|2^<(f34%PJ4V~clQKRYKbr?B8e780Q@ zJ>EZ@BDpXkW>s7vU%Y_Kj?XHy_hr9^CY6?$ybFOn$B9B!KK|63I$RVB-hQVVef67q zVPs(+hm2hM@_`N2z;27ch@iRJb6le<+z~f0K9Bq9XQjITcS!C0b>$%+&LeG4Q zP|ndk+dR=$Jk?S4BLhHouEu@3`D;iRAqb zN?|tHLArCqE*ruVD)jvoNjygL92S9UXr#NX*L4F_I7{ znPVcgy9`B9N?|S4ic?t8WvV061l|pKNQPcE)oI@ZhW4tUo3!wvA~BB~+4@%h;3+!m z`Vu&>EO`LdON}pZ2_nu3l~?pqQfX7~i>pCEvHB51DNn+JpGFV4)1t=9OLbJLg~TA9 zaV_Ol=vHKmi_$83xKXzsxO|lDQ$E~#^ymmiIm*UaErBL6xZ#Lf zU|et-!0*dH7BxQ}szHh%C89D*RPpDk%oq3Y{^`lp$-l%`R9%ghEG@*6LKWwx!A*!A5jQFfGTc%<4=H4#t{8ai-kTo0A%wJ6ogO{r!FE}%$| zPJ%jeuwbi7Jhob8Xd{z7+J=3Y99Q3vh~Hh7C%-{>fx_|EgF_kE@Dy-MJVN!)O&;?* z=HP+0+D8IXx{7XnoijxJty8Vpqxh=br*}Nc|49aA3ln%sD6%0+Vn3hj;dZWBg4 zk8@9%=!an?Vl8Ti!v_!cVUABH@y`X85hl$gRpJ}7iXz6593q6ZLZt!qb%a(belKB= zn5fXG^SiJIO(t+4qwsdbADt}B#oq|cBUrnF-Eusz97$|zQo|M|?@er?I(a{3> zF+eBUpl#YCHd9kIHCuay4Z27hU&bi?#K@uTK0b4eD^*33LB3wYVG!WFzxiOb1~Q6$ z^?=vchWw~JSM-w^L)<&b}0yV@$He~M@(k3w8Q_z1!WNDV1(UecBVP)C{eGegAL^iGYIfj|*zuDyefQN-JpMga%%{ISgj~vT+VL zs73~v2K(BI@`CaYYq~OgIYLC;lY@3q;d4tjPm0;!hYsVfoR+J9jn7)eQHs(n8^o;% z)IRF_xE8YO44OWLFYm+DHWcuw&o5)?{o*6w7u|vQVHHVBmoSZPcpzTmobQa6cN~f0pN(u_~>bs zlck=OId}NgU8w{VI{w7y-*?ROe8!0>)96~X*r>g*YUPTkBtdWLfGu)Nv4{Muoa7Rb zbQ)$xl*rFl@W~5P zy=p&XVxmj-25YFyoswh+8|K=;mrUQ^qgfMl^tdnoD{00FSje zd<qtd~jG_j;IBhrmzmjk@gmaWtVfyeMH_ z-#DJ9zJ|n1)eLBR7g6|X--PXSae8O>WAwAirT*HRJHOJ4{ls&YpIN@pS_lxZ zuxLLyC)Lw<$^xT=!N8_n%5kum>GDYn5EXZ;UHI`h%kFnry$(n`?vb@4Lvp#H)|K7+ zY%Pu|ah_UMc+r-{`rqqUP=(besEU-z^W-{SamJW^^sT)C$T&#U#XgnlZ!XyCJ&Vps zM7S72yB$BTHow`~zvK2T`40uszPdu(eqUS8ZoXHn8NF$v5@{y*w8-u`2Mk&uN`UAXtdV^st~bd9 zNje&qcdq?aGtNg?{L&&?_e&Q-1G!1PCqHw?g4sjkCFZ#BSd zqT9BD$3{x$qvsP{#tBIlWm>vSct}R%3B924l_L@;R5rJ=)@S1<1zL!!uM`aBb(DYH zZaEUVbh(wekh*Gzjp2>eS5oU%TQ$qMClyvYh&56B7C(N}yD{X>7QI$_HOXeRc{q35 zM$K%?8NrR)G4o{gII1GHib$3GpBt3<)oB<&*eW7!(fCg9IFl>m5?@uB0KJ-nsHwW@ zqBg3Cm|Ia%BNfTc*B+|=oV|XaHM(k<9f@3QCTd+jE04<9qfS779zkl#Q4sQKkDbJx z%D6ts-lVISC<~EpaH(s2%kp6?z*Dy>7E94bdM|sY#==iIG+w}%0K_(-AK%^Lf`D1R zD^Y(--u+b}aNC|ePU9uHRqN8i!GwzYT9>@rS-8`+pq^Taf|5Mz(h+oM)KW1dSmnZV zW)R`WRrr8mHbw^5U3^7?Dp~|_#2!B#6)SpokYxmOBFh&i-NjP$3(xNgaac6oog zQT&@Uy)kS{n!~>wjH@`7EZoiL5UGb+Souu{1BW*H^Tv&?ldJ|`_ZuKq%fN|k)FFKM zJpOt+mYuj1XeH;}oATxa`5BoK(;`eP|C~k*^+3`SKV>e8CSwuQ&1)5 zkKT2t>t>J-ACV!7pu8NP(x(p9W*OAouv;lzZ&9xG=c-vxV3g4;>L^7DqdSZaMAAA} z&xW(5w3WThk$_uOsYXNPOHiQTHIWAgt%^Qc|d8#<9|G_gcQe{2&C4zu+3ck7tW&wKD&?wv0wn9P1K- ziLzeM0|Jyczj<GbdOmYdLW*3i@rd?Ic-1%X zNWdT1;gULYMxrQ9yVE7{9)O<=nuR1WYF3JiI zgj-_S&oEht@kPJU!>2BPAy!h%@a~myYJnz{R5Dv|lL)#sja`u0ah=UAyUyCt_7hO7 z2C0f z9tFX7x@hjAR|x6yVlnlhkTN`c9&p3+*^34%hvvEmZ*C6R8xCzf3WKizR}7Kt4bjsp z+;ek}&YIkdiN%&Fd+j%4v3mL@4D035;Na03X6*HVW6fNd35m`nLhk^gxl^b+fw4Cl zMM)7#6;RaU)r2jQ9NTa9XtD3BiAoqqQXo>-rZY^Co#lg8`;2G(My#YBTea`laYf64` zesV_?w-FXWoVQf-7mK#6sT9dPSnc$MmMNv7*X+CMnamkmZ^Jb*f~9WF^?i_bb4WlY zdPEd_#id(5Mry=~Es7%Iv$6_dNe%#>!yX^MKIl7*I=)#oiGU-yU>}3`Ch(gid>Yl? ziGwcZ{8RRuUO#JUSL?yLs7;8w`qb+2)=gX;eWq9nK>6LS#E zOYC)Mxx^4HJ1Aku$BNo9Zz@fQ=5gn64x%A2ufyo~|T-s=`h?KWleSKsf=W-qUr;%pI9>G|wc8y;@z77@=$KVpt z=|CWG85SJQvbD9%fOm}}jP3w{4FZ4y-#6{Ho;iD#{_a=SE9*KIfn=fclR6FK>zqh< z(rrP9l({=G&IunNtli+kY{b$>;oXHJ0Z0>#yKuL3%uIbgiPSOA<$OIRs)JUDc*D1y zbrsJpbIH7#AKrM}+`^(g>BkzcT_b%wfuSGAX{%0d8r|9toq&VIvuzb3hKRS4!%-Tk z>CmW;G0NiFQU3*GvftfNiME=geieXnzf>AxY<<+S;gMbAtJ2D3?yjVi`^I;q4?5HBmtR z$Y=rIB(KKqp$6$?>p`k!8HtDCb0$7L&O+yfH5`hkG_J$au)La*6Lg{YTSNfmu$brs ze%wTV`kgI8)=T}mt_B3!J`V&~J5*Y?PMs9u;L8i-Q|~IX{6^uE6Srhs3kw|p2$|6= zVdWx2Vu^mL>zQUh8uP6LaEeZZSfG5nJ0gF;ZGBRTa+n*5{gv2_l8-5-Lc`N3!Mrwp zYs^1fKU-@dTFQ)ZiLu1fH>bZu?{l&!L*`p@Lvd0g(iblWm}af?o;otYjHi*e!TMuw zRGQN45=G~FE@jXPB4( za#Y=m!uwTHbuTE44_Cy4qJX3#*e_Y9a-*fSR;k4lCp8jnGz(&y0sxJBySPV!=MR-` zGN@*NhBX2{&M4<{DDda47Wwuys8AH$jN71zg{)JvvcyFqA&F$M;A~yDgYt8I*c5(J(L0}}$g_flg(|kqjIyS^%M&N`> zV|+yZjP-}wWF@a=1a|2(Z39De|B59<_2PC)P8wYk6{ol%>}OpDTOCFs5?I^9lyal) zzm(GbHcl7_S+-x!a#jw}yH64cy;P0p(P6NW-^4?!j7lb1#7oh87P77Q!*$a}v5pmN ze3hYk7^$s@nUCQjUo$Jg`SO-CFV+nh5tQ4hz`j{t!D+jrE=OwFbxyUOQ;_44V5&8Z zG}1!CrcSsPop&|zs%W#a!Hw`zv$-<#7bG(S6XPfW)%8>>hQtStdRb~T&NL+Z*Fmj6 z>`B`@srI_QxguWm>^wVG0)Zzur5!?DVGz8bZHNUFuM^S|UZS};QN`>}peK=B$tA^! zrOL2RZY6T#)*cf{Eq=ti)P4tL;DW>EHa!TL2uWJq;NIQ4lZ=16AsQp`^4W~2C;|v5^0Ip^yNsg28P;dGi0Rq77h zk`k#ZIlQu!`_wW4J~XQcoi7R-$xxussv$sh)pO7DobD5Cf&iwwc)w_9AqFB(wH93A z^yxTNLJWne4h&R&3JLesl}Mf-5H4;dqkd>exLdbLwgY{X20@{iDmfZ>Wo9Cfko_glP&`z=q#T%hc)mi( zDAUrvdsX@D9fSr#aPG9-ab+L?N zeLWmQ*q%5BarDSizn+|}{is>pK7^)5?B(>w+}sDauaMAXmbl8}ufJP>!pthBAKc|$ zm778Q&EnD&hxZtjjs^HM$V=2Tz0{$t>l#4{bJYL}3ydoB$@KK+@N}3vFG_F!hjPRE z%H}w9sD42GAMqQ^a#<#o8uuUxb+dl{z8bWaXH+V#A)89G3_>s8uG@Y~WtD~bgz(Z6 zfq^MT&%ectXRt26RCgp-E!aIIQ`cMADDX!K0{y)p&?w1xbPxBEG;07{IBm{X9*)Z6 z`(cufX=5u$1SN=A{uLR-xs?2(yd8nde#HWSeM#l^_w&%2N@AY`%8PA;NvzCP?23H5>)bSE`H0jSZLmV6N{Ja@>ZJ6pDV$0AXt z+IEK00cDJQgJ+M%6~owik%f8Py~0aSztPNfp=P6+{3X+PvjKOt?l7FtJquo9xQQaAl`_QUi2Wh}K6R+Ul&c(7;VV zwDo~X7r%@!li$b|QL>bC|9s=j2RXR~&RRW;_b6lU^}l<5y5;H#7%8Mj(^hHy_3G8T zMoGGidI}9qpiA-0aSGM!YVx(OYxd5fJsq0c1i958Us`f{&c)2m%G+%smi*lK@Divx zMWdo_{e3m4rlH(k978rk!rtu&Ohqd_5)4g1Y2cjuyyMydlqq=jWC}7D5Hg4%vgjvO zpEZ8P)ZZ}@ij*bt)3*-DxZrp(fx~n^B2WrJIXSIt#J-@+2Xtc0ZdYseW=uQw3}lCd zZpf5vhRBx{7hNeXK<11qxmEaFpq4wUUvVB8Fn6s%+pk|9O|CicXcp#?ea@i4A%dgJ z5o^AYEB+Ri8x&gd3+m&4^Y<#PKzI?k*hP6qjD#eGcJiuhQyGq9IJG@y{oiS^Fg;99C@our>eIafM>+D!_$n&HWiU?wdVl^4OIxN~czqc2 zwRjfAs@Qo&CAU%lnckozenzYNB3=o1VV32xT>~s9T1VfqNbUDRg1}%|j>zzHZe@cY zluO*>GOvXv_1t&rv}x%eSNCEM4Uj~LG!o?v<>9a)@50iN+y@QXx$cH*Je=j?@P+=t z8~!313z_64pRB>W_ZE{nhuO`U^Ly?~TkT~R_MbEWBNn*_x2C8X>YISxufH~V*78j* z>Ie1ROQPItrmB6r9olvc{MKD?eXvQ1&8z6H$|`RE8gWdS;=@oMiGwoS5Ip+$$_q7B zHj9}wtW4+o+8$B8xFQ^!sylVjJ&Et4wv1~L;Q^yQiVRbneY1jUYWatTPN3d5ahXdt zqZGu;RyfUj-3=S*eprcaUMosJ1d(6E-6X@i6EfzY`WLWP8d(Z7ZS}<#twtWF2hS`i zmFSD+KFb!wUaw*J+p|kc#B{*sHq$vq@-i(;*$PuxKBha)m9%{6^Q4pn@-3z69^|@|`_Ak41T|p+jWeN-< zv(enhttHu?QD)1*7rLf9SLJv`okTYmqoAxi4C5=PwA(>6hn=Zf=7<+QTUd1l$4Ou+Thn&Yys8Yre&U zb1Qzk^*cdu>>xt}%AkXkjMg%~T}dqBT3`8@k5{d}$HclOqW6-Z59As9#diV7fYx=R zO60ZDuOVKcj|x&K&CU;lwQkbw9XoR5Cg6?3?B3qLG)M&3Q(O0p_MoBv=;E5cI@e+j zsugwwGlsm=wl^YiPOZVaIKJXXpUYA1+V?-+81l@2o!?f2N3XW8F3Roz;5!l8LMD-y zJ=O@g6@~tH1Kx!5cD@Vl7dU?B+ z+JT{5TY*r=7vO|z=HiD z@gtST5p}Le;4566fMB{OvoHaQCy6HI_8*J5S`cR_O2o<4Kh@E*eioc)b~LoPFX7jm zbGzwi@;Ws!+_l^D|3IkuHs`@l+hXea*Xv&gZ~j746ebO}#J4g9?i< z_RQfT+oevMj~zQ!{bw>k&WHb5L&H z2g!U{RGNhY@BQH?dsFis-+wsH^t-uq3!+C9Mzq14;LGqF`c;X7$WUgzR!~JwhI0|p zhv*v_{U^?G!g-jF7vU$9J_S2hDkvNKpwYJ-md_@%R*4laqt?og#0e{AAXFRQp(6#5 zBE0!>$4u2J2`OpX4~GD8uGoDcZT85t8(E9)NC0ocyif*V$ZI1BEzo<(tNN506C#aG zW4F1Ne4H1!t+mb)%QOq;P(Qi-Oh8Qbn7W2Nb1ijFplD;8WCV#-Kbw5hgRok=q9Rme z8c8=Vqfe?Sr4`Mf6x7UNkffTwwWyUMzI~p(SefAdwG&n~KS_8Gw*--nhmgJU=;Jr$ zf-pl$ivn<{bs{4|1mPsCY=A}r%19Ay*mK!v?iP(N!1B#BhnWCS^tVD1am{ZY7mfsi z6v>#O)^qVpxVX54$ETeLJ%85ue=un^j8;2&O*O(QMq$=pBRyF8$w|#*3_7-@=+P9P z(bTbp#+{ahgEK;AF8eX&s@=s}3JtEQY%3-vzS*l-f`p@h6E zRSlIct)mqwuCPqHorPP?gOv zx~}8E7|KkXhvxBlL4B2m%COS>l}On{Aq><|ZIywVu4457r;$Vuh_WHd?H{LMh+cR5 z`M#3Qh4+IdM`|j8tFUB-M!(;`%hmYYTtj=y$g`HGEONUYYRlphTPfwQ!m=}$_+tE< zs-WmEFmv@IydseT)D20hLBqVcriOZDHR$&nt_Am08SEC}G4K16@VL$Yi+g(;mstks z7@iU{LLs`Zbl>r~0@u0O+!K?79?mzd^Pha$x(8vvwYkinnIKaL7~^n+5-2Zt{^cPj zw#^FZJoF)pk#}B6rq_v}Me+|wI&GMD+Qj5K^jpuQpv>sUD;y8xyn!r@sZ^_nRCO(z zHvP?P(DgZnLm6@lPnL@2#W>xi%0Zk(;H*P9n8X|fjW&afe1O0oW0Et}t`h^@8VVvH z+Gs@mj!$6{-I9bVvCzO>B1?^U+mbL;c88K`%aJoS)Tu1-c8qG4AKj&Rd+c*Ym<Pw5xy5}K+3CGad6RaD29@=}9{9?Se%oP| zAL-o zS-!A80`GF3gQdTEc&}hOHG?8_a0|w0x8m8!?zJ6fua*)Vilt2YCPI$S2ZE^I;^QR> z9Qj-y=R4nOPkZHuc;o*gk5<@33Z9yJj3lXm{+^Ox=k;Xr)GDX^Lrj~4VC`O3bjzE} z?y319Utgu!c0GC0*SS`8q|$|6oK7RnnREhL;W`~ROG=7MDO_bVJIge6k6plBW^FRX zaI##{<%K)ZI!^;TwF`b;QNnbjGo-{3ywVO6QX$%{<7J3ELb+uT8NPmgjpCm@dHf~j zEZ<3c^<=N9ME&^E`xL*Z7cO=uNl+o`)aUKO;%=;#qKEdr8=hn~$}Q+Ve#;`cFbJ@e zU<{BoQB0?AfcsXi<;|_4Vrn`4HcCWv#r~kbtb~8akB^1Dsq=g&Y z>|A~#1Ulo87CZ5x)~TLc8d|N&YUJUq>uwY0&BPLb7is;gG< zc41{$_vcIFe{Z1swFZG?aYfX0AwD95J#!t zvN@X$_&xPHCPR;a>Z&I9txF3>N$j)?1V`f2V`|2m>Mp)N3?6@U{h`2{K1N5PeI{7t z4R9WPx>xCfTRv-Em&{*)!qF$~a+SuzXU}fq*+Ql3;r_9xmY!W&>>;VyM2H2>XgO>` z^28mb(X)zE|ESj~=((Mrz4=Nh03lz20@=k&wHai+!FL?}Qi z6Jh$x8w4z|R=tm>B}OzVUru=OfhiBK5G>S;dk#z})}h+IKNmH6@F3skLHM(ZR&Mqg)Ceydca1Q0=<4Dl|>9%K=!Iy13?pRe&%^xvg!U>H= zhn~#ls@OzD%B0vtSrJ5B-@z%mLLyZZU|Y-Z#osl4fL))bN*o~KzuX-ZzkJzyY~A{kT5x=Z5QCFr7b=zEDhyrP+;3 zp>CVFeFDB4z(M_eCuumwn#maMPOmWZAd+hd)QN3{KNag{bxF&->Zd5PCEIBaEDv2V zV!1T!eWT!Ht;fGfnfhwOu0a)52A)J{sYQe-7b~OX13}xYEW2HE(9*cwdZ{s>vxYq! zc!P;?N@xA#Wb5+InomUG$<8>{`j&{|mO1HK_2uXZG~*iC4$vo%!_ zE^&}M_qA8?yQU)$oS?h_!L@l(?_{ojeoynen)ko<@jETwK~ zql&5Z0^?grbf7YA<;O2S8tAaaK~_~%`f2ox>Bw8+@hu^U5VxwzU^`93beeHmH{r!B zD#AR|d6n5#RDXCe)JiC3x~5Ky$W!J@>$r6lbXn0qwy#w9VqRAo1%O#|vi^7;3i;_+&BGRIC`Jj2FM% z2a96%nMHAjs#FV^Fur2MN?H@*UO?hE^$ihx9PU9q`CsaipA-(oPaJHb#cOl^>0~iF z=_iRZpHb`gP}0}qtamdQf~Xu#4l+Cb)uy_L>?9GLzyL4Tk^%{#AK1LY+7+lrUr>Z8Uvn zUfq0n@%|SzmRDGRt@>l9qa$AqaU5$qZ}U0t&Uf0`_uoCzuDgAYbH*div>b7LWc87~ zt1TE+RLSY}R-gVIFE0q1T1RtdPUi*|onL3w+M{>bpz?x(*Dnh`-1@1g_)X5mq6ts$ z_5f;Y^7(Z44qAyycJ zy2(0??S|JDA~6u9tB5Fk-T1~tX7`dMW2Mrc1H2*6TAU>ULv%@87AGX$IoN(mW^(IM z^y{p=Hd$e=YjB(QE4(<2V(bbx`Gr=pA?7lp*sIQF z>nf?~>A0u$D+EiP8y)f_4W?B5RXKnrCW*9eV+mVi({$Us^0$+aJ#i^8K@=L zgOp7welk5RT1pV$lr1L2Q>^dh+U?EmSu5@WFeX)?ZpLnV`T>teRt zGbGPJhK}~z(nx3)iv@sjO4J$kK?~3kiIAqDcR&$^?;s$Nf0 zQX2fe&*@v?XqJ1b=$05(Jw-GnS2?XaqA{j0`tCd>JH=r~ z;!lM#6r{o1DZNF{r4`i%81u>Nk!&djy14(nHfNswvn<((CdZ4+SG0AqfLd2iq%k~v z@!~j3|2T*K;~D&1zCS-HqPF*x4w(S+C{>uvNqhY!?M)XP^}c+&lh>O}t1(B(9!Sad zek%0p-B)=|1;ryPW)~HIZfw6#La{A+G-!A^zQmthy9=>YWvYa#SNKp$=IWQ<352^| z;_uZ|7GoINWSw_Dym*jM(v#vc_F4Al!JzCTwm@x`tW>r@ogWCtvli98T7he5{lhMuKKHLux9Eu6M zn(AsOb}e$32TRfyLYzEsE9|pzIGiR8v9fBi;o1Rib&e*TAKCjOAV(FC-Fy<)!SHW6 z{NaJQX@GIb#}^+CTp7R9d<$hB04N1qJhWC>sD4Dfy=i(k=H1z%?HJzV{??7du-5r* z*~uC|$T-`w+znadGT#M)+@adAl@yVPK?H~X>#x63$yOBpMDlXadiX%aO}$ZIPBO{i%{7}-YQe94tzz%s{|%8+-&NpTz=i}5TYMSe>{3|hgn_>!p6 z)w0ILEWxHwYr@{24Lm}ul;or{|4ou?)Dq3lewN@PzQj=4D4BIalRS8-DezNs2UA)Z zsX4qCzo^RF%($3X9KiV@#*9$n=|UJZhkUW~U$fu-+T3&+9-3iH43$wiaDFlkBh-4> z<3#(X2?-}eD=9?=_c;?Rb8#KHB!!8X@%@FYu&Aw=SPvs#=Rj{ z6ZGaeE3YjnvP;hhN}K=sVS5=4pb_(x;NIdRrf#JGv+Vk+p2H7E-OE;a7km>Er+=Zf<1q=armP7$0BixVZWfGd5HLqqVOFxuf*;G}4{k);E02 zp>4KpaT-4B9z6t>O9F8Kuo;g6zSb+;$UL%>DG`DN>(L*lZMPp}yI^Tu~t+57|C_an|fU9bU7oXSD&a&$=1Gf|4sbcs51v@7=NsGw6z4Hbl3(v6Mzt-rHmUGd^ zDI-UYY^D}zq~!3C8q6o#mw(RLIe?UbncM^Vh{; zglL@iEJT_pz%jo%|LGUj$WumjqSKMVa57X*ND7jP2^ov;5|&*<(BO>tz{bOuq79Mp z4T_IntXSp6p2UVt3R>sBIg3^$t2hgH*UOc&E%Tf*XS@z(8lzy}<@eVHC*wCjT3{-=$sx8Jt!@6#p5E?pAp z#deNxAe6IT;21KO@7mS_VlxL{P0Alv^{R5h60kpPEyt^f4#}mFURs7N6DBn^_>W6d zMH%Ek%~>{H{wwP;V(sbOw9gSMNr5g!G8cR^oEK9$&hl8@Op-&E zb7ll*40T5#Pcv$Ich5}M#20zzr%&LWlhuG0P4iP`ii39U%aX_ogN|k_xs8EEUaSDE zgmnm9Dqc$Oc~8Q;lc}%MncQ_>qG>n{2LnvVq^ZH9$4@pa>S^U~oFz(53AGZJ`EO^( z4nD^6ID(53utBcr!NG|}GP#gii-#^+2_axO)g{Ur+(VI400YECKsvbc+R9tnZyvIII0r`vJQ3ZvxIw*%v>2(W3JbBtYC2>7YjGHssM-%)6M- z`u1KkOjc#HHZ6YoJo8HzHvo@@DKwLfo3=H$<)~5}jAYI*L%6^4)8evII>DqKN{(XNoW>O9>r{6&i1P$Hzq}Op$*;!jRbe<-A8^I;>Z(%lqo?)-{?oFl*=Vx^?S< z#AV2A(;2Q~l2h_md|)FrJ$C;n01mH6{AeqlJxIcFH|0F3Mi##RtdzhH&eYZ*pJ| zgc7FO#WB|(_%L(33OoH*gkZpBQi5uRlOIzS>tl8W)ZIzkXd(i|Umk~@5`#s=49RTA zQ1aW^4q7Vh9oQfdw4`a<+@me_$v%*9^Ov%1eEQTW?VY>gIS8p^fP&cjd#9J7a%me~ zxFrAH%X?==?IR+9D?@7vC4hW(GAbM~%*tkty%Dt~H^m`k&#o0eHo9r7yz+a<+{7g- zsu79+$E=?Z``gcvY3&BV33H@X5?4nxEu4wH6d|%l@4sspeLCPd=RKpZlx|nL&YC-K z-7mV>_$%*TrN8@;=;sX|O9d`5AWATen+x!-bB<@C%xcUN)+!+(K^!xpRs$3p!+S;K zDi_C`u!2{;GVQ55o!;GS?)cY@+7!#_o4dam!cC0d%=E~yV*{wO0T6p+7GtQal{c?_ zMVfv2h63M1pcTgM43oymYr#dRdXY1o8r_;VB-@-q+R`quxla?5y_PBUeZreKUcyU! z7kx)ALsHZDi(-iM+9%VIxCh7``O#r1wSn+R$AW`{&)d?83cdd>sGHvAUZE4cEN#P! z%`WZgz9_)u-8P@;*xn=G6{=Lvb7*cIP|`uWxvgYEO8^D>P#&*bn<$`#?g16n`ias; z5>ikQqY8)i<-toZa> zC_a5ESF%d>{y5#-W?#1z?yq_mdX6yO!TnMEZf7`Ys&Q1|#QU^XPkYtRa#6s#Zikb$ zzP9gQ9O}m_n5OvNI5dAd{YW}=5$KUXsScmuf7(@o(^tu4G0FvmSr6vb&{{x;Aqo#! zK34y@5LVO3kqPz4!F)VJjd&u0ZuR;wABor|x#M}{Pd%|`cE$hD!zgp+wxe#!2ENr#3C1Dj_N@2yiy@6WwgD=g1{(nVM8K&H~u{3+}YF1XpoRm}9ddxe))P*bG*PP*rx zJ6h%4nd=hgP}6PFg073rc7$ITn;4$CrRD9?Q)zp*=Rhcr7xFdtZDg&C=B5SfKr=AG zRvJysEfx|{94Iy5ipn{t?^AIaoMnEpRa}et$%sLQ({zHDfnVv45K3jgM4;1M?N8et ze3Home70gfS0}Fy27*S3?d{~g{l3z~!;71WOo%xMm5@S0cE~k{U1?CtvR=P@ufg~w zD%Xh<=NMPX+$amF65X55uuC9t4r6C}#caJ$??$56u$quvpPiG--{;{HHM9P?dWu+rKHm zCr3g7V_j>;wQ!qRlC{mLsCZ{y;{ja&qD@7|EgOS2mz1loohloBLr2B|a&7cOh%Z}A za^4m8&v!2vSzurvqh)J`M2<3!~<`4XxhsAg+14aZT6^E~7MMF2pbQw#n zyp`pZrv{ByIEbr1z&uhrHLB;km%XB}4r?2L`0|5EptWAjRua=>E}&8wb0?QD`C)hN zbQ&Lf9=S!@ha#DC_S}JR1GQw7j$dvCdQ=|bXwmfVn^p99idA&}=VEC?^ysfW1B(KpS#c5?==IIMTC#$qxVKfQ!GEQbr`(s~)!uDrvV$>H&LG>X zo65SKTWJn^qSjW&WgtP9OhL8mDB+cyL^XEio*gTl!h(8 zBOaH7hxnT%`5&eA98lqEZFgpzsTb6B+iX~}-%unJo_8(kfZR}xE zSXET1ZQ=hUF*mI6exTf8(mcaUz_ul*=q+yN1tB8>EdYL$@iCvD2kYFRq7Vs! zxBLs0(mJeREtN+H3FG1^DC4xm7d7nnYm@Ja;|+pb!L^1l9;A#(@wg{yNH9WxUPY&a z$b<8~6o=_SfNlnXOZP_A@wt23ksDq;y3&yYDPxT{bZ%&S`jKYx-HYf(feuKy6!wX_ zM!7z}YfcL%3&Z%JH4<~`me39Jl3B+Ei1Ns9OswU08sSr_m%yUL~L}t%uV1%REUun0Wswj1FB^7S&{w8AFbWDh&+wmk9(9dCdMzRj^L;eF@Fc+oJs)Pi z_Z^)JWRlgmhRH7Bl+^&3E1T$x4?xxAmhuF) zK7b#P_yu5JVPa(LoZI#;l+;`vGb2~m0Jl)7pG)#FGE?edu3C%w6dNLiAoS-1;(7to zjd%#hxmkH0OZIe}q50=Bc!PMR9M+XJaP`2VQX=fPu?>hrrVy2F(6J+vG6)=%%Jo0` zpQurMe(iNnGDk}4x4V^GzoM;i|DJ$u12s{K^Qx-qARQ?m=dy&eMx%K_?BrIFA+C!a z^X2akVd^weD6)-bq~vG6g#Zn+23j0EaNvqVMRPNv1%%hxIH~S3t51x0Lw$K45oMjoSjCP1{tGK^rdaa9X7eU2zZ(zNwk z(9w}_M0a4mLuQ{+Y1D7Kt`-9{ThtA;n>#nld5+cY#H@HycBY=~&|zJ2dHP>m{bICo z42J}GvDsDItb^JQI~t=9BX-mI(8a5`E)-v-{x#g;Wr7lP4hrN4Ee&uES!&Sq8ou}@ z(Mj`o-mN4W;j8zA`F7<-Z894nm3(&QO=HwGJX!`J_n8=Dd${N`HyD<<-a9?zNZTJb z!Q~x|_7ThkH(C9JeLeRs+pK-vJ_L^7e`OALT9h+~NoU=B0hs;7h(?8>TocqbHk@w= zJ3f|HX5cTeIU*3{`z6rAi_%k>7+Bq+zK=`c5jy{aqOhYYdCt0)7?F*^$>of^>foPg z4u4J#0$%o1t|y-Tgj!5E5Y~2*UiE6pQ`gjLETfa?stC;Q6j0>xSgU)L4mvqa`lQu= zGux`yKe$3w9ZnmNIGBDFrv)^@?d~-C)21=1E^DyLx2D9VDhjX3-r)8I<%jeyP_jS# zJE^sPE(x3lXUR@Ym#AeKOUZpyawPoMidscE!?{c(MOYn+3?%nSV#!F5_LE6R-D||# z@A(&|(4l&Zm+8j>f2S4XGIKzW!kBcG!O61Q{sxZy+9C)e_vq|$5{apX?%uG}Vr81W1cbUa9=_wzQ;sR&+ zd|yuaa$p>-5@*X3(h&Ta5mEoh?tS}T@9cKS{m|pRu@*`mr@1G4AKiJHwzmFv--1|d zD>VgpmlY0Y$fj!smH~1iK@1M-=YQV*{|CjOnznhup&&q-1Afg%znbAVM>B;p6x)nTr?-fM~q%^)5Q9rfL)iLam7Y z2l+l*AC6CIfuGDBc$))TufJD zmlb;QVm3k`+GFC;hI2iZ7WkC5ICh^Ah!!(BJ9(B?V0zpt zT|X5Ua;p?4H!d~ws<6@clLDjd-<8EgqXEAO>d4cAeVdO-P_A_;F02X}dZx_e)sL#t zu}Mtg-pgk8KNa6;>D9wNh?iey+ET6<@#fr`b6(W=#ZkI7;y>QF+0)dzea!0{N6uwt zjgC1FUT!?bIoc4_@&IF#4g9jI#Xt2eyfuF2s`ygkN&f=#a z99DFdqU@3!Km>3Zf#Crnb`%7Wm_^gW61gcPuVO?Yad8YVukhJ;oR(ghT&GgQL^{J~ zMTxMcx2itbo1XVL?xD5mcY$)HE21bPm8xn$SQzL=J5|JSf`zQ8c0?`#(C)qTO*fY= z)i-)TY|VuImy|4+Fg1lsI&gz5#gNb70bP$tQoYa(*CxZYddL|#c|1A!v5d{Wn7}06>sn~-r$^ZUbT~(?%I$J2m$TsZ_*scz#VdU%6eMOK1}SVV z1m$!R9Ge)McJQ#evw3fS>+5LqJEdk?4eAix!ugq5;1Mazgh}O2%PlF&$_OiZ!xl34 znIN8?*%XKhJ);#96QlpnHQCVBw2FQwjzc;V&nUyFY28Z(zphhEJ#{x3AN{}ISLFxl zDfR$vLd=?PI+P!%n1-xLv@}hM&WE_c@gmVl8i|;a_bphq5+W|H0$N^4f<{%1WR8Q~ zc~U7yu@f;#mLGD6w0qWWXrtRMS{?3Xu32h&uAF-!!V{vxt#Kzd+pr8c8`X1Hw>S+D5!j z+U1&lYxnKb+Al{Bn{X<+MV@YICm3J{zJnbjKqV3aHd+FP@4i}aVf3zUQ2;%>MP{DU z8J9ILU=$+R2FFlzZQ99BJy$d?E-_zP%ga9OxNhzr0#~78_%77 zRFdCjqU(kSs24xgp0O^gAGhCAr2fHV!!NH1t`XxuXgi0rl4}k4Zjyvx;hdz+fe0Pj z(zDPaD>UC*TwUaV`J4>CYV+RN&oXZr!3hO2pv<*ka}>fAbY+`@lBdx6S=V zwYHW__7?G`Xgq|PfHD~qTwQmX^bRBxh#J9Pzv|nI`C-%%NhZNm)46wq_r9n4RxR%l#!FsJ z-dEJ9rfmo7_D^$KFS9g0TTTfJ5Xc@PQ|xyA@GXosjIfx0F+oHgtS`%5=lgz?uI$d8 zmj#y(BYTmXnt?nVjD{pF%9KqyT@xSEgUYmtb)u4^@t}A5%8&W?i5^wZvr=m*A;%a3 zfTN-;@ZU)|BKCvQmFwuN>fe+qILGhRZ_K`!uOqmb)>x(somhE zcm1NXs$>h&GV<66$syyjQ?zM?o&dWdB%*NhsjA#Slfk4Z_5>aN8#6G?Qe+&Jb|vU4JDJN5^A0 zmaI;$CCjjY4kPUdoBeNh?R@p9d{B+V)t@iW!p8%POyUdB`obw<;^!PxD(-KT+XmB? zB8M)#ciQ5D%*tBcwR6nIh_VI1#-Cv*p?}?p_Tp7DVHNO zj+RHRbG3+Om`5RT+SH5b&%PNl*!GXjs05l^1FxvNA-kLDW_Eo!UO~f#=z|n4UBSH( z3DEBY>#2=1T}OSR@5ms&XNjd>Sqgx*<#)F9VNqC;-yZr6SuSP~)e@o{>qq z_cHFMIlO;T>*{IvY6;pMstlMj6kUNKJtGq~c(GE2J!BH2!?hnqrAE7! zoQ}fe6F0`}N>Nc_X@E2X>zaETl2beB6UEVxQZ*o;EfP)zkgi}pXyL-n)sst5lMVjx zYZe|OgF_z^r?+WARacUGQ|Dh8 zuhiFHTSIQOe_I!{zA7mXqGpt%RO-067KX>ucXtb!^?1{sMUNJ(b_^FY+nY-{mc?(^ znCd+!u4s0kkfz#Cf?27(7~+(EGBe*MdCl1DkB&#jp6Zo+$x7=|=AO*(n9^g3hZ`@; z7#z8!%rbO&vjBak3lI7}q4sWK=sby9^GTqj!s4~33^H^T-laj+% zKDP6Wy8PW4LO6tg099tYOFj!Dl5`%Ugs>wMp%2u^NNI!g4BSf#150DKxPF|%MuSY` z6%=fc&}Y1oF=QTM zT(>`tBNYV<3q{i-W|I{CnmzbS#nGw+bsiclu0tBu9?tZaien(G5mHo*j7K0Sqj1wv5UpF#SzfQQ7>%uB%Aw zPemIrg2YH+7%P5?Z_rjnw1D59PA@A5jvUg6fG#`ec*O9ZAY1TLm<$UYE*psmF@H*` zjm8%^IJmOz1ll?=Qy9Hi&M5RzqjoYEsOp-?@|lIx1PM*f{zWv|)f8Jr8MO~oS3Vd{ zKTM{0N;&KR(6}Z292n$!@BD2hS?y}Oeue;l{Q^T!1`sC&0uY-p3hiGQM<=D!(mrqN zy~O<2Uw>5+dT4Xnd|xeXYrjSXSA48tj3u4beAYOX**l2{lV?PBmpr35E>r>TwSH>V zYJh})5uX=;Nnj@Rp^S3Cs9e>bw68-H*Z4C5SzU!*KILI+IK@Q__$Bogzc_V>nEEZ z1ffnDi{jX~)Y*02hvfXCvb4n(f><3q7)hVq2N;%0+A14?l7|c@BeT+|)D$cUyT1i7$FIAf#xAYMQn8XWpm&8fbg9 z;g;)7)bz~E3cD-OQso7~wC+8}##5@W7$ZB`Hq)zV$H;k}r=QhEFsZU+!K+&(fbz_l zdnn1sUw&pl@SPP1Ufcivu~El3EI5)bveN+kWARLq<+lG5 z73o1Ho_tc7C09-Lyrb`-Luu$I?hST%S4SWtnTe8SpuZm*s~x4F;xk=tF!|HX=T#OA zrPQL;43C1>@?`;pZGoRPNUE1hx4MYw(K?oU{@fiHo@nO2%%AW=O%}jv5G8RR778JB{ z$um9V55By<`~O4Rn}AcD_y5DEWonxCWlAg6(H=_Hvb1-~Qb{WjmF#OOvb1TT)KN&5 ziYSFdWY-W$_E3b7JsH`F^MAd+M>F^D`Au{GujjcQ*WA~2*EDjz-_P=Xzqa>j2&A|H z=t!wt6mRWsanMTYekICiP$;1lS*wTWL68JX{Q6-mV{9Mj>qUOF^{h?mbn{F0la8G4 zpw$aSNCBUe`T@9~kw!MgpuQeUAi=qwxPtYV@Cp1(S?}(6l-K;RbHg8D6a5Dp%Ql~_ zlpgkr)$!vf^REm2H!?1Zp`t3kK?C1nj0o-eVJvGt0RYf;Z};fM>3D%)Drnd9 z5#vcVm49=xe;+IhAuOa>(%5ERDh+!M95~Q2&jvqO@^=_H3TL{HI!p~YEvlV zFZUExbd1Jgh)XcQD$cSJ_H3wuuD z3+sNYgBw3i8s-_`Fe17nNQj2(lD!ec{3ZCa%S`HIJ=u4%-2ZwE|Dqtxc*|c21Za{d z??6SbJGwCV9~5_jR@&;d@z~NOOGX@z!)Bc*GClT;ug8Y^kv86lZ6f6+=`*ozCT)N| z6ZJLSK~66r{Ru*B6Ag!=0CC!`1sp{Uas}<%H@$eR*cYshzxT(~fpu>h_C;QPW$r3! zvvBZi0Bsp4?m`|DAdu)X;YL%L1=ZW2jKkrj_S3Ew-A`5ljV_7~;zH+q#>$kH>R7Q0 zyz{q{+;R~H2l};E-vq6Phh*!(W4TD;aHEXaVUBCzBtpCl{(^|o=FRhkcH_Psxx-O-Vz2R^YDUX-$)^4#sffPjaDO7{TetDMZ^njU|=l!Q} zJ~~#CemH%9G34@5nu_!2(V;VljJ`|D5%Wr(;r34!BZc`cL@Us3Pcb$TN0r}*z8ib` zAf6j_my{WZtLyp??TiO*T-ZO1Wrqo<%Q;H|P)iZ6MRVBi(D_wPzOgsEtJ~J;wnptF z?rn`B=hzdoV&`qVH_bf6aozn(SDq!DlnWKH-gYZJ{6L(tFoFe{6AW%PYm>ern#e$|c_@p}u*6yXCx4WD(C34lN~ zZTezKRI81>+#FY69Y_RO!l9ubN0CM;QhIG982jqXw>R2Jg-5M13R0Xo6y0bZiZ~fq z9Kg4+lBJ3LA|{m_XMps9C$AhmFw}vP2GB(szPj>zpqkh(5NP3GzMXw(8&>YJ?-v5x zDAQtDNr0PkIcMRtb*f~mAiT+G2ji87uPjCQ(llHjKq^CBrG}kJz9~EH+9SOumO^hw z3j5+ode!%38ckqLM!m*oRwv*P`kuh@$DEKtz6EnFaCxSXrhU`c&_KcRPLp)F^IPlWyH?dH-%7W3g;g$qKNu4{<-gta85}p1qbxW{C zfbSIMfUQIHXE81sHiv*aTuW4{Jqim`#SzL4fMXEf2dM{Y2%N%kl@AJT75sKPOcx3Z z*N8Xs_h&8`Y`M7}>7Sr1CKnwD>!f^S&67t7AL2nkKs`++fX}-Iqw_>ozqkBYTKX6O zLj#(BfEXU=(~g6Kv#X85wD6Z}qvhTk9tO2Kxb+K~qAM_~?|6OgTr^o2SGX3<2Q<_v zl4CpHw>LF4kxwFP16^kw9vmk7#WbI3P=d49%-rJs-kfC2lR z7(blSX&>-8BOQ45jEECM?r8=hs>yD69_+8 zR|$UrE{eS&_~MIpjyWh^eDDsM5`sjv_2t<(n-uD!bmcDU+VyuXUAAl&I!78NM&4CA z*)ZTr&Zt1!H4DK_h4_ZlgTl>AN!utp$*|l&)=?Tfj$_JrLo*swdSk*IoI$Aj$(%tz z2&9MJ&)#o%($@tH_t>YT;wSqo-yC-;)#{shv2o<2jj$JE{XV43U+6{2y>m$yC>tK= zV1kJ!i(=!5`5^ZW*#i&SHcMdn!!4~%_CTyLNItH>OAm#dxX(n7-f08)&msN;`og*4 z?jDE-Gu4=v6QY=R|+E}3#;*$v=x+#pAR?G75_LL6}rmfIce!(K)>m#b>eDLDM0 zZQ2w+JJl~!Bu)t#`P=}~Z9%33Vc0Hsn&D(?yPfGfFv}KktWr`!Ru{Re0NSLU@;LdR7T8yf9A<|KZec@YPnq2` zK5arB777e*s{j&{u5^?IkesIEGs6gAVZ07-Xv~tX{e_#=TAkhjq^%y78MFaPJCN-` z(IcBQAOOQ%w?k+`E=@kEW4SqPyra^nu-X0f=nA|$Mpe2AyLHeU0s%VWBUboKgxmcl z09>Cl($fq#2^D$2+-^B{eb$nW)poU21(XYo5Y^y-fDM!lbxlwq6gqp+qkSjeD%h1Y zhzq6kpI%i;!ya})=Std>-H(sIZ)Uqa03m@Puj3v8kU+ zYb;{#GTm6;tj>%B@%N^NAQah4T<;o95*05QSEb6E_Zw0<3vi}{5R(ra*#-<>JEFvT zZ)T3`oP{}SG+>q)%uWIho0?mDV5*2!o9ZEu5tVN6qPXnBw1W@9*EL{>w9JtmH*T!* zNld1RdQ=x^zdWmEa$?ya^#_OomgV|sN!=Hy=GwJuRdAn_=Z!C6$-ACGrq$nEF%SYf zWtpe*ydf+ujk=>l4111Q3lv{N$|ICn&|^NL$%e3=pcoFCu#$|YRF;rHd zopP`kXhc05VnXt4IvF}<5JOL7ut2fH!G$*fYg|}|o)n!0-U5GwrZfPpm4BW%9gl{d zg#F^zlbv9eHxk)!Meeax@7s+}O6QFC_X!g)7;$)2#N2b5QP9)VbqsNn^_wqaRJ*+Z=hHX(o$wu>im{w<$ z-5gf(=W6MnigeX{j(0n=SQC;cP$3JGeCP~rn4+ygn-hg3B`F~bcZB^x@bicK0_s*U@J8}6+I)kI4qRuo+Nk}vx@Gk3N(!KY&R%lBV+u>`4aT~%`f$Xf0q0Mkn(}*BUKXX|LM!%+u-_ z4g+p#mDU#7WhGWSd4Durj{j2=)*nW1w+qwdD1Tf}=o&=hG~*!q63s}fu>gWc_l(#_ z@0Z%lA#gR79vPS+>|u;4TuWy_z-1pnnKJ&?XH#}Hl92DvWaf)0D{7+-i>cS$?0r=d zL`547-U9AWj9L<_PsjSIbze}$LL2}tQ`5U!7elm%kwScfSZZ%YwKZS5d<8c3im&yb zV;ncgk7sFrgU0(>#LxD>*aN=1a5wCOy&rPy11V;Wf6Z$XpIEposkRzP@u%azBLF_gyK6!&zZ- zYD_5DKoWwaj8~xSkS5{-baktr7O%!31X^S+*gy0nVIm%e zukD3yDBY1%Cf){9YLA0gq)5>^Mi66$8@xz;FxIa4^K4W zmJ0DS*ZkQ>22doif1Mt!B7sU;|Dj!D+Dy}TH0BhD4ZIWteB0oTq(sp%A0)h*#Q~NG;62R%gW2%MvgA{3Q&uD`plq6J=P|Vjq-a_tg>wJ;ey58^?`}nR>zThZZ2KmcoPIT$T=@bbx&=@wbl`J4Qye(M*VqOZo8{S0kk|GoOha>=hlONWk znyU}AXZB_*^FlxLO!LfMJF6bYADQVXguEB8lDQX|x|sP`$K=8g+6WW3s^;z)&BT@>+Hz^c0EPe9BG$ zkl~W_Ju`_}eh^C*0&M-sm)OK>dzGhwPTEZ`i!c;sI12u>z-GAb=n5b!KbqXC?dZ_~ zVC1D+FjWTFA-(FA1 z0F&w{mTeNfjca3LGseS38CN13g)yMTRg#ihxwsX_Lfn91xV{DvM)a zOtGgfs@cvpES5OX-t?c^IX&~4W=X)AEJNbrYP2Rnxal7`eAvZcqI2HCIjrj+NqW(L+egt`n^bW<}?+Px_vYh$0sjL)BSqsgD^{RCCWW+s=2*4oWYdphX4v0F6Q$tGaBOS|u|e55Cm2$61WQQeG(%RdG9_y)BroI|&0Md^A$U_K`Lb+4*R- zNkIs8I-W6E^8VLhf={>m@vZ9b(gmOk`HCG2n4P%*x5j$l%&Tr?93f6S;LX5c1tl1J zf=A}775@Tu^Bt;&kXXke4Es1VcNFW%N**5m!H7sdoExNrs!~D|HOTZ-y{5ay_`|b} z+6D>@ZlyRnQYT^spaf!Mw5b<19Q+@< zA&5Az>6hjMtOm&U?1NFDniFs}#3LZg=P1Jmt2q`L+)Am`Hm{{8klMP00BQWmVSaOm zY*E2s%15cUeg=&47Ktkqfkc4_KXtt;{mTFR^D)c-?Po6bI5{!V1;Z|<1W0v+*3)q; z>5c#K;onlq3|;B2a-E(g2_3uXWpa|IW7+LMe}g*;-+_~?6TXEDQ(Gms8*h@~AclGF zLdwSlbKW9;zsO}{f*NxU1OcWW{Nz~if#NzydWbqW)<;TV8uFVeI^o;e2cfEAHsk$-6jjU(Fwh3-%zK>0Dtwx2z}8+{W{ z2~||sgVJd>4*s0Mi(?Q{#z6uC`)T)sNw$@7sC78_s7~A7>KhsDVn#5gqL-YCBLn*C zzq+WiI-5R4WFIa%vLq{mJ#P+ARcz+)PfECgrXIaUS1W__4tWh~oOIbNZOjkAT%|jx zt0(o)J%M9~ZSMW^^DvXaJo4THSq@Daut8~oT4<8WUo_vs)2n~be3HGaQrK(?BFmQ-;>^iObPU)7FE~wvg&7KeH^UBng24zq_HO?z{sM^) zVNb+A4O4Wf>mcdde{>yx;a5XaSLMrGzw9aa^7B^A<7e~2Y z0jn;7jfSBC`XM-lM@-EbR#mvSPSJDJ)-@TDL96n*D6umT_Y^%Rh z0n!1XDW>uL=ebVTAfTmxN$;_B$*#Yi?B4cr@J%Txvi_t%e!CO(Q zf)N+^+8?fS0XXpL#%44vrvno}aG;dJ2~9pZ;Eu>)zmGHM0C<3FF}e9cVK{m2Q6rrt zRdEy53vBJ6_tIO|`s(~|p00APVBbC8YMfuB`-S%*ltjgt0E^KME#lD<@7iSfoZPUS zhP?-q`iXQvL=mNnLTCdF4wgQ_DE+7Dfm&Kxen`y|;p~5Ia0@`8CeBmLN6CzKSG&%J zSb`1h%nXzdBvS~0S`SHjGeUWjb98$uEf+~?Onjj=<`Tj`6 zmMKA~M~v`@NgJL_KXb2kj7}EO9fUwCD`!28kee){U=f>l&^|u&&X+(;<7*fJ83RJB zk;+GLRy0QkKP>W;z!CM|4t!d#i+J?jv@a~JC zM|ny&RGx##t$(?o)EOP5%LWX2%CYYh?|-HB{Q@kr=vO?=V4)z9KGp_>$&sLa;WXJ( zAl{xMI*JfVD&8<7I}A|9IE`pPU?9(mVTXK(rwhg1F6eV2;A_MQPRV9S$)P+UVun6$%Urjk=PFJj=%*PjeHEP8HtZJy`yP-Bst>lLS;_h4}1WYrmV&1 z*NdH%Q)3+zdh=XI4A^2H2WjZN=zpGM{t)06)b(0BF}@00|2d@@$v}z=mV`fS1k%<^ zgYxTTvs}(wevPSXL~|d5W@937HxBV`8k78br)^g0e3f)v163S5{Fod2LvtsZ8gRnG z9j6N6I6yH(e2B{0S>PadV3Ko#izoCQJ6qxeV)lv;4X+)8)?#Hn!v^~e*zuS}xHxI1 zQIy_1Fl^!_nXbjh-O6_Ps`WNiy6_g@ zNhctH3TI?KkS~RZhZ$R<M^(22)I~D*^~<7|yz6+wa`EiRlE8fvtuson%;QjvUY^ z!k0JRv9hR)10qa4(YTAyUnuJdR72Ov0e0cEZGtK~qAL3v4ciypeAg$kNu{^uB!+bk#aaFTU1KrDbN5cfrZ5EyDi)PM1|-So-_-$7F{&K&FTrWO`f6 z80}|Bx?B2p`H1Ncs;W76({(e1Za^m>mclsh%|w10%BbefPjLvx!D)xNcyqd|OoXQI zUFN<*Gv{dE=jFbybf#OqjD=Ha0a>dawO;?-M{d-TF zp6u7UB*#s+e_AJv2JwdlryoIOg=FYJt>g3UNMLn;{J7$FeKaNaNcshY{IK?pv>TE> z14k-Bt_NMqYd!xofZP=q1#{5<;<*YNo@S^(ECT!OJV+dWyTI)g z?-+RH)5eE^h7TQrOOX+eY$abD)9YOS^fxQED*u;~bi*jU$hP10R@SYWBfc}kAQ;9+ z=jW;fSE0nf-+`J(mxM?JEhYa zk(9sz#qMuhKnnJvBFU%y0L%MprIMz1Op~y;S)BqI(2YU^bxCEz?Z;F+Kd#*KN6AF(APPZ|nwMD_lBMMdZpr zL)-JqY^)Qe+zrGtLd^=J2!R+VMA#U#l5WN^g1iMa9dcxbPcYo1{X*v4OJ?WJxP0%Z z?E(w?;jKr4vzd2HP&&cj1hnDj0ic=sWkz$SYLY4$sYm~H+A|2zkS$#FH#lXPRv1t|EgFnSsZt6eKzVr}y!} z+L+X=G{y?(AKk+A%gvElpp}}Sd{#%Zh2r8kNGF=bOh#~kp*K%2}R7|@*sP(o6U{DJb@-%2gpmPRzU*-Ihh9% zyrDwd{Jgn9Ykt3mNU^6@(&Xa~9wM5-m^;8w1h}#8W2>rA(Ex7|V))lobwa*QNg2bO z!;!s84rN>$vekVMMQw^qiq#0Es`Y<2piZYz_5x$v&Tl}Ig@Dt+MF&ScEAS>Y`GAb> z{8`$-Q<9%?Ri)clm?X}BBj{<#Rb?5=_(%uG&ZH3bR2qdlq6%p;&Oeq0+@ut!#$Otc zO00bnbN$}YTTbHdj9f4GO!Qn)Sa;K@B#6jGVi{;AA@rA6{P!sb;so^A*ERh=(73xa zXAGynG#8&U3PhHpuxl8jn4i%#ml?;&I!DQIC{dpBPXd??QJ*ox!v66%NIw5`!@ifp zAtRxYYjDoA^%gty??Er9sO~CSI4wKr;L^lD_f*H0!K%GEy3G0xMKoS*vJN^6M@T

yfy@h9R1!&tXb4bgCO#{qOr8X|l02R=X#ZMQ86d7wDf z5IuHjGA(}!c>}HkbW2umi(lWzIkHJh@=03Y$&iKgM9r-lk6^p%%f^%KrMz3jYEPxH zq(ID63n)bUk(pBL?p|ne64EZ@gXcV0G79*3SA3w=@H>$m}KS%_#8w# z<5vORkbL$iOH5uQw*EdRZu#TFC6p!TW_{;!8uBdgeUaI!#6&JrPeqK%%};ZOIZI*ZWpcpq6Z!a4gTkah$9$t zAh#2FGewsH#Vr4wn?1tl048Ko-U2;-=oz}?`$pN z&4~*OGu>$_b%Xd!1WeEqS%Q5^$!;kx02QOh;NvQE(I9UHvrwh0U@i0UF_zWcOP36t zBtu-@AI|Dbg#!T!(FI>(iGl-aj*A*vt{Y`0Qa*0&R4}-?A@}V%8@SbA$>*6~y@Npv zb%BiG=)9k|DB?0})7u)0M-(pk^Jtj4e3EG^t^r?+QMbc1iJH-$9i;&#t*G6&EcV&${~+P%TmfkJtb&W#3ixG)jmn^ldo+=|>a4DPvU^-X#O ztd3^N7ER5~gpE>wSrCgr=zEkKJDoL#yzVqL3~z*EB|3dO+*x>AKlyST zb%=(AC2z-Q4`F};O@Vhzn0@6aZHC}J3dCI&`zwnBc0>i$DD#aR7pD_I4n};8N2(|q z8h{%G(~|>0b-`Uns-+J`jL>|=f=aWK+Bd2Xqfj5rw4!kfs4OrXj5Yv4p!^L$BMKQ? z0|wgeFf|QZv#V^u4=n&$I|n~3UmAA^Lc&Km=Lk&L`rdK~!xo^j{J;2=lBVS}4Pq)A zEQurgQGC1xfFo+=u(%zEkTO<8L=yQTSa~vkb71xelEAZJM*HA=Mf(iTo(bQV@YJ~+ zKR0UEg6W%3Bjf)Mw$OhGL7vbXrP0s$uE|rXtYn3K)~KA{2fh2CTPT@>B6ARX!8oNt z_}^qx1Q_GCtq99;I*13$M?ZOgEYD|8Xh48~5@Ha@f&dL)8AHieZ9wQDp=c*9h zF?U7{?}{p>zet`fyzoOzs4xCD4l^}z(kEJ`D28Ex1R23-W{r&{uu`**y0L*d!0k2Z za%Rm=5HQ$JKl##Lx0fONJYnlxie8H%aPZP_#NT)v8oL!&^5@aTLxeKmv*8Sm4#&S# zb1k&7usWY}z{%asZGMB>FH6oG#w5{u%)um$>0o~~t|O<)s7Nxl3ou!*T`aUua`@EJ zeiANo256%0Y!^5~HmgfevV#I1= zKoQ9&Fry`1PIGL|SM`(#+vlIW6;}8RO9c(d_F1#};!C8=Zmf(IhmzRD@G4{?Cu!V72wHk55C25i;vNzV#k2Vo(&p z`AfPOUfRrMbW+0==l!tx(6al-FQs1-SBz&(I6)&3kgrEcg(wePc5K}E>Y=@TpvSAv z7%k_uQmauWzj)7)BQ?W4ykqv}Y@63U%%4QH1bSly@ShFs;w4LTCJKOmn_KH~voVO* zH>CgTLeYj4zogI#UVBByd%Kxdc^})9gNC^M@%K>{hUSgry_As0-{zoRC{R8~06gZT zZ{PRw?x*!T&sul~8FiH1kE@j0CG>0L;U$gw;uT07-NHpPiCl;sE9U>XPj6+@%3HOE zCrxzaErgETED+Z}E>kq|4L1Yoa0N2muK?*K8r-UPurmJQfmZ-&;k&Hp3C3uUo*5!h zX3_uSL)8Ar-1=s**djEam6RjUfo_FX7Gzi9bWs7hgQYLuBlQem>e$}6K_tWTfyp(JG_I zuV8#)kDR7?o`+SALcdmj-<_~K*~1s?;^~F*H7l72KSC-eMndE(`N?ZSp+SmVq<~qv zV1bQ_sV5;PU$t@+OPHpkfDQxFaKq|bOWVn!q)%qNp{a`TGcapy!&_Hv3*l1l{FCJs z1&pYli_RW#CduLR-s=BoJhU;Z_j-U@c@S%hJVp z($dnJ4jT|jKl`e7rd-O@TL1~cc~AyC*0hia;yq~=3ilm$^nZ|I+efc=aYr2kga_rG zFo%*gF*YatNNKA!QgQesDf>JfcF6L10qC1#t0>VHtR-_}`vXxXD@aXg|JL9+@of&7 z2=K6vZ9A3lUC>sT6F0uFexayBP>0mV;HxK|6dNY>+*;=|ySG{O;Lhy!W&KT=IR*#w zV!ZZPg(fETjI=RnG0DolbMNBUSk*S?oC0$PfBS*n?6szru>~RYJ&ue{d>FqhY{q`C z_I6(%o72Uk8=ITl0z9LKDGg_?mA-1j3Fk7ivTjwhps-W&LS4CyJM>I)@=%qGMF89x zg~O&0hrIlOjY@9Hy1Mi0#+zLkNJ_D^us~UXyj`3-Kpr%Prb-scTyOOPlgR;-c{wo& zfPxsRN$8GmXK%3~-x#S*hK#A_eR;@>U^8223%8`Cgldi#N56eATFAR?H_vx8OIwB4 zQ-J0X_j!uM&t6+{_cO-$RzMXY&PThNrCNv|5;)ObzXK{+j75a|tKMm*NiGJLpcs3M z`8q$Ov&h|$_;aH^I!9uB|KGXZj=b*6EiMiMh_a1K-|ury$nK^~Q7gbIpihE3wgOVz zVPzSi;P+_IcbI+0Qp&;_^mqVjW+adZDNzZs{PgUcTslPPBugf)j4(Xhp6IYD^h}yC zkbRa_>A8eWw4twDLGo-fA@Z{`QZEeeqU`4Vp>C4+wIZ_ z<%ot?!GiVif6VJINHQ&Sjpk{L{}`omOUhyWg_vK0Pgac#(imtj9kO66Pp^IO1j5AZ z!4n8GUbk>nyru79DAkP673oJKgg@Uu(eFH?OH{|p2r>_D?{ViGSlR~tuiKwA2lQ>A;c^v`9M^k9i|fyHd7zXAqZy z^vp8tJ~ZL(RJ+D~jok(^lBCLLCS&8`6bdBBL!v}E+S+2rWal?fR61!_M?lZnEk0}9 zOypnhnW#8i$7MyC?9Tcs$=QhQDi_LHPE#ubs{xLHp zN#a}otrJW4@6(XCKmyzkn4m{3MyiXjgq*8sQhyYs)PdrR zJMy8^J`J&YyW!z8N$R&2Ua-KrTN()1=D5&MOhkONNg-yig`#k` z{_w8cG6F-BCDT0+!3KjX#i{Fe|5=HoM!UVu5O7er$R?T`$nP%fSPYt^h}%dnqx%v4 zwumI&KfrslG|cF^%APtyOWn==$%<~?-cN8Hk-C=BX{gWdeGe_~0~`TN_kucYn38pG zamB`6MZ2EIw$v-=1w9|g)~V_BP`A)F&GgF|sNGOgbL~32Kj-n|&#k9A6vDpm8y)Cd zVUS>{di%-b&9#ej1#%q{x+5FEckFL1G0>hesMyqR0pQpj;=d2vh?SBnJrhi~0nQL(002TM2P>th(&fK3qGdW<4=U{39| z`o6`s#PHXymY2RyW;TuZCjG$wxV4I=*~?#S0GkkzOVAYQzb8$aRMM;iueBTE*>LKY zcATxp&wK!((`XnY&7@~>69?A(CL{^f;Z`m-HnQaoJ(uhk@570R4yV@*#~eqwcO_zdOknqRM`Kc~!RzaD519su6BMYjx_On4eQ(2|vT`3| zq(4m~XD;U9dP%xXOO3_y$RKHO`N`_BG$asZJs=C@h8RbD30J5_96j_~WV6HygbwzY z_#=*VsfnuTtR$LR2H5Gj1J7R5B15<&#!~OS@@568ou$=uCd`m9*p->uNK^r~c$`tr zn>Rbb*1;!A-7ACuS~LlDagg_YMWNhpqYuTEB*94csOGy{0OjxRJXvSB2TPc|fe=(+ z{#mqa^bppt9LQgUIW(Y!PO=eRR~p0i4=9LBBox|h=EcPKZh71{PEcR2H79pj5IbX! z)Pl;f^=asj+LdX zPcOzGfJB+-=3Cx=;t+!GDli*^>`mY6u42^&$e0pMcta2}}P z;^hXUrfx_Pt{*?RO0T6|uv)eI(T8wdk!#jape&v{cP&0a-ld82DLKIBWYuM#sIIi` zAm3H(MX})~cU{#Ciay9lm{)C}1N63@Z(h|a=L1n?bJ9=|Ek;oVa2f(cU(B8&Zxer2 zvcrlEp;o6DYzTBQ77PKq8`|n}2f8&`EK5x47DmsO&d78Bu_DUtV*rL@ouK0k-#(MP?(JMlot*|AHf9q8r|iS`cfw%vu=pk`c!W+IxnaO(e|+ z1>&(tR5a{BU$L)Q_8y_BSw5@xkg5cG=WX9+mcS>tvjFP`@9^Km78|8;fU=M0=o`(2~#q9O{KPw%UAXA29nmk4Lfb=Yw3v4xKOxS+d}aVQeZu zxrQ3#GwAvt*78Y{C;vWeTCv6QQHn-jv4{!A#I1%Y^Su;iju?8{VZ6|3=$mQz@RKGj~ntG5*+PbrKcm@&t;~B!A*)K#VsG%D|`i))jN{V;GN@) zr+x^V=8*Er8=jsILA|**3qlpxlEh0y0UBFq-EJ*w3C*NIeeON@L5@65udnYki>ibz zkc{q7SU6{7c*Xj|lxJ>kzIDr%?YL>drcddN1?DQ-^dthA5*h&bpZ7ed(=?9r*9};h zZW?j^{P6y&X-Q-ewvA6ppQA-T6{&{y?+?bIN-Xc8=(?I3#tn`OT3EtIm+o~mUMc0# z*UsA}S{IEUvjM`|qVCpe5;T$6Rz3{GOy{>=Rbd9N!l0+8)z1nv>7F(>MEpa8NxjEACmA z#Z388dI(r)y$)mUUnlAehAj z4ISLC@X;V=##r{%A{2c|6{fQOrSS(%Gf(J+*WwmIE6uo`&o0^tk_WHjPIf&FG^?tv zj+uJpsg>lWyN}IBG+!OvaO}xWX(XrI#Z#f92kUXh3Z3%-iL(_ZnXK0eb6zm)IDg5} z)K|#%3K6H#fgxPc@ebooxM=PvRj~FGfa>?8@WO?e)vfSY>Sq;CW#&}heU5_@7Z!oo znQz~Y=@WmeSa5oIXdExOWWH8Mhjn(n z*EOezAk5c-_X3IEGpubPXF{6tFDTWb+l`>6#2qYGE_E?wVo{G5mz#e`L2NtufPvSC z3>*Z9vj#8?DpeOkSH%<)ddoN2?W-(G(m4HmAZcUtA~_lL!h^0+r@x((4Xs}4>ovuW7IE); zyfvY(%Qfl>e^$n^+GV$0ny$oR z?f8VF3Adfy1Kc$Q>NEsd`#D48MKO zASWIjQ<3jEOb|rU_Zm^4r4f+1FFzQ+7d20yT5Qd|i*xc3O9E}}QCZJMpn z6qI+&ikKiwqr#9Ox}jepZLj=^kzRXkTs2`;M+`?tsnfCgk-2urfV}el_+;(7dnsrM z`79K_sw%k9y?o^HJ#BUBuIc`tKOZiTQFNZHBE6Orlva>sK^UT)i{>;8$4Ie5mknj6;(GYvhgqI9nhn4it|iVHZwLMh79_h%JD?c8Jthp`!=g zLXTsy;!+eE%qS$5fcvdm4`Aa4OZDDJl7o^P_OrW59QgX_Z2c+iGI+Mq0I;PfPx;XT ztTJGtAy9rt$Jil6m!?*vMh#(I(!_q8reSu5UNJK+Zyf9Hc&Mr%I%351~KHySz?&RVrQ0;(#9XM@Pf|j4L z=H$}`7X&pXddi*1a{!FGY@Tbu2Lb=k88**E(7kT7uy_VO6buF)NXXpvPB1i=ph-i* z18714cL>i_75d*k!+00tt08Lu%_Nil}yr1aNbZtu0W0ZFjHiAKba!KOkpV|eB zHKE{C)6uz)TYpK%VV8;3ZkR94?^6wB=Lez)gggX^=reJ;9Skc5A^!L2cB#AjByI}i z4}ccT%?St$d_x!XKYo7tO&d+`29Q!lrHOWN6i5WHFqa`5d+&izSR^o}5s@-9BeH%N zt{v2jREE>#Jz+syR$vaVecEh|=R5Qq+71L-Ud!yh(Ifl9z<*q5$-{g5Dpfa0P3W8* zo&iqAz-!hVAM{*5D(1g#4Pfx>NB8c%G~;vu@JFS8J6nvh@`+U*aUWIMW&+k}UfN>K zD>atzAG7S1%E;Wle0wZ3hZeFayzC*Droe;gm!pSR!9#%45CaAYzDuD&^N9+GMMWhf z)FH$D7drXiG(C(&nozp?$=-VaXBu3@v&G1#=4ek=RSL+azJnKGu8;aY*FW9|!@#N^sX3blG%v_Yf;O9}|bJ?f{Uj*1f8Ti*JLl$T~p)0F+WpY?m zDZ-j-4C3B7|^D@7s7NP9tc#?eZHSRXj(y1Yk>gYw3 zpbWt^mz9+3DiRZ$)j#>$Z|MD{44-EA)^6bBZ_x`~xig>5S>5>s&o{D9Z7eT4W`=p; zso>Vm^20WprMBeDEc7e-#yg?WG0f+>_>-EP)w~b+1?i1ntyKo{a;>!t9-u+6Z?Qjxg}F6|B9@WX}mVyuUiYjG2- zk62{qGi&m%&s|T?8UEL8T(GS8*CD7lFJHdQtT-_iYGj(2K|_tUzQy`y+=PyjcuzFr zbPUT0F0)7YFQ`trGEwr*Rr7jQ?DGGWB6FBn$^-#OQV%4Y90HHFByCnpO za?4Q%I3A3oE@rxT8mVW7aV6vrswJKZu2sDq>bw9MWf_Z0j{j+y5MOguGShcWtRiNy z{_?xt<$?zl@>&PvdlV;s^D+rD{j*6>>okly11Y6e9WF68HDzOCTa)ZReB0~cXL&Ew zcf}rmOQ*+)FT*OPDLh_Sl+c~i7ZTeT{~^{UZPwN7=^|QoK9ctF%G>an zHw|CkHL|n)LqC>xA;_xt^5n=r?{7O`Vv5MKXuG%rQMMf}GWZTMGkjJn9k)-C?@q7i zcpM~{pO~VxmAjKWE4Dh$S)$HG|2Lpt#33`o}NDFlTa)UD70e2#Erzsq+Sum!l99E~n%IWUq?V=XcQMm<)!Z;eZlq-nYJG2EmGNa70k$6Bcd0*@@M>!l_OdLV zIW;lI%B&n(Pl-n&b1Jk5`i|Io8y^d(SQVQ;I>? z`kh7ujn6kVjbHz}y4Is^pRwG4e9^AVJz7ECFQnxxGLxF<2d~c0v8r_q&41G&+Vn?3 zV13TUuBGxKDy`<`HjR3`M>9n_yyOdi*icByPE9kRjRWcLKkuz z%DcU?6C2`U>#qqm#*8)WXddO(UM0#qa6qs(;!0@$G(h6@4X#t_R}ck?x9ha+z8~aU zG(}{{1|?kac-^o^fLmvC?2{^Rg&}{1(GE@Aqoy_=Wh^5ixHJzX4j#SQx^-t8Zc-fe zg87?W#WsEFKEK*&_zj8cX^T6i=$>P>I}xU=V{vpnN(-PSd^E=xV=eKYF#YtKH(WOA z?inI0QjSK@t!XvF(S8At!vAu=@sA2+N(rHve27CVxB6{@I8t{atr~WsT-f-^+UztM zQg;!}lCO4zfFP!6-pqH`bX{*C%_kUY_T5db4&Pq@&^z*c|M61e=;uZ!h%iE!30yD7 z;gjmz8n>9{sS+aLhq%5l8e=18U+%cq0&sK_1{W1jLMtuAZ6vb?COXJYXe;hp)why3 zg~UY)Pg=_C;>vqZ9`I;VdcE{IJE1Lld?Ct^s)(Sbvv|v&zne2#oXwGZti14=Kv`o{ zk6NH%_U(dQ>IeL1@|rxpb$f-LnIhK%pJde|@l|~;mR8+cV(bS}Tc#WvbF4{kwN>@^ z$5x$E3!?PjhX-xIxiU3-|J_?BmKTqbNr|kNQYikt?%=y#^BmuM`+^(}98urg-l8fe zLZ8W1$7- znMCM+yfm535#(7W_&0xy+qSyvYkrtt|2dJ{E7vFOKN&&YcwtY|bF|u;yibnur1Ozb z{^L^i*g0$V{!OBw&_(G;G4_@&$I4Clw>^3a;D<_j8@x$x2Y^vPWbG;%OTc)&og zw>YT?$-Vd8RAe)t?7chfG&o796q)j2D9VR#-6hl1>$(g(r`Ofrjgesy~3=ho*wYaaIu%suz4qsMO`zcF#XZ=?0hkDHf7niUQ8vHD|ge~Y_R zdvE9RUe^}hi<$xd=(r6;+k7$J%NYN~ST zNQ4C~ORVpxh2D25aTB-t^315NHByq2jnHxDqZbGSXo_`RA605%*tR!mpd+lb%-S~n zHN}g<0J<-vs9M(k4$WYsLRfApgKl-#bUiND65_PA6y4BKnSi&6glC z2(tl0I%E7hp)Sg(vCzjf1Sawk#`m(5)mLXo8hIl00|K+hn8J0U@BKjxoy%;Ca^MY& z%PIEn$2^3Vr-B0Y*=yRAa1=a5#@a$3D=s7$ilU3in2*C2;sKVncF*TFhx+Vv`^Q>O zx_tt@t%615ZJkWKPu#Na_1Q>uV1J$8oWkC&3jKWppW_1!C!9&!WEUH@>nd7Q!{Alb z@5E6Wy0M$ztIgxc3OjhS^(!hx)is-Luw}$o3UkzbI~SflmdNw1n^Q3CG4K7?l_4`a zJq&U@Mou|q^lp!@LBGzcmYcWS@7>#{?3UL2UC-Hadx3S*lVyeJsJq zkLZmt*dO>uf5*xo-;SK-FS4O&{#}~f&^0IAO=8+*ug+Szt44iuWM`OZQ;=)<;}E~* z?Te-uoH(EuK#+uT@wPk}s3<_1;KoFxOR3ek+&VPlYz|Q36}E3nftzrlX41%)llKcN z>^c@sZKsIHwNV%HwgQ61)__9TIm2>VdKlo!*?+;6*JfM7R#@xaItJ-zu`u&IKax2W zI0s1sQdVqAkg)%}w@knOSbP;0XUUU__-213RlmJ0*L`{HGH^Nh;U%ksMvR>ifOv5x z=@evHJLD7K@|5h8l9cz@3e21`9my+XF(l>~G{!M7C6u>B=8Gte$wPF`K-KoH{nW%8 zb=FdL<6qXPZ1L$hSNyTIwn|B-8$M`D!H6AE#p@v9IcynDFAza196CZKc0u!!t0 z>gYL5^KLuv8%!=AZ3FCL{774n>4$pM8+R90^Kk?{Li+_ose$-U@cAX*_Es7Ni8qG` zh7yO57Re;0W-6@B?i?v-WXkRPj1%yk@q<`rK5LfC`TwND*aWgluIr;E?Jb&9h>8sk zv?dJK%m<%Bf|aKwZQs5{;stY*-6CCQ$?PQT9e)~7Yk|SD%h{bR$jCU>!-E6#S)r_^ zPgvH~*&V~eg+xSDXjUt%7N8wOm=5eIIxw8oi|5ZzA%JDrPE^mPcJa#eKZU*&J1_ZG zt1Q2j>wlTAlFMv9lXX;jho19$oOn;as%uYq+1)157aO>{Dn1qCceioT&OQ_LurGQx zP^&7Rn{ldom1X`un{OS3!A~CLpU95eB5HbS{m9I5O+HC>0d8$+4fhLj^4d%j0((a! zCCV7MBuZKOx`)|l*p8oVq`ye!>7D_n5j`_!Sp88bzJE^j$IDR0oV|Bldq*v zc5jsbXsg<8wVS@)!4Zk(S48?ce_0YHd;k8zJE1Axo7>7{Lq4&U=SZz>$ao~{kpF@H z$CPUOqXboS+Y$v6d>KF_p|2r5wk^Exd5>EcD!VydIb-UVW))kkhYp)tU%Y1RgVJXH z6?V4;O8aeGl-XlFJPX$BBlRKnD|DQ=f&#_o(MTG2ad$6Gnb-OpCJOtuuBe>4rgmGK zPse<&POLZbeu=n*lG)Sp^Y%XQZ!w+2?A+a5L7LZkB>_2T* z`n_D+Zsiu1KY6-`IMed(D;G6jWJ6yJ3cx|^tN~mJQQ8}ksHuA5WjA| zPmFATs$0i5hcyA}GmC?Pt_;7Ux%!&T6SEnmr6)N1d*7XFR%lS1625mCHvpPJK1j$> zp1gbIS`nSKG$fetE3?ZoSryAWqA$0cmej6q8)^Y@mfVpo+3>_o68~@ekzRkNXt*+tp}xEn-E+ zHhB*1jYCfYP#b1tU}XqAG3siONnUj^<)z^;76-((J797&-G}}Ink3N+I^d9jW|##2 z`75`AA(eHu0mR2}yp3hJSP^>guy{?S#)*AUKD|PuHegy~_fZ$t5yVZ*qJMLHq<`3) z)$S6i_n$%lMRP3>OGCp5Nij>!ZXw-4U~mwSd|4i!gzQ;1h#fs%pe*&g_d#i;QQyhq z9T5sxtRxMk4+=>`nSreJ*~_5npk=AY{0!rc7wPl=i_nFoOo=NfhxLh|0&zx_-FVRV zQA(cx>b{NXRB$M&jcSgQ&-=5*yR^1*pMqiEzPA;*cjI{N55Eo+_&1wW;8#Z+PVdbe z=r)U^>;e7v~JzOX)zFS7OvxSygxKad?8=$X@4K!w?PU zmi_1}ASR$8@0rT51X2We_ei7l7{p&VJ z5tw#Wn^pf$a+lTb3Y>I{$DgRs%~KQ%diNy4G8pbcKxu$dA^%A)eEI%vIYtKt%`|zj z7PE&^{0xOAT!)Mj6-PUcqYW=6T#EnC#lr_$t?|fOOIV6rN+$yR#;44fxJ(wqk8I_l zUjbqCv#*4up-meB@yQ{FX{VULJM}%9P|RL3z&Vu<4FE=CkNail8TV2QT73lhAo&W> zs#B&boNg&z$L6kBu>)uO@=^tiqCs4KzX^|<<{y2oo{|fIKSJzBxh0qj_?vAR^1OVG z7wx0e5+o8}v~p>P@d+!J_RrnM?$@v1rIZLLwrpIxy8aj~`VOr$H9hz+$3DNlQ4($H z2bf7+ORK^_=UgaNF73GG^zpB_UfDGHGH%ZTqw!s*o1X|?`W-hY1yP|0qf9}YwJ=$P z#ruKvVCBZtazf8BIQTR{L9)>h6uww-1JV+qK4L-`udG0<;ooRD!|J(QvW(GS6ewpF zAz3999`u6ghY&i~Qq)y<$(Sx={(G05@p#HL_*5TaT))@2+VzCn(o>jIrn47 zMBg*ADv$Q*)xCr7IS|j-0QMIfID8M3uRfvYGF$hYO$Bb48jBcYc*$ytpm$1f8jFvw zb^Z;@5^XQynh0CJ=?S4Vq}1@qAM=3h1S1pRtpIsNko&7INfd@vmN;i93mh^x0I|A1 zA5^B;@{9(RrMjbNKL!EEj8(_3qb?2x+D9qK1t9D@(9Y3{_0Y19S)k(mkmhFqAyb1o z!fCu zfs&`T?64gH5O|>(W2}dhrY2S7{2$uBJ09!4{rl7&8q&@vloky$GAgs8rDcY$tcaXc zc2@%>qM?ikg{+i4(vn=VlMs?JLuK#heVn?+{d=zKzVFxX^*sK$Uv+ok{C+>YefuxjA;I;@;Hl&B!k@`Ca|r#)K+3fB>sGB&rTMAS&OgR7 zwqknQFk;6=w_bbv(=e=kTy#${S3VGxsOLC~u~Z5Z)&F>6T~S?yu%w!nnSW)Z!%_v=gmJc5+l3Hao;JOQPVgX*#TY*#W79Kgpxn)v(FBUs3p~_ z&kW~0WdeJ+vT(yziYNgg3IE6Xu#6U$OCy%CPPX}@rW!Lj7b>TNU%gUJ4$iVq4(#B` z%E5c?G8^4Enr`L5b(zBQjIn5UHf$%MSzPkqaEOB@{e`DJ7) z1s8`Lrn)c2-QA$N(9TB+=eGQERX82pFIAV$XQ~Gw@a8RivJIZF$sbko6OAlwU6K6Z zpR zsfoshaJ53#@dL_M$9(s80k|e0xpd={Z9+-C0bG;P@LlC_W{w~_33P%lbVpnHD<9Qw z8aDl|RJv-)J|qv|+#%sLxHC`j5dYz;NUP`NZIBvXdXl*_4z5zlG{G6nIO2jUORC;O zgyj?goP0dG+nc`wH{d}(NlCeX7iNzjFpqv@O3_8k;xFI9Wns!VPQQ$eBtgPX` z#qO(sm>A3}SRNd66})j5tL`Om(B~V(&A=>Z=G0}s?IQbB`wGxh0|EkMquD}SU(^}* zzj1qwUBO~zum|hlw(vnLmJz7OCV!0B30r_p84b+vPViqrJ0;QzeUiWb%KVLm{4D{z zN7^Eowycqrtzph|(fz*&C_ypP8S)3If=8it5JKLJ-U%*FR8j(xtM&^Z?#a{dteTew z<6+L0;B&(e9k?U-+e1FLB#cabqOMa73-9j;H3Mh=&6H&0`34DS{8?s zjvrRw34a`~R42Orz*ILO9G=%|J7$?xfKY+5?Vi_Vm!^-FlA5w2e2+lwU?l|v>wtmb z15ZeD{1y6Z564o@GrG3@&d~j5e%Wery_G+HXbky`O>ZZsXFFAR)miN_D82?ui>BY8 zOd|qQ3ye7pedaKl!p8=AwHrAk@Ely8lnyD_CJluFlDtF$b>j z%IP9yl! zt_PB(Yz&vPap2q&CI~Vv>!UAKdgCv#3)4Fy8swP3DDU^qma%jNA_2!}StW8n?O}L( z5Jf58D~qs+CWz$qK zW`|ixfiISO8zpKEmi00iAKH5XEbpxd^;Q2Q!qLRT&+(%t_BP@9` zVv;4HvsGrfaNwJ{+$!4KZw5Ca?GicmMH|Vf1IkL|>MAJE02h>f3~+x^_Rq(h*;wC@ zyTkCppY01e1{QI3%8t$n{^I`mq^ua9gF1|LH2@{F!=vp6pNam-c>wYWkkx3GWdvqpOXxQNWA!Ij@1x|=u&`EdEniT4 zT%63`6nW!%_YQO^Lm9b{U8!rsU=&ISRUa@~pjcrqXE?3{!w4H?jA6tAr8vZc3I!ug zuu?ujMauGR*>fMR8!QUr^O7Mc!^aiWNv;3Jj_D-;P!pRfFXtgcA-yNsa{alxM2(A< zZu>?4D1u&Yje4B;6<8Q(*l4F|myA*U;TA0xIPU2~tU*W(q8>deVQznkp^8(t48x_# z8&bE*O3i;qm0;EB?8h<7DaZX94YkR8<}{a;@fdWI!pO93M638u&ct0PR^NR&iBZ@< zS)9|nvmy266@~ZYy2d*$mzC8er~(i!iTnt{wfO5Ch09AJUB`MC<_b!#6x9STM-^(Z z;LlXkFoKbeDJGw3Ae(n1p?KlS37V}fx6Dse1dVislkH69hr;hy3b0F2P?s(m-U^p2 z)@T%t9j{@_1%c7eEsE2#+2bMbcRUV2jQ;BGD}D3Iek`6Lx(1V8YO*~Zitc)7LQg(e z&d`G~$>*%7dSv**C2u7x(wbLbF6C$k-5}bHqf(RIrT|G16B<8ugMpTTC%^4a8X;JW zAg$k}HhC3?(c=o1J3OPwmDpceS{N?;)AnrIZ$-W(B6c{Df{SRxr^ws5t4fFT-XTFF#m{tLQ+ z*6`XOd^6oMAQDJm227eFKtL=?;zbV&QCrtI) z3dQKD#dR?Ay@5}Qu*Zg*Rpfnu84(#tb@XhctUaya3Ty+k15}Q|pRwzE4sY_AuZE-2 z4tw>zqG^Ja0?Htp2b<|-d~@$;ZuF^*<40z5>(4o~RBshJqJZ!?A1r>5UzE%9`}BYlGI!N*h9f@f(Y;=fd_3 z412hM`Gi5#&>R_lr-b{|2mO=>)&REKZnPov2F~*e^*LU?0wg8`5YlqPT=^U& z9A1ZSXT#pf4H}-9Zgktw>u!Ub-1nE9l+4_Pa-4!%30#pK{3?PuXM*N2vUpJK!b_Z^B&}jM4ejvX9draWpZv(dI^It@&Sag*Ds{>BUv>6 z+I-IAnlbFHie1t*R!cG2o8Zl9R)2lK&Uw+2xsH?^N;o3**xhlX198wp$Ts3Fb@qd~ zO*bD4dT6?i8i`Idwx!dKg6c;{n$k;X^KZ6VGm5zXiwegcTY%LqALvKadSd=mU0daU#beIoV_#x-H5B1TFhD(y1`|S}f<} zaA>glnvJ0jeQW${fWykzcMr(P+bf43Ry>>|NVAsBXdWmU9bJ>GR$6jV{Q9Ja^3$h$ znlY^}+kGF~GwI#CH&-34QFpbt6UrkoEOqoveRbCx|N71K64kS1xNO{}Y}A;o7@d=w zKlj_Dg>_D5Q_W3woG4kLmgW3y$4m)xzpYiLN@aP=6I&laOIIM0E2z_%>z^^1y-2KF zJ2W97;eC>tOb(fbqsycj9_X@wGMXUTk#0}IneDzJ$D(E78DwCJn!Q_#86&5ZQ>c;` zPYk?VP0*ndpoU`chM!-h!M=T7Y8r6F2G}ToOgftzNyjTfz?p|-nHh#3%GHexmE|#7 z;V^il**|QBSc?_fZ0;8lfThM!|5Pc!zpNfK|9Cw`O- zm{MlVCHGiqRE-FA2j5f-mnJSe7j<~%Y)9|a0{Ddl>nc8A_`(r87Mpa{+-cdFHL$9K z=P31%K-6&B0mBX>#E{$~pq5&$3hzo{Gsh236`|m4)p%=VT<`-`wIeG~)G-?J^!DOnLkY=U{w*48&X1FiQQ zI<(Ngu;|0)pq>D^lhKBQ>YKh?KbB+RHJlz5E4!=tkXq(_yPmI+7~D5wQcdc6(xE~; z4iIuACHDS$iPsrmndjfyux<1^@913$&O8uR#+*|W`@4=Hv>Z~CC`a~5e>~IJ$ z&Jz6vMA6MjPeE6>LB3xE6+&TKjw2P0_gj(3E0S~qByKPQc*rMp$IZ3H2y*Ir!8^iY z#$b)1cOgR)isPfe0Gx(EdlBC`uG+d#CcbL>(SXyW!@#MhY~R~nMiV`ldP^roY}uiH zthPNCs5H$u@NNLuEmcLb4E=Pv8(Sd;^fIq{Yn=gDjT;(ixxtD;5N`Z311IyG4$h6Q z=jIo*8&X26O-vmk9s(gH??O|2ULkR@?)P+@!P|+3C1pTvsfof`q`?OHcSh=EIgvDU zYa0rA5^68!){U0Ihy=U{1Ck&7}El*TH@rs;Cq}&RGcm|q8Y(kQV z<{y)`82ahhtE{67Q7t&)f}7PhFVJ&{M@dZWOyJ4iR#m2-I`LfZqr=8Q+f!uxjSVAU z0#6D$7tvvofCXw?-sHCULMxzeKjANo|M0WIawpnqE>2%%ZZ+fy!96HNhAMXN;AgVqM$^E&d+YE&7xEZ0aa9A<=9eM#|seyC&@+LE6C-%ONpFN1i->N@Sde4 zf|H_Cyv}ru5c(Nk9wb228J{`!nMrSFF^w=eD8^Jba(~o;=1Xg0*CPyE#Rc&w;4@IA zUo@2rAxi2x$19I)MxMa|9p2%7?EQnd1!0rAI<9<)^nwMMJk>cEt_#pYzW>#BaF1^w z5ZtLJIAvbZOvgWe{$PLf9-lEu5#A++T3&NhlOsT@kT3kyQt34Uqvo zbPrcRH>|Q-yUX>w%nu$uyvVGs@0C0HWmal{&qWx?-~a-~$IZvjzYYA!JrvpmeH=J> zrHiIU!9N}J!)A|}=!4fbf9o(>N`>keKqs&w?dh?7L51Vh+$EHk)@(l4&~QOi;^3;5 z_nQ_do3?EZO7a_ht5FNygceu2OixE_+Q8;}5vSuKIrx=ccl4TJfI^7%Cmz8!Gg<;J zvM&ljZ_$h!u;72GH*PGaVl(swrbT0(=svqKmuGz1Fi947AT7n#VD)v-~cT-F_ZjODmPJ=N|`aVt1932^?@JdfjZ9eb#T^c)bs%hnb zV!Ib4@h8y-%%c1}b&iA}z!dX&N*lL++jhqdOBe3MIIj0Emb46p*9ABI5hry_nzNef z=k962XB-E*ipc~AZTE=yL>GbGAaLUP%9-Cjj`2~2QiQ_ZZ;cLe_~9;K0{&P`+LP3v z@;JS9s*5+BJStr?ov8%l6d!>=+e(x8ypWtigxPY|tgzdu=yli7`DWO}>GPXNwhk%> zhHE@pO$m|p?e7f}u$w80!}){3L%HGRUH%#7o+ktl0L3E9E0w&4`xC`YvIlQFy_rXK zFEGBkIo5v`AJFMw7IzcO=hZX9UUvKZO)vrx6qOmORpOlNm9XyZ^`1 zA}IqfRZJ-ko`bq)6v^-gpApjDRoxx6dble{>;AmX^6L)-*MY>d3slv87>!bnB}AC# z=j&r26TdFxD^45I=VDfyFtB5>7nk52FWCVVoR>7=#xYA(*7+0lM|-mM@od05ga#OS zzPpcaC{VxyCeBD2axsxML*xEG?( z_5%$;%|NXpegb%3r4RN;&9Nwij)lM+{I;sDdWL52qD`({sN!_YeAPNREq&F#`%U;s zCXcgkG8k<}xVk7X1nguQMM&Lk3VDa$ji#);qkYP%C0Lc5X-;VLm4~@>CiEjOEsC}R zp#gF&c1&J?Sw3MPCt-VThl}-FVh5Afza=V8{j|TKS3JM7@TyhCl(j}+PD@pC9OQvF zR`hNvi7%(;>yv;a8AU$tl&X^sp^4E4TCH;C`89U-CxAl2Bf^{xZswRhm_(p~M``oU z2Nyb^I-^E)?BIg&BJLUZWeeht;cIpt6>t9QARKA*iMn!Kkt~NBRULKNq zMz(E}bJ!+9XrHdMf zc_!>O0Mgh}F$-5i44_L_RV$(11R;Wj?oD(<6y<*0hCrB^`IXwuD^A8o>w*?~}~>fn2NRwb{1fm@ohFC67XPKwoG=&sql9Q50_c z1n__;x;x8h7=P?K{|c#2(Fn4N!mkJ?vR0awqD+l~pd4)v*rTTCNMm?%nwjFMI$k_7 zUBKI3TO^xdjblu*qi-bW%@fJBfUW6BI^op01TcIHNH%1kTft{V zXJAtHK8J^Y4_=d?!%$NBFv3MMWcxpJW)A(xBZ+#Hf+`%S%AZtKm=`Hw=GYHNzQ@rKwCcwv=J%z z*fE#scy7{+5-+DNe!}n&!rWKv8{H zmzQD_2(KXr=fD4|d_FU(8T#k)y@wA+Li^l|qZdCC|M;agt_MPZaG}dj2cD0EVoV=X z?TK-yz?=<%-lEu40)&lNPA%GiY3Z2$x}GUDZ`y^OMgnUWvV$XkyP#<|#(gY*)U)dM zQQETDE6;zw92ktWa5OqPR@w9H(B|T(ZF@zdCl0n%=O#p&3IoD zko1GYMFcL7^N{(#+8L0`ZWJ>t6NsW*KrX+LfL-Mf^Q>BWph>2RFt=EtV2yTYb(_ z{-n;&6J|k3nFHxUWh?k{K4CDq_&1!fsyhEiYz%W#D0yfQRQA|t7iRmFhn19GO8n>QLLU7Ohr|D|-L zXh9`cV(8$gQ8Nm@hHA`R=>2VWoMM0jzuMmK9;ddcB30?l{&82`NZ$nJ4~t_5_nlhk zV;bbo?K_jHM~_ z)+N>ux8ndJ`clHkFxJ~xJBV^X%J34k;~sKF_4OzPe? zpag$u;{=ctTlsGc_iR}sTb&$)#6$zLHy!Hx4nZV+$@^5KT8Cp=G!|ZuziF}sg$Rik z*aM#svOpud@lCVga)YAy=lvQNC&9X3BcK`wK0*l`VALN(vx1{_BbpTgbVTONM|hj1 zBrT$%Hj>y4;5ecfNo**8&@_E!W}Q&Tp%tH-i-Ao7Y6O@RVDjvuj=1Cq+}NyAujKCk z>OC);<4z<=La~vyfrFU7Tm?D<{>Z9frGOZP{LA5#Yc>%m~vBjJy3B8n+78 zzpAqYG+V<|dJbX;;5h^I&s>{N6IjDK0Do1#4>k~M@;qn$vYm-jqcLu^_a{mYk-wHr$KX7FZ9 z;H_&RHQ87MQ*2o5<6SeiC*xiJL|`ss6AMHF$%b>_MKi`NGETx}hn@4Ah1}4tHi(Xp z>rl6tk^6_C%HKW${H2SyAz5yyIHA}jzCT4_;VGoKA%gO@x;!Vv_|XaqRTHrDAT?m% z4t3p(#^s9!q|@-!N@GhC|>o_;m?V=TUF7tc!!o1rVrr70R!l(}<6>o<9 zrHX)o6n`Wg!s6?AQlj|zk z_`O)}J{V%_y>|gi}Fl27`{qSOO+7RwxezaIHn&eF{}Gt3*$>dA(Uj(l~*ic1U5 z;0hwh4?QQW2t7InhXb^*B9z`B@zz`Ab3`6Z4dLbg+wMIEA=R^F`+~9TkW1Z->NfIV zoG!T&zlE)WcxoW7Tw^qTG^~YVp1()MVw?`-6H6_-PP(nhQx`Vwnj-G^$CK)HC%YAr zODNRLqU7NtCO-&8%yj{rkjy+qEf_BT9GbyCW(>F5Idtea)IRI|xGrVlhu<-GZ5}AV8`pp(KJxYb*?DPNbF555zsPKpLcP3 zaU;Wn$+_hA89NkuD)Dgv7}Urq9p`_;3wx?xpf@9-}cyH66c z%LzeNCOByWytev6LK8CfYTjod9oZ(&dX-jlyrO|t+hD*!X4Whe zho@W?(|C|URD+xbB2j-}7W(5r+d5T%#kp34$~jK}TXoBgcFGa$E+~-@Y~Eoae5Pa5Q(0Y6*Q{P$G;G{E4)u z#nQH4_w=Tw_5k6Dg!Z0%vr+AlQEjzV4mY8MFjrZPgm%~$CZ8Vl6f-Iacwe7{O6!_Uc7;Qmvc7^sbXOedKtm_sx;BR&8LSmSeekWEwuw5Ix#WR3-f zGb*^_{5GFC`E_^@mqa9b-3ScPlCG3Cdjw84*`82lnz$OAJ|c$D#2J?a*%u6eX79PU zL*;wyi3h#7mq>a`^lZE$u#9GKOKFfPC*A{PJ>mnCSjmTp>0c}UvBi%cX0fUF@3}s# z`ZhRBoPRXsC`Z&~x;4nY0hHnxyP3#pwaPKhFkJ0zxRE0ESUw8qRI432^W&`zfb1N9 z^aZVZF#ur-?<6$>&5Q}H!)~I9y$AiQIRu@u65dwI`Er{=R3!Jrc*RJyM zvo;rf>Q>9t)v}WT{M_ACybZVOiTqO61JKou4Ux9T>1LuRW!2UbjZdMr_5q2)BIPB! z>kDtu%QcD%HrS?WU)&+3j-wQH$j?5?8+Rii2G{?nLsT|?ZBCmS@>pvj)zk3?&O$W&(a(RF#aS3y{)_6p}D&H3pAnpl+5k zLAPe$iagScq47GHe>VAI&Looq+)CNC5LNmM;2W`C`z&-cRQ?BC<_!T@b+vAWA4Ipw&s{e1*@v z8zTi0TW*=Q+}h0A>$n(5WFO!75Iq}u?(Nrv050C4oSN>|@-^7*dXC*USd+kQ?O42`X+`b8 z&L{}*15AscNCWw6Y>+P!$axSWHGx%PVr7=9IX_XwW_DJ`jDuCZ??g$#QsgIF7;RrS zXTb?i`HVA@aHJcb9Ag+|$V$=n{ua@yDXrXew9!j+dF2A!1gK&T$lVc4cRp2iqj44Y zsv0v>_)!z7MGQ;RyfQ%*xgbQJ_4{go%NzhX0hcvklM?n0!k~CPRE+GC;0He)_#7G- z>S*`5%vY4tBV%H?x{AC;rUIS^pSQ~8(f05tw>!Ql$tmsy9Jl{OiD0k2IfEgo4}6Yx zu$n~m+vWvl*nIMluRu;Rm~C^}^aBoi8>c5n%m*JL?}8^y0g*tDe8Q%$%h(NC6L_6_ z)YR0jP2WJ-KG?E$@Nf4_17&I_wyFB*fYX#`51Sif*aDF>KLL^TxH}Tmda|&V;W5d{ z6D7UrNBm*9Hd7r3rZCaZF}MF}O#uM_oNlZ+xEhNAKh5OihFr`Gw`*}_;W9n| znjspYP?Qmx(6XtgG{3KJAZ{9zeB_DpYJe6#U~SbBSdCCf&HSpzj~`=6?*|$Sllmr~ z9m1@<6)+=Kam_^ix~AQbC({|+o`YYz1yyN-g}u~`6Y2(wnQ4n#;~E(j zq7>q$CQ2dIKB)57uKM2i@sK;uzI^U$$~cUPDmdiiyj2KYRtyTLa7?n4F!8GdfdI?a zL#D%>r=z%hcBLymCJU-&{(-%<34?`!?uEdqeI9O3Pe_hC{K2h>@74GDS368m>+%j} z%yI*ibb|=6#jEe`j>s)+INR`ZSm2o63d3d?+=8G>b=)wZK$%w zRf^g6YNTHT>xJi~S}3PLW37LD%PNyIN>GS!Qa! zzcfBaZOfLk)E9wk(-=`D!vR!{77g$PQ5^S~poq~QA(GOv8TIpd-3qnt(h9iUAW<*i z+u%}$d~b2hsGim5O;_(*M2RJ5>A#pnY#&NY08XEPKMLujX?Uv$*s2Goe%DNsZFzmc zD0EQ!blnA_r+HS!Lc2>{EBIb9AfS?171jvvAg6r)`3tp9&wC$ByY+4s7~m33K5}SB zq1BF@Fab5lpNXgl2@@q?qJk5#xGdn^%>)aaF*O50TFv|Lo_4yD@ z=`6lVeABt^3I@K(U3U^<{=yGJZvg^!s&*`=ZqxPDErI1YmmWyBr);D41qH1Uz$s2) z-!(lo9Br*&>tyIDmRP1&`-J_aUsFXmo5|NKSWymcD;Up^4}^j1jdLzXxG*oT6h(3Z6yCtuT2Xxa6gKWK_MVD8gNovP zAK9^>-_;zRctzQhvrw7WF${YNONAPr@PL!s{l9v>#G^SJLlLIXqi-9)TAWi;4kmR* zXF(~!D45KntvYa}`h&H@#+(xx2(6=#qWbxBCA|lwO-cm1n@g2R9)?2=lR5ID#SZ`- zn^|I1~@Y1@$cL54|ao-2n1iaQcWgQx%x2B;UDn?fWi;iK88!7a@L?DOQG;h0t;xBx(Zu zuy*(;U0FOYIS~)pwqPA*Cm39#*TET7X4NL7Q~S10h`R&l6lgTFokf!P{qt?#@)fFh z6gKYrleshokv}KPc{B<$d=u8DshHrrtMl>Xa97aSyZ8C8&n4B-I1+T~aR8nsV-TJK z=$*!6>l+8}b+>l~9Hy81`SUR!@kV@aZO6f}TDtTu(K`PdE=l|(_JzSjk6}%I$0ghb zw-wX5v9tK&@M@on2(Shfl{ij6VQ7KnLwD}4K^bG#wuysrHLRYG9|xuWM7(RH}pM+v(gB&*-BWx zKNVXSKKMc)_Qpi4VvqSE&R;rU4w3zt0R|YzkY4;zE&n zA*Gtb3cq*#05Kz<*R7vEtzHrU-QtZ$F^i-96MsSc?Ehq{gjk>VJbogspWlaxk7NuT z62?YE6_;`tZI1v8(6n7l47fEBxxsnIP}>D9o)rF#+_w!9Q4+}bf#)p>Gnp%_N7m~aUfflB&(Nvlemz>lLx|i!IHWZGZ-mv zpG%p3!=Dt>oL^P71leC~=1L$AJF@JG2*)#hyRvjs8y3PA^mIj#(|_sg@46P0(3Yyq zl)LX4i6*qQExGm`VS2#l(1T*qg&H9ZurF4kRM@)J2#Ey_On5X532)BKG{2^V#fU1L z`To-bB81}-y-$(eU$0iRuBJerVQ`u?a0X+(T&;shK5D+52CHiQ)SE4XoJUgOZx#x` zKN1d}_pLvXdjU0Hs3pK@$z!Ug4}v3S1GRH2t#&Al)f$62H&OT%#0|q$S;PJSqX$iO+|(eu>}1#7+wUCCm#7;q(p!U-TeDw>)_0c z(SB{mv}PL_hbq(3RmS(o(Zad!1#bdmA*=!6-(pSjTJQBGbTCO%C+Al5(4=rgp9O&A zxAOF)sEBCMMSeBEa{&~>yM8OHICs(1s&2b#$tA(j;L?EwDn8F==(kOsYw~PzUe~CQ zJ%9UY_piO#9Sfok9@~}qt;e~wYv`Gj(Kiz*jeRjj3o=7SbrW~`T=%{i8>HJkUTv}C zS%-?uE_lp$eT&K}ZLGDpF7V6!?jo7;nuw{50pT?=j}zmLX6X)oD;#+7L!xZ9dqRKx z1O~a$f|^LqxAgnYE+-Nw@`CeB6Cq_VL-Z7lb(+@-Y`B*5mUGwUyQnwNVv{+OkcD&o z6$xAU{iQ%I+S5B^4U=niklmtqdbHLQl`9;Hps&GADT?vSn%~ExN(y?l&{|yFp?N?{ zYmF*G;=#Sx0EqRciLaDDCT%Qzy73Ja0X_`HNTSPCpI$o*IWeW}0We0UwO}FK-WIZh zFf)IQH1&(rc$Hf;5z!jw@`rwD{r_rS@T1~i<^_y}Ae%;lLH;8pkB)0Ju%E+vg1~9? z7ahkq^88`Oxc)~OK4DoFqvE#xFN11VlOSGdc}{qLuUxFF(`nb9375LsE5-6X%l(Fh zWqQXsj(R(nrM@V5d!obdUXC*}?m+CQ#^k7(CdC1bqHE*i^F|(NmcQvY`X!~*rdrXr zrSpWuZx)Zu=>HX6r<}BnyMp0Xfh$lTGC24t z@i)FxXhOcO1V%#j!icR5K=EFFM^)wIchAV49zbsk)6JRc=y!oC-52rkL`4SA7aHgw zyb$h4MX?aI!3oO%8B^hv9gFP=NfOZa+wTkXAkDB$Y|z!33$Il3W{ zhU?sihraZj=zex_bdyCo2n1~vqqAZvQq<24_LPSeH?~$MnrU*$c@K}+mu(yl6%F=! z(x>fn^s(lR@^r6))vt^2;#Eu5jeLvVz9w(~UaQ@^GI~M;nnNBdnHlRo!ETmGZ<;r; zwN?UMj{_uNu${uQ z@%&flpwXqO0@Z>!`2w@{&JS|!!r~@+&?@=oM4MnmqR0z+|Djh}VW%!bh9hi17T`02 zU?n`Ng3f$5x1+n_k`prc;7_WC`JnVB~lwqI#$%xfw8dMl>7Lq5B1o&QXU^M<|^(Ffqf zxkmLtJu&o6$LDb0CiAtSg9j1AQCPtPDAgz`LRSX>38n! zr=lGvUs|r(KG*k=$mSfK(Ow^9f*)}VoHTUg*MZ?uMdjfWtu=vDYv(f(ZlZ?*HiJSO zgf*?lzfYai(Gp{AVvvuE<1dV9*cSPOVNCpDxzHcPwVg|6AK9SKg*dRE(xn7-jE~EH zyN>WbsnF@dDe^dgG}CQkn&*BDBl$PATlDm<3e-I2i%hAuz<7{KHr1m>Mp4nxZ$Ju+ zuWIuNBd4SZ@*DAHt_h$qCO7bZ_^O;lxUumKfD5E>IZ4EskDv zO2tQZ;ABivd-W<`5ye>}A8or;)UK^d_r33#sjv?7kHmoBjdV9Epm_ugog)qnD1=YSu};=&c{bB&HVz-0U{4{`r~?DT(l zhK$OKWn@`&2BSvfT%YAX)ej7p(VUvV$>N6_%<8lJ!c_f|n5tSgFUIa(Ie0)`aZ!cB z>@ClJnQL{vc!8&@NQ%b`ebZgeGfVXY_B3+))}~n6pgZt~&&Ff91n0j3D1(oZHcX401 zGWpaeIfSt?9@aM{pLQPfeOO`sdfM=WN95XKk#PP=!}|*G`4L9 zoK~On3%_~IYkqJ4L%MNb@@Qk$!=9*h>&?HKOLn)f7+N#jaZA*JU3d7?xdXgjZV_S$ znv_GUn6s1*UoFL9dso33qiLb6YG|>1c&WSRmbcAYw{6>_qf^cAp9LWYLmvL19|eR& zZtt8jWy);s&^+xdCvFTE=5wFR*lA*de=_mcbLSM5P3F12U~@meJX1kIp~m$2`Kgk2 zT@g(S7257=takj=85399+P!=Aji$0F-=>ucJkzI4aVa*Q%YDu*L*evkN#H~ZIZYck z-ezYUNz|MuxQtJ4?%cT(7?>?`1e|yK4_^_6uN5Za6V-l)@Q;lFj^R?tsT>^cSMS{M z1Rt}}%YNVy{ukQjwCpw@%ijPWF}H*yS)bB#SSGjU)cX2+%Y`fqPrdiP(?7pNq}CLs zu>Q`+yLyWYHy14%EW2fT_sr)7S8nbv)8IFJk^cJqx7a+78)6a<2TGlfbcc@`e|Kb!#TWPidTT@b1oqET4 zT}GQD(XsT)H+Xaj{)|-cOG`cK58iCc1cruy)E)sY!dn zr%#>A#=upH@3+;`FLt?a9vkD>*nj2B?jKSVA=@dmd_wMdQUM>o2A7PmEb z+bJk2(yCa!`o=Whb$WQ~ZW-q_V=g{BLTjO~zkkb$YtIbg-8{D{$gW(!el}w_B6jHE z|NE~!IUm z58Bv@*XOW;(qv)|Om}^87Wv@Cd+_Io$?%nexL(w`-Lg>|;>*~3Ae^kK`A75JV({upoFsIHx2$p)V!ojZ30 zuWrBhP%|dPurI8s$(Vu!nd~9zNJ8Iz_^`X1+mvS}X*acnU4w#n-yD0~v{Go}?VZ>Z zA%@IFnYvyePF?ogqWkK|`o7Ou`)0bHvsw6AWOK~;W{&}m7EPHL^+^80-gny3Gk!R7 z3aTq$?GyybdEwaLP!M%K@*PcF=XUGEr{3w7;`|rQFLyd-h%;w-o)Y8{q21)cKxuLpQA)&K5x{a}E zq2rju(9X1*2P2F_V4Hl@XcsGA7?Sw>#S7R^y1?;<@f66V00;Hrwi@i~h4@w)l|w01{o1a3^)e($7gc`G|O2hTAR<(N0`0%&mjD_2ImcvX;_ z%f?_|A|Ac%m04cmLh<7ZZQDP%3ym-buD*`jn{+o zgj0nfZ)&<4#H9<656x#-!sCa3)22m0H?b3xH8mGAmI?{Y0IBT-Mo2TTC_$ci6R?RB zP;?BBvaqj2?j1kBOPGv(g4pi`>==r&oJWs|q?f?+;el3M72YyjBWI*)d#0pFz6p}6 z?GLrfuQv40zlhOC9gr^M5N=ii_5t|pUlkW}J1~|BGU2!eZWaJ%UnV-Q6 z2d-l5f$FZo!NE#1GW_yBw^Y7;T-EkI&1MbbNc)FW$y4oIC`o2Um0bePDJIp}@Q7E= ziHm-9m}~@>Ha`RiyjClTy|}m-rRr8N6udEq_|#twwpI0+YGIwUw_jTm@4`(?+&>79 z{`C@*L`?-{mX6F;Vjh1bat70TnJU^p}{0P`CGwjb`Dn$2&)6 z$a&cM;)vD<;ikZRcxWhCWA)twQF{&?m<0Q;D@x}ef%2Wg&VK$tl+7k}>-_9>+9@uu z%cyH9i&}qsXOXe!A;^%btkmypcE`;c0$=zqw;BtBa=-wvY^xM|{pBPO*@eI=KRYW+ zAGYp&Q)ihHU~QUM`Na|Z+1IaM%PS~M09MJykaQdng|R|))1AC8Cy|ku8c>>P*Zmw1 z#BcLHAX0KLgZvdFqK~kTIw{L(W>Me(bQ${V>`&R3y{}$%!Ei1EiP~=N?$0m=Ed9I~ z#BY9_>veT?492-&-}1nKENWHgt>UfaBcCZ&;D4t#5wy#MCKMg0{E@B zcQONk#fEs&r@>d_ShD0YX2AORBdss%T0jz;F{VketQ&_R^(CCjo8jPv`ed7(os__w zsZexy-?(uB-39;Z)zfGrfqC#9y4X!#Uvedd0$-qIJ0kA?JvnPQ-@KvVeOCB`EDO9l zj2Ol42)Vv>cr60M;iFxSD3}NtWoohUxzN=7Cw=1_lOK0|T#M zwLwPA4%ZB2Cnu-Nx3zWr!54peT)e)sP)?c26uqw=cnL@2@tTZ9khrfz0R+BD{hprl z=O^HDUHCNrV#J0G8w!-#!F{>nrlww(-Ox;!yao?Z_Y45?o(Dl}n zkM3Q>=&>{zJOD5Gp0-{*RFjDW)|N528b&eF1Y7O zy%`!7HUUhNXTY<+<6H1aNG!m7HwPxu>tSRUt(9ExMUqmz{XdH=WQU4O0Skon-(j-F zun^a`um}K1tPeBfDYItf{B~oFRl}P_$fS=cz6C&UDlUTW@Gq#t7AC*i$BTq)JaC{k z2Enpz%gdK9MePeA)NcKdM^S}9K>>jYSO-8gW^*e}N!6bDxMHo8(q-JLRULh4oS7pHk8N-)Xu;RX0EC_p z!vsHgBFE1>7qRS=*tqrfD(J@~UoRd%+35yR;VXWkex&KsTj!eWk zSsdBTKLb%p1^s7w0Oh^Ji&*T~@v&J_=#N9;@Tu5+rmw5bOfe4V!+dH3D0Xmu*T=*I zc~-*K@#3$0VQ@GHu06Qm6EE+LJYQ|mX#Gz8etGK#1aY8_)?B`HDMKlA4_)$eOcNI~ zpyF780_1yduWPme2b~1hx8K`}`U@q>fBNFyxG zLXfQEdic;N<*n06n}F*Ef#r;+;ET`>!#o>7FpQ@FoR?k8y?XungwSHx>`jW)s60A^ zfk7SSD;5bLjJ>H?`udvHhufRaZ2Ww36A%&2Hy;)a_G)yO&tTw%x}xF?PD@)n({(&{ z=O*51mRFcMMWL~;(5HAPM91&C}l7L5iF=ZOHeOAhxX-aP*8`}{fp(3 z7{sviSRyeK8~#+ovFHP9z?Rvqt?dD^ay@t%3pbq< zz+a-0tk&%u=+pwoGIWv-Vj0GLtY}TVH>6M_EEOW*`DAz^_|y zTYG*I++auhM4m`K9KX$Aviyo0&+06fjymXvA7!|tu9LeQ@EnGWY}1zaWDKx<8c-O| z&>d;&=reA-FV1VG@I2pn2mAhcDF#LM8G0vohID=?)b5MV&k^MNu|hNEUH`}hoXVWf zo;@olY(y3YLS1t(Sv?Qp?RW+TyBEO89nS#e0rl7h5I84HoT%T`M3u<%RO`m|_C3cL z5=&BZUcHja@$&Rk!UY}@62ka!{9}s+7y7iY)MHz=u&tdx9i|X&xUfYvYd%QE$Hzac zYEw~HSHi{n%9Hyt7)xS{Izihxlxde}eFi;`(?p(M4nI7?hNHINj?DDXVzQON z64F1w_aBTUsJKI*@cy5t=d8{jC06U;7=-1NOHasYwz!L$y;^xVBe(PNV z5SkWJr!xj1>}cwi2#PDuIwknvpr+;}G)2W5H1jQzUlbPZVzU2O)^0lCL)jwHg9}Qu zWAc9o;fRLQc*$c~tle zCn{dt*R*>T@9lkNEPBavi-PXfm;>V(?32!Y6wpydyK9nDQZCt^GPq$h zcI=L&zSGG`_Kwql2^wV(UT5P_Hc5zyvghL9I13}WPq^=%LQnk=lfbpGY%QJ@Xur`` zD^auq(@=MCj^}~zsvLT8`JJO_HtI+VfpriAJTVjIha}p(SZd&)bMW$dfeu7%1OC#u ztUvWrZtIQLRsDHGR=pA5Q$~AM_0{>zKXIa>$awhMd4a~D!3X?SRYiLw9U24-LI(Im zBNi~0#-+?=Sf({iHsKz6|FWw*O+Y~JXm9rj*jl~zha z8MWE12Y2t^H-pg^q*%yzXr5bi$CGDuB7*vcp_+U@HlT>OC2sCVN95;ins&z;9&kjZ zJGRJ0mCG4LI8WL;dONeusMpg};j3xDK)vWGkAZH8JYHdBDlIViOhI+#3CYF})!_|` zFD8n{Etd5)v#0{=oB`jYY!swW+^siw={CRd4bDMNggpekPd>pLtDX8Q@NeHZUU!9G zuU?%EoJBl$k2Cw_>`y-e{Ir~-ZZLTokmbo?qqLGbaQW1yZNWdQ!J4h||foNdyI zigvTM!Lsw{`74gk=MF{dJrzd=3PyLVNPbDlg=}nWA)!}&R|yH(h&OdDpXnM}eCne@ zTk+n&vr%cYpAI)}+|_zoQ%mn{z`M5x7qU+R?mHgBxI@6QB`S;Z-{@)+sLy5=v_)fwknn2pqpuhtU zYuRI9XlT{lvLBZyHjtEW&dZlLH11+8AA5{@rb8M1nT+YiyBezlUNQ zSM=VJYgdAxwer{6eHaD-8^Un}5yW_sy5$UBym;{wQa@jSb~^c5?s-2yKVrNAC9;p) zz499z5eZwoaJzMD zAwxpX5ZJ?31A~y9#&=x1^y1ooaJnzOwtd4Hg=xB4J<^|_q%Yzf>G4`P$KUOFkg#Zl zt%AcG#?$tP;~6{|oyQDo>ZVHgmLGo8_x(ryu&!f+V$%~z7w71{Af+6;uJ*&PHHT;Z zs4aZ%?(E>6-CJCrR_OAa>MJK`kKrFvVex8m)-b<;eXq6WlDWapTe7pB zMUGaV4@lJe^hNNdzQ(5`40&CvEv*|@u$w-ro#mU5;@D(-yl+^~`*Dw6U%k(~TkB6N zxQaEb;A`25w;~l7yRAlqgJVzOp8fkTzyKN=pDj^kTkq};b{_TGGpXozF2IOzGPkJl z?4uhO;mUxN%QQgBX4-+MdB|O|*uSstou>%IQGJ7h{3v|U+w~d;fXMe8_ED+Au-5wJ zBFrD|hK0SX|N2(eJhk^uO*kMryygJuQ!{bEN?LtVNIxk%(pL|ps1GmH+uy&+;3n8@ zeAqugUnVk8QxurLgG#qiBnzMxI>oyg8C+m8sy#|hs444fZ;)ePCw|0^cj$QU{s-zE z1wYH8W+smCvCVqmz$H)Gtjd4fSp~;lRR`+E8Hwnd!kH^LI+`7aeMo46A8^Amqy2oS zJB7*?r97B!5_=$*lh(104mUt{08gEV)r{VGy^V^EeTAN2Jy6aFjRyxhI@}AQpEV1o znFa2ZITaTPOREt47N@~-e24@g5DruG%PPO0kP&=0$z2Q_ErvWy1c1<)9~`}1e01Yf z^%6%Yb^*|S7g^KKbz}R)Yq=BPn=Cbr7)|91WR=suK%X*W{^g126M=`bFr@TqSs;1&x1|k6@2p<7 zjE#0BE0%5MXRTey)z^s~%c3{f1Y0u$weYU8m=)e`nR<6kM+r5us8l~a) z<_7OQXk z7Fuq$d-v|g{qAWc4^z&bKHlPZOU7#B+sv(2Jt6Z))7z#yICd?)B&>Hbwb1SS7KTfk z@+|$9Cih!nb;8khqcc3*vQme>Dhfr*jYbUM9%RTnSuJD8e-eCFHG1P>1*f3lXmjYT z;lX;tci|DDR^oMKWzBRQhc<4~Gb#40Sp7RqX8s_Rb)vkOY z5$}{?NRwz6rO8xCMRA%n4@xDKQYwUy z=1H?e^B~RhZ(Ze_^PKm6&hxx~{QA7l=RK(Q-rw){zVGW=Yh7y%ewo85Xf$>Cw%0%U zpFY@hNM&hL($FRI?rk}m&##v<=LOE4RutL0Y|npuQ#fu+N_MJt?8ST`ua)2 zxCG0-jpG>ZsRQ#?@jAU(ofQ8y+b7kjZlT02r3udC7-n@Nmh2H9+(tUA7(cQnh_~Z^ z0uoZwVpi{chj&)};kOQ>!u?mH9GlZaE~m=27y2;27R{Ywk^n&vqV10Z03*ovo>L#R z#;8@FZAKXzdT1@D!@E^wKyZ(t2>YCLaU&5J*rNjj1COD7iqI|pX2`8tpeyvy;-`Fb zMG^;)`VGKeeRFl5up07Crvq4di9X@Uxhg4O2k%bV0;xHU^WZSp)R?}0Si|)_emw7a zQV%@AzjtR=gkWk-q*QqG=DE-_E(PA@K(2xEZ}~Z1K9cJIHO* z@$ucQ74|5kmok}&CD9O}*#j~LE;bpeeh!dWWZ26saVh7!g~8b&IJ)?kXIV2))K3}R zTwF4?8Z5oH>vKUQ50NlhDg2`(3>(`HNZ#u?W$|g_Gv6og(9qEE^hg|_N&C*$ileA! zH^Y|T$zguri?exx3Y$&E2L}fMEG+pNDfd#t`$|&c-CErTYIC`{?+~;GES)~m_z4rn zu@r~!!FL+9f89ZdT-GT}#ZCm+SP^zVBgNB;#mlk%#>QP>ZfU!&u@yWT)yyDxN1gCG3qE0xwjFw zfML{8W!K-+xxFCfhMipiW{6mKHq^AWwau%VF#F!c=`&|;|3CJsud}Pe1ZT~GjFY+- z?DZ!q5>4>r#L4$hIVfgY#3)mhcr z_nu##VKwrq>dVHCoyTiUdou>x>z6#-+3oJ)CUTamQtjdGj~K5mgp~x(Z}0Zyu#Y30SWs{tVC}at*{01M&9z>l=f@N31<)VB`&ZL4=(Fp)%n2t0 zOQzu*^{~P)9m!;lKYkeTYraU>qzvmRcJ>C|h099SRP6Fs3{ zn+tQpUPv&hraXkH9O>7uU*CnlGIO` zW)j*cao=K$7C*c3z@bCe@nkMvy?P27p*cJu%AobGfV6mlZqq+t|CIXXI^IfNA)y5z zw}|#McZ;+#%*#PzLBJ|rIW@ycv0x5WJXDHEOE1C50*7z zRW^5y*^CGkd-U(uuU{uddi!?XH}LPUqe6fAJ(-{bgi(OAl5^$046X)s3a60nd;lqB zU%N30aFQeNg5vUfUl7kQ-*oUHeq@YykHMA?(0~0e-hJzi9XH0dd|=+dE&#btfeQ|* zuAHW>T?z^iHH<1F7`-P0G?OaWrKP2TCxCArz1ir}vHj}`1|68jz#F*g!qNhDfHFs_ z@A-9eVbpVsO#eqQ<-dOd#&VPXM1^Ve3)fIdtphdvWjQKUNG63>CNk+&RK=apt0H&*S&KeJbYk zHE8GWzWXnZvo8Iyq5GRfUAfhESu{JkG1YeVYM+};?^lGrDG->qtlfpd_<0+)qbuf3 z8OPY5nR+$M!&91_YXKKKBlK}f_2zv;{nFOMQkCU{k1`CnP9+5HXn){yEUsj~lEw{J z>HgIHJ=1qco6Kh{9jW72Ixdo)d_d(Z_nFeqWemoY3r^Lx(Ua%+9T$lgs2@qrbStx3 z9P&i*w?z-d84`o`?uXmIEPvD4YM1x%g1)r*)Q!mls@&qPQxKYWfq(h(bAE-oC4u*E z-joPF@aTzomu{|r$1X)hgQxmv4&C4aYP02=9^os;(>1|gKhbu%=nN)*w5xv%CcmD= z#64tcfVl*3$jh{y{TF9dSh&@1KiJ}x-~-7nAXnghMuEt;L*a#2U1A@mRog(s$a5{U zFtO20acALg(VDkzmg+&Q3T>r?*vJW;-b7kUn%#VaI_H(dG|*S`iuAt!}nhPqvit+!b>tAIHu6(H@z} zm!x!SXKM<_(OGTRBEKjmT+{aY-8FHgGXmN=%?t@C19m8tCU~WW8K36s zZIHmphyVM!*t1dM-9|ZwDU8oNrnFx%j5_TkW;*SA{pQ=fsnce@GuS3~V%S@7zuFPU zSf{Fq4EmlLXWM0`a*VD|oUGmdxlF*aIrFrI+1p83?UEl3Teq_HOt4uNJ;CUko%&$U zz`3OZ3her(mp$8lo1>(1>~Iqcdsp7Ct~hp4N; zu<6E!UIMciKhmi25z*oq?s(Q$H^aMZxXWkBc=jo^l>!Trh6fic0;6?{N=<8kCfj^CIoB(20HdPS(1FN92g1M;^XHv|`wPjl6js&r z1Z^)k4gCkn+(v&Ne&s)Zg>D;@xwRn}@)q^l*hHuw141Lx{l>?t_+-hg*Md0`KkZj# zoEdIySe1d*vsw6s{T;TpMD8k-nb4}eY}_}J8#a?|$TFXaE1M{n(a3-LabL3}{+E2Z zXI+v~$;oExla`gicOtXAZ@za0?@an8P#j~gHD`{YFbi63;GMKH5`UKlo@P?WvPKCk z2Fb7zjcwQ*VF(C*?!CV7w$aV8fmTgS$!8-kk4>C2A&0>~-uh#2#79<}&BNmW;*l^P zn8k*mWQtG$;K3nP)4vuqQ)nn3f%1w$2gWfV?E)V1Z9O_lfb!7py!%T{qeNFTGLj0m z|MC^O?MLy`TQ@^*ef+rl-Roa?zZu}2W@pX#TRDJ3pTKt* z+Mu2@SpHylbz9pkmk+$m-SI)iO%Oe;M8y$4X(9|f|MJ)sT)`N z3(xq!H)gWSM@dAVe*t-Zog5}RL6R_tV)-RQnwn73n>V)Sp<~T~5e1!rN;jD>I)E-6 z_EJX9ks_Ln~LH^i8#q%<|*%8|TcqxACTv z(@y%pW9Q!S&F+wWKEuI@hMUSFp&PQ}z#l=WfR}o|r$G7)EFtE31?s&&xf!W^cm&?> z1U=yg?;Fsn|K-b{{gqb6s^$Kx{w^}yuE{GY$%BCr)*beH9v+RkrU0hAy#j~ID>$^? z@59z9iJ9IxI9oq=;&~{|gbWC6fHh!0MB^85Dfgyihx(`VL$kSf_ItV+Xt zRy}tQdOc!8f!o_bHDA(2e`+1P59)5aq8vJh8OH66fd%x&S zdb&1YA&?BXLo$GKf+yf8HdE}0H*epb%X1@C5$YkXWE33_BZkF}?(5qt^Gje$j3Xc4 zR459;0S{VlfSmL{e!Z`2cSWfgdT*BW;A}j0sl9JEj_Qp#@L5%&G}#yl=3Q&CG@>EQ zdG)A#&%S+achCQ`Vspm1`P5MrDE}oP_g{>jO3WwdQq84r8Y-i@*}^s27rV>FFeOj0 z9CmGV_MBU{Zsid+-Mbg~28v#u&6-Ce-y#(238b^%zI|J|VMFA$3;VSXJem)q9o9^r z;9MP}FE7VY!9BLwARP&t&1%<-3+6XUix$%;j3I`?-EjZf|dg74loCJ!W%r^E26%!Xa57TPx%^ijdqOUCG4=sSHzCeKy!#4h|2`2VwK3vs~s*Zfz?H_m=csks={9&yjGfFG;3m7FdD z(IXZQ0xKxO-Xhl$>J2`~-H*Y88w$DWasl*YdrR}XL(~RwS2adPCo#&cM}|QCza#!C zz6^0AlNp4vL-F|o!8}l6tiTfsjo^07c890K*HH0kNO158xN!DjuyGS42&7+uG=O0^ ze6#}!_ymL3xun{(EjIY%CIFUYBKpc@t{HPUIP9PS6Sv+T_58AaOvw{irO~mB6P;vn zSiGOV9mX`?d9i2VV$S#OU4gXz{mG}onN{YH77);mlz6}VhS~GyU$?QbSt$5C5#a)+ z;?SH;XSj)9+>qrhZil(?G~Kupm=br$dj7l_v-s)wB%2^rz%lb!BWWSTPJm9fzzib? zIb?v6V=r07!@}pHW;|>{g$B$G>S5oKSxcY>2{INU2%dvZeT$o!r_`dA{ z>{m6g`qTeu+azJjwI@zt;UdTdcp;BsAqP2r^%l@*uR zoMtgX_W8Vn0vQC@_j0)nuHrsE2?wkS?0`#E>U^9asOLPT5S~Ds8-t2 zEoVH%NLoa~{b&~k8lB(+;|oa`aYbI)Z?N~bZO%X=e*=T~w9G(rpcP3cDg_)S$ru$Q zx1K*Q05lm51N)cL*8=`QzIjw@r_F%b495SEZ~l@jriDPhxovDZ1U=&dpyfEWa6n!7 z^Vm}M+2^-^>fXG*KNOpj&HPa2*7anky!%tyA;8u&9n*ONAa1xN&FAAH!ae9EkTfR{ zfXmSLg4gE6?JO@+Az&U`Ije}fxiWbXtjVS`E~&@MRQSYa3KbRKor+b>FqE=hByi$7 zgkupQht?(!3r0reHFYs;u<4+NDU}O4;0M#YQS}u_Y_LeOM~=AH^J!2sM-vO!P#oD2Tf*$py@z1rFk36D&t?gC{Vsj-rtb zA_1q)n+^_d0S`XG9|6!8JV!R*`iGZW#i*o)24M%zI*KWVRCgJQ5?m7O?{q3+7@kz` zVD68jUB3i&!YlpfNw43tj>9Yh2f+J`4843Io$O&r2Zmr#QwC-Fo9usJ10>G7m5J>}Iitvi6 z6RT8bML$d2eegfKQ8B^7ESFq_mCu=+JuMpb~D-DRmc!*vcyF5lNCgqnoLY zOls9F*y39W-Vj^$9r)z|&~4V~d|vhdd=P}P<8d|KB8|hA(%h7rG#oBAweQ)zoA#&c zc6Qo`PQ_J8qo^>6s={#92@FtyBwZt=JG8lS`uhAx0r|?^2Fc=QOh+51f~JXYT106G zbng&8K;lSQY&)9f4J%1gPrCR*-5n%uYkKJFT6f`jRL1-FM#FutrYzZxkBoiB?tg1P zp|r1i_E0^;Hv17HR@X3gOS}`e*m$VOF~lI=cH`BtmjJTAZq9)3lr7dS0p&zd8rNd_ z3Bm?NM}zn>NT{#CAxQX0@d0DQeV!LDGtX_4m4&PwA465h147uklgLGsuk$ZNu%tT~H8C6Cwj zPy_5K&>oKpru|jIk8k2cQ!p26c65?v_C2TR1caryVr%%1U;c($$4G1^Fb(A}^5aBk zE?O(eN?iBckbO%q6A_mC6UWEafZU~P)&PKoX9Fz&n6#I?*ZKMF1I=sg-hDM!=X&Pp zYlqevY#yfb6-K8bY6u#%#e~jf2}f}VjBKIk`EXLVtMB5Q(Iq%xRM3xkAT*!0Y1J>W zemwOrH%TI_6sRz5@L-=Izx?*}i2NSyq`WyDA{aV?t6&1FVJ;{MJE-iO1chD*Gky#Y zv}xlh;Dm9EpcbB443v#yV26AQv{vm?BrZ^#8VNGs1gqd9#RDISmmmu9m)PW6yFH41 zs-Qpej*@14jy*e%kq!5}?_-A~Y!VPwJBn=q24248YhB$G#`~-+Ia5<%T-Z$@ULfdY zFi02ZQx5h{8C?Y|U@Vm--Sm*OMgPouhV<`OAx2Do^J{oAXs zEzHC@&_%D)1PP_uF2)9B5NmL;Q?5R3Ito^tzeQ_@y zgczr}JYRor7cd?62$d$K-=SELfkXj^@g^<@FuF*{m~A>D;T_)RE)y&M&}a7L5({H0IvgT{!xI} zq8#SeliU?-u~cf{8?<%z?&%DA%8-~hKF7k~EvZAnFV)5TZYwn9VbS{i*~>0OMyJ@m z*a}ErcH6e|P%@(HE#3a;&{N@f7l^Y^`Y+?>R{$0)3@rGMdC6UW&P&b(-}`HdNU5t! z&SE1?QT@lSiYsGfDLW>;>6pR$Tm#^5=yA%elX@Rcj#$~l^{ejb8sD^P8MK%17S4-2 zU#`SAKg+VkG|BjRi1gGFsu}y6OdIl6!hER)PlOy$aX28Jhp1AHbpN<87&usioqq}m zf$;fXR2lnSmATf+D`utGOe!GQureiSq?8Wkd z8l4TfGbd1I!7zY>;hP&XW8cH@xL8F!pUgPcV9^~{7nf^LG#^79o`9sSd-x-sBRtJ@ zG1qI~>7BJqwpGk+>LE2W7{y8*anH=!pNUawaUZ|`gz34N#lw_06=vf0InH^skEr$aodbqB zpMl2gciOv2823^#@!j=lZv{)VJZ{ zi3%mm1i}!1IdihvZ`WQi7{J-a9?^5g-cyy5`#mP!+MX9GwH3^kVSG|Vgpq3M%fv~E z4@9zrvJN)tk`M=8p9I9r13yJjlw5oupeRuJp(zjEyF%+BY_Qs24uvww1OLq~jRR%+ zUg{J7<5z)IOVdwDeDXyh28uTH&TA)uIm}&Ih>+6?1)6sx)GhzqLm*Av5}T zB3cFvpx=Iyfc0WOUnJyZv>GKR4Ktt>XwMRF^9>H3i~@ME6V!uevj-ypZjpTO;`_cz z%ny(*lur8_GdPy7S~VGO(^e(?23j@TS&6KN7@b0iaRQ14hGB~BEWGg3=Q?_3{pKdF zKBZAwm*y8qxo!YYW3nyz(ALjgZ$TX1OuUcZpuXXvu-z&=%-0XCeM?vfSh`ujno;W* zsA_+K$`mQTc-Y6I#Q{DI!;+p$$ssrsfMXb;#VLo4ITeHFm*5c{jQMc#HH7nv9I%S* zK<$6UM@`4Ho(Fe!g}Ew?s-bZEf}9Q_KEX_QH+dwr@>oj0P#%gCyWGuBdJPEuAnl*Y z!z?(}!Ms@fQ^ml2QR}Gw?r^G=BzR{}1FsAm~HxkHURE&n* zF#Ccn6lkSGd3m{9*{BY0eP-G1+oRe|v@)HYPxr5r4>};s(hb2ylwJGa>o4JK*pnwu z7UwrdF8hV3+8*udQ|qYkjKai!SMPvsqZlxG8&5?sOZa~ubJ1^Pwd$^G)MKY{SgWD_ zYV2y~TZB~KfmnfUnogWl;Er)1L;i}GEnG@fF%g5io zeN6e~0{*4`Ds$$C6(+`hE&aG$@yPGXPueb@S{ytlDYdpU91 z4nJO(Wy@-XU7MG@IQ{$Gfvyj{K0Qruo8Eph&N5D^^E%@!nC>D8`MOe&8}zptKt3HlmU%Q? z+yVHH+4iC%768)Q^z?8zW-&3xajmK4bM!WphzRae(${|+necTwJl_N4Eqx^Au0jUv zDQQ)vYaR8xmdoOse z^TfbUK@&WRpJff|JU0{&@F>4Bl#?+zoAm>c0Yw{ z2wX7{E@5Q2iMnbJDm0UBZ%Ad}F^VJ`1t=_GSa}~GEtJ$OMdyq550r2T8uql5tsc$$ z)n=dK@yakhqpio&aZV8~4fz$q_SwU6eC#7k;K3I^U!YXuCgOaB^iq(xB z8boEn)ds7IbvnN+GO4H^I2u=lD@?}V)F`UOX)&g%((OgUaU_IE^%w}$kF#=m*ejb+ zRO$QHI6m}@Y^u3yMS|r6sf?lUg;|vax@G6Whja~4kL0&m^@u0Kqm&GZ^n#+jZX`%)2nvvTYqrjT}IP!!LCliRBG9RW**cBS@Zo|AP7 z%D=H3=Yh$Gm99GNU*EzNMkmg|rv=?S(hbih*R?Cq?Io09G%6MDr+Tr*S!o$7oFx3Q z=+0t*D>#6~so2-&^g|E}5vlY;Z6m``SP0C7tNzw}O^?Dme|+lN-C`2mAgc2caK`O_m~=9m|WFktDk$ok_+WYj-1 zC?hjJIFBn}EP69fNG4R_d`u>j#WP`|B!*%8vF0PuisdVLoPr5DZJVGH^qJGuwkCXX zDF_1Xg`vtTWKxU$GK0m6kPkam zJ~AF6kolmB#Rd#DIc&XgvBpK^jKUlJT@Pqqb>R_U=URg=aPeYnC2@@+Yo6u!W&Iv~UOooK%Iu`-jB9?RuPk<)0wa$US`_kk~RS*TqyGBf`#Aq&S z3w(n1hUByEoSrdpJlxcSwSDa`!z-iS#)9riD0A><5)&uK8`kElm6d6v09u#4)T35oy-Te{9eB=81897JL z{qadjX(CEzZ|EjDEK!r6-{ifSCc8DG;ww!NiU&}dJ_`Jn&;e3jA`JcJ@F0l~J%lqa z!m2TUxTq}K@y+)O^3HO1IF~haiqY@{7TK1Q@9(bKIFEn6MQsfl(oA>3o#Y8iEN1d> ze-n+{ZOgdBjZlzPsa0Av5=6$Sy|@%j@g>NMhc!bJ$nrz#>Rx!(!(qZdnl&j}$9TQl z&@j?4xl0AtgrRXitvUyRBAykM+<0s*dK=*R4r?zjRMm=rb!MWnps#k=IsMo;^yi#q z!pv1jj6l`^3SM%2JO5e*A(L^KAIKN55q@y@?oy|8ZKhn3{q5V%#ZAg^)xxkSPlyWo zSm(WGT0ULf;o;)!JahHdoi(OOY3AyzZ$2CAnJGQVST8mku14Et`BHi!KmUFFG$?s& z@-Fat2&at7JA2o_;1^yoziu^ODZ4KhtODc94DgBoTPey^n=w^eKtKRq8iG9kc&O+I zkZT_!rqaA=J&&aMAz+wE*hXI~fMvA5edQU;l2OkOVvIr+_H1~*-I?|6{haT0b>vZr zk=r~33N#v2A;BHp75VexN*GimDpP`TB;q-s*VUlpTVSwZIFc~)?p|KVz6@_3Q!vWd z5GJ#8^EHfQzk-7Cv74Kl+K3PgA#Eu<<2$q&%;`x(oh>V@Ql&esw`jm$?O)a}92Ruw9^Scwurw8wwM=HIkw+DJujYFPJ*9 z(_U*(7CtFl!up5fx+Ak_;h~M4ySA3g!tl+_IS!huE|uG{Ey9Do&|HF5pOZu0_}KmK z@dBaW5c`Red{Euxq+*2?i#n0xE9GP$=Sd!XM`GQ>%e?Zq=YITN#*Avp=y9eiFA9%L zhK(R3*zzHDf;kqrMySHw;2YS$C*vuhEAcWvkf86NGu=d@BY#=03Yr9US2p5bM#?Q z5udDzCqeIAV0nS4L3M6@21z}qT3L<^y7<~>on%T3tBaK4JU5n!SS=EXff}yTCWLHr=aA= z*+5l4mMFfmK&!6w-jH{*RvZ90SrMZO%cqh8sOTt%`yP zN4}EHY5QBZlwfh)z{z0Vh2{u%vXYtf*ZCq~m-Z@-oc{jp7jsg|q{WQHC!j^PIz&Ob+n0jhMBZpNJ!b4s(HTIQwx&# zu{DTdH&wz0p0r&+1@C#O7qBdO=c+alFWwiFIxxENrODeoo5ycj*M4c{>a$un)tv*O z#Y&TJRDt~FV~INo(c9AkR1D+AJAd2vw`=O0-*6up-Q?)VC*uNkGMs$F@9bTTtuSw- zDr3_16}O*F5Iy>%M-34*)w~ACGRzq34DMhv0PyySMOKji_RII}Xf*IAbZ8ESi4CjJ z+Il+D1wEDNEv|}g1AZs@D_zz70l))rtw-K~;ggEC9zC4Wx1F3Qp@z3XB(={WOM1jY z!>aE)7g$Q{?r4Cvz!}0NspPlC^S?dVe!$fK<6c2=qnpSIq7+GUzpp=fdTg(ND{y=R27mQT z2THW=n&FUZ0u2)JdsGYrniO^3g(07(nA% zEtoeCrh(pmEv8t*}=ma@!ZBfx`Q^w`*`-~1T`hHee-dethkX?BBf5Y?j$WIVapff$Sy z=$j5vHv$El9$KOAuvILiRgW;G_=Ko;-1fkW)*pGg-5Gs-=VxsvU@H9w?c*I1=@e?* zV*GLy(&=z4XR~JdW}?hmhaP^hQ#$LuDR8BKJ%z9=HuD5zE|@=`56=v1CTkN)cWl(V zckkZJ6I247I}Svk05+yws8IBP?+0ragr(>MT`IsNPMO#orauhu7I1KQI*!|N1hY1{ zh>Gd;EM)9Z(U??$$|Of0g`4yCYEwqxANQeD9W@}OaBwnSyCFkxZ14St>nda49%0VN znS^kZq3n@Cr`E)#4XF0>&og3O=t5w2>21_NQR9@%nvOmM?|xM)qsS&OV9(C^s(DGu zp@n=53OlZTPqOR!qpMK8qtoFlXhXRd3t@obLy04RRSX|A2g9%Iaj7de($4p5S@oT= zcLF*tv-5zGk{`Z-e9Le<88*65#o)?^Ns2%?gjV|Pe*bsVYBkX_;z1&tRuqf}u>*S` zZ8z~^Tjkm^u?ydB!oe4@oD)m*pQ$v&kQkcMap^lj;j3WUvP^QD>TEB&&VeCYm+Pqz z^#FCj!xsAp2hteSLvRuAqo+^vjGPnk-`6jgp2mt!9Q=t(E;D5w|H}pzlWp}`DRdtw zL4PAk2wX1OC62%J6H+Ge)q zf4{IsP%tKLd6CiST3`4pDPye6z^J^)H6p@zg#|=(;Ry+!@oatIYpoQfTTLa&{LIztA$D;4h@!4cxSPf z_W9f$9F)j$AFkuLWk**|34@uj^LC{W6_QCI1+EO2MR6rB?|Y>9I_5?K<6kL{a?jSK zAOc0%{TM;Ob9doq&ohBX;R)l6s1w^?cdNAH;XPCYdhpnid&bs*QwZB_ur(sARUw@j z?$R1jM*Vc12B!R_Qqfz*o%rZ6G(}M4Ohw{TSRMnhiV_SwcJ>b~Ku~+mG|*Pq4@Ykn z-V6F)RLV#JQcQ2y@-H{;RrUuchuBt+%eg1&os~0q^vuFJb6yF}wONR4J}PHN_oaWk zK4t7nsI`twB_s(oNZ=R#oL6{s&jM{@S`8)uPo`5Gl4k`_<&^01=obo(QQ2t=&L4@@ zxfh9Kps|XR;1n)VBVW?!AoBtK|MJdQZLGoG^P`~HUN2EU90j0yO%h=R=2@Oyvg7_3 zsMW8Vjpt%rK@XY31yuDH#0`Safb+aR^cDz8QH4THHQunIF|!RQ09q?u;JwH#*iR8e zIooClHN0S*q+OTtJK=V=3mhWFrg`!NBsy9fXrF}llp5Y_v+3oScjt1Du@{TNj)EVk z`vcI9riSa&p|a>{h{!0#a1rlW3^!2>MJ2#+EC2^EtEE!K4=kZGq$@+AH`Jw~@hifK z7y=l?pgchdeMTh0kP5#Hdm8{x^s6xi%*WJQ^k{4bCLRMYzd``Ugvm2= z=mVo8MlPmu8G&Y$eK9ZTCi_|ptAbx}q>B!Oh0LLWA`!w7QIp=lDiW_m>@uZq!oYf{ z^I$Se%L;Fwl#`PqpMHp^h5DWB?ep10%J*yUZNOVAgxMENfXy2Kzf8}(RVdW0g-P`m zq`=W~Q&aOmjZYc77!$9@1MuklOfZOnh82lx0QwwAi%PdGy*6N48~qsp)~MAEoOzW4 z^dl6)KR>LAFduAVL-qBj$KT*TBUa6$l0;Z0g(PFrkp2Mqp$BK-Kh(| z%+!prMSeQYyV0E!HpQ`^lZmaNIF5{ssgKc|p?Iyw1w!){7b${bl42jB6yg%Q5U7ds z0>L}GoUv@-fb5IvKNN+?I+e#c6gv#>IlIvAV<1}i$O_~AKZNq5v{KFE%}zgy zuQcB?(tU0unBoqpKt_+E+%mj^r2+a^!+*9Y6Goj=ne_=X{f{ByDWKE~;YVQNLPDraFJ*S2W=x^?-`?3tiB zMR3zr90mpOtneEv4-TXB#ZE%#Fw_K*poAKM&Qn(B7VF``oM&A5`wZaI^V{0F{lEZp zp~a)PqQ*>BpTys_aLxqgYrRZHR9rHo3W?~;nlv_|`w!XcowpB+*WQ7k3OwxQ5Fo%8 z`4I(yA1LFdJ;PEv@Oh0$C?um4DusvJwE43i;ZE@L(A#v-AiXxZr;<`KN$y55aum*u z{*PjBD{ul*bS-*8Z@E+Z_Uy@r#}r=!Yij{k2OkzD;S8+$yTsLn4qXOBxNRgA+(LLn zeom8+TXZC0dX^qe>xFe&_4(S9{|1SS;&qN(ES)iOJM$vyI|MC zv4srb2>~Vfkaplcixl0C$?@eE>~Rm&>%2G;ZLvw*7^cvcFnla?=pygmz3YoKs{NEq zjs7(Z?F34qm9hFpgO?CT)Os;h&*+7G$c*Y_z*)N$6bc}?rr-f$N#klMT^uD+Bv}w3 zT+`S=tdIhW(dA)FI9u>JwfSjA?3wJvNOM_-Yy%(5Zg<`rwI%V-y{&m~0DWMSs&M@RABd}q#>G#0D@koB>F<>7dh{auS`I5wQ)8g6+fqS0@= zIbPXR(|!p&Mj&3j0qoE<+-TH#^Or2C`jQCojWe$$Y*PAjovZ?3452hjvhyy5nd^a- z>>p~gjsn_bH~pB8=y_S%tO<4EDx+2(VyJDF8xfLPHBi|@0ULCcQwJ*A3P6@w0`sDl zmDDklcTO-M4hY0RG4L4K?4kOd(s_`ucR?Jai(+ubV^~(vwhD-(YpkbAZ4Ld;fy)bav465+ym%%W^NX7Q#dBBJ;3f(kz<%QF% zvS3|vT6CI?XJPgBy5CJ}*ks0;u z238|+Xb5kH>?s)Gz)$iQ?B*6RRIkqvF8j$TRB+KiO?%LhOK3MDbc=ziZGi?G68xxK z_bdrv=g!XjeR??LDMM7Y51r$KhYvT%C)RrC#iH7s93$?%7v%$*EXwYtKsyNPB`Jbl z$|p+gN?L#SIq++K#Xh{W#GJW$%nkUYsc*UK>A5ITWgNpd4nVei9zIAMOh)nKHHz01Qvfa&A#J!23|6LuQi=JtL>J2MALv-$J-7Lg$Ue= zL(9}sm8vCDZgefMv8E0W51V5=rO}~aqjCr~iNI&?qv~-OU4wSDfq*!nD%9iGj#DE9 z69!VD{1mB%$(#r}y0Cwi0(J*H$3lfIRQDwAb4mJgLBWGCnhc9p$A!Ma(%5PAFt4p= z(cZbkxI`7Os$t%o>Q9Hol8ISej!UE?%{pou=v;-SZlydG+`J9Z z>5KDIkuKJNlorD{6CAD>+|jG(##q4v7ncA)HiYsMvlvI2Dn8O$&|v1@UA9fO2?u|a ziRt2&M%W)J!zvWO^DyeDP*MxIL+?_zjlR2v!bO#1hW5fiAdD2vk9GD0Is1rrVd*wE4T+f1HlZz`<( zV-LqQ%L0|9L1AILA#lsbzI3!;p9Z7}M6i|_CMjaySl<}`>^nr-{%ABCh?hl8&ie6X zt0m4gwn$g#HRv)~j|^1BAtf~#+`Wg$IZcN<)%=GG!qz(}Y4;mO+P+K2@}N9ojq`68 z09sc3$TEEug*XGsibpXY`mCZBBRlyRJf?Dswrg~l#rPvuZBgJ*xT3aZ6h341QXH>P zzkqXMygp=rDCjcR4;|8f^_`2k5SuerV#}e9=RER8t-n?TsO=SK zB!QL@mjy!FU^!|>F)=X^rQu)NKKuf9j~pp!h%&ggqix>2d2C~39pVa3!sK^LSISHo zs$EeCt&xXfVBi5D0o=`PkUke$52jn!Pm%838qq{TjDA<^J`TyD&U`HDgQrgi+p_bl zl}BED5#~m8D^yOOJ{?hJipCK*z6tIkYOk~CWEzViJV{7|!g3#+Z1h?*c8ZI43?7B1 z39J4#Ab3Q%l4vK|wDu`m+@uk$s>6@Yy+~BwK$<7NQ!pMqNL#zy$QeUvQNyOPTKA^Y zXU;UiK_fJd4NCWe*wR2hxlF1%EdKLyxzT-`Hw5tGyg?i5+&HX0L#Fr}i}`(YyD)yG z#|xSpN01RKeAr&KRE| z{zEUGtsD@?fF-JXGpf%(KosI_p(9^|#~Qzvk}3mYLV|)C5KgO#9f{Z5$^q4Mg!1$k zBHdkTT2_F#9GAlTQ905HJn}*G%)rh;{?n>yZf@3X0iF#Fei3ykm{eQ0YLy)R2GU4Z zfVLpUANcs3O((Xv;-b{IC#Lb7 zam`THcE{U6J#|oh-?L>fw?Xy)(Y&K|#ywog$*&_wzf}R6f8365yCL6;XsZek7R8QK-9jK6I|kT{|=- z`asnsljrJ%wOg_*EV?-jJ_={6Zve_qk5bA|_t9jy7$J-|M7PsE(*E_csj9^96nq=7 zQ%Xf2yK?nv0JgEa0N4WK1@r?!OwJXcvj7@#isvhpB9_(l4FI58P-E4E`2YJa@2eGn zyk!Q=pdv)fw10SHB2+*OHl%GN0uJb+R99qS--94YQKTXeVw|(+SWxN5U{O#g8uG^i zlq?;86O;oCLdZPOo-I&88C1SFg2SK01_;r?UwV}9`(gj&8mS}*UBa}HUtMcL4LeYY z)U#9k7XP2ckhgW;iZNZDNyxEvS$1a4qBXOEy!Hg?&k< z{V6xb{weVi{rh-fWPb4y%PvtCT>2p!sld=gH)KFb3e zKQzmYIOvKgCf2gQlNp0vaT^vn$nZyiUi^XLAT%{7D@9OH5Ug=0uGv{&$80H!7wJkL z#aa+Tg^TknF6;ZKp0V(DslUmj8I+)&CeO6{3*9DS=a-NX?+oReVtOdG#CYM;z-LG? z0;X|PU|W9-gc!DOlzMaQ-yUchnCUBpl}QK-ROLdLB|@1?;4R5Mu=71+7AN7XF+sw{ zI%JsvZp?+RjBM&Qj7kTA9SDOW1%!M7)IUhQ9o&vHi7=j##aU@qD)d5hahhe!>S6yk*p$IyLY|n@X82(`= ztpmjs34>*OG75@KYdOQtQBkKcT1FS(69t-lK z;0WhefJDUrX)0UYc@Z1B=ZcJPsWFs{c>r|&W!;6wJ7IB7cFp|w(YeA<75T&wE$9bx z=}IcPZQ6>q%AhhUc2hojqAmzs81Gyab8= zK>+?;xjUCMJk8iZ$}u-SzJ9x>4-nNvhaT*8B+>%nKojqc#wviNRM|!9A%X zmQee7LW+q8pbL4*jVRBQ@5 z0Fl%wOi5}q*$==Pt#T|SB`=XGXL0-PpjTcp(!PXvbscmI?8`4n4?zlyvhz4|uV)D^ z;fCkm<^ty2HPj!MX&L@$T!7R$%cp8fS}o=Gv|44e=5NVItL>ZAni!syy5=8Q+1GED zB{fWB*mSp}v7nG|J9?67b7e5J33;PtmNZ7-Rl-5@HA1~rfU)i%Y`I!ka+$5-c+i|X z2^s{!K%g8=od>vQ#Tr%1f;-a9M%I0-a=+nBSM*zn2=i16l7^1p+aP$Od$bP#x22?Z zWy=uu&^T9mgEBOm65j7pYqT#%Z}5W(u%_0Ho-a ziwjH#8p?L!>8j@S-i96!_E}Y2N3~Y#jol+Ph9r1TGOQOW4r5Zt?`W6Rv0E$#&42Yir7g(q5ZN3ml|Ef9k8zNrf^LVN!|BEg4i z$^;p{_T)KB_nnP%6R~vO+fmaaGDNAS4@0GpOGi`;jI%L9!;dC+Xg5I6M7Y`F9ECS_ z(Ep}AwD_d(=#qj~%d+bM>1ud@^Pm(WX$@EiCW@W)#QB;+XA=fs#^du__V4KOh_=C~ zgb<+U=fcCWGKAAivIT*EAO0M zgK3>jUcp1iK{T!Z`cgAWjYNP9|s*@P@vo$ug)3azQaP5W-Sw>v{zM2Gx&^IdnDXqjA9*#w*jPq|ZpuN>|IXFUq zQx)}!pe$Q41lkMYjyS0iY;hRX(jbiwT+~AGEhO^>B}P%OAla?@^L=znW6x4|icLK% z!a8GpJOz(}vpIRWSc!e{Y^UL%TCfE3=*-eZr}#$ zh0c}WXh_zCkruX89yia{B{m8KClG26N2S$K#f#SF6dyrF1zi(?UeMV)qmk)ptq?-; zg*SrO)do=Tuuva`!S@_*KA9v12dHMk1C2(n07SNY9s+BKEJl3+SOL@vo(n2vX!o<~ zj`1l>N`|k^ekun+d*Y`$VO3CEdS<7pvhqr&^m%LF{1*9#dPHXRPXL_ZVAkHHf?&wc zW%%abbaeck7itRrm&6_q+>iPIyN<=to=x0lM#Zb0QwQ!QAn2%p}FDF z_u^fj#!b*r{V~KSKJZTu($tHlBp@{aTx&u_-un3R6Qga6$IBDZyPQd-fgO1r3g}|Z z%Ms|gzIT}udxWigOY9(qCuB#6yu?{h-s+yV^+&?wLKOvm+$StHhCbQ;58DG(lKwB@AU19XB< z2~9qNyHx?Gp?`h!di|4#m_M`tuVo=hfFfZztX^D4840x%i|3>dfqB!7QYRkqV0hs+ zp0ghCq$+|Sw0<zrWTsSA6iU3FJ* zpn=al>yVc88S80!MkS@)kA!htqk_NzJYBLlr}tcFa^xV}DeQnM(3XU3oH&iO1?Pna z7Uh_}q7fE-ym2pl=k492sQ7@F`dr*=+k8gEMzr?Mq~9JB3m$?8ZUd(Ym@RLs${3vI z04E{j+F^wRl_s!0MIeb6baz_k#+n{_K{c<_>STH|3bn zY*<)dJjXvRU73Vv(kJU2g*qUPBC9GeV@o0+C@JyQptHP}UPC-7isOi<7fBUR+az6Vqq!8n&gu{VbaduJ*cOXy^Rx&0~3djya+U!W0n)3!+o z;^CMB9^1q9msob*BY6Q)-UQ%1Ile9V?R;#gyxtE}tDwrH(i&--Y`<;Zj>eG2PY!4& zj6G5gc87 zeN56H6}Mirsz43$9aQ`a65A$bav;0oUR8~)CluGe0Ho=5XDB(cm`lgSMWRwn-mRcVuEcqi8;Vstx|A1#((hOfY@bq0u%@W zM`5PNlN9&i(Kk}V+wPTG{D)cms2q{O!cPhSk(AW=8;TpKU zVaL%m9l^5#XyIg>-urII_f1gw>H?YTf4k8tH?pi%|7sgg)4F$#!5@HojZTbA&RNUN zzVliS|M+@y6pXUi9F%|bKVLa^q+`1HF7H22an0`5wF+3t@I7dT>V<}33VWY!Vdy*p z@=P^gV#~8K6b`Rd&}`EAj!G^@Zc$Wpq&5j10O3U#VAv)X&8e;dqNfk4si{R6z>UTr z&cYiuBE>Z02u9~wk*QspQcW-EN=s|{9g}%c{uk8OT%EBYXA+0{G2VRVm3z1<&K-QG z4C;e;K#ga@z{r%)`4BZQ%089ocR5-=8ZO>x(ASiK_Jr;djcI`a(_?XK{5MXs( zKs3(6vQ4P}4p3B|2?gjPj-tEbkvg;O&+5$2H3 zu)=})Ju9x;({LnICVTArFx82SoRRbf|6*0Un)0QoBkvZ%# zd*RB%lTNMKJ|l1W(%T80vD0_YDqT_hXz?6fv0Z1?9d~SP|Ew!nC$s0(_rnr4AN?b4 z%K6?D-+K4{_U`R2A7qgPTQ)fSeq)E?ds*34dj` z3#m34n`Y);V41*F*SS=+oQLh#pxEhj#?{vitT3o5n=vo)8^*aIGm6n>g&tGic#54f zApuhfyPUzTe~|yDBhIG#tUAvW#_Y`$cuUkVP1=`W2=xFgxAr6E0}(m}wFdhhN<4x- z!&GK%>{~Raqv$kjJHc(jvHA(Eb2xhX##(oCet7>Lb4Jfs?R#iZX)p{~Nin3OyoHs# zu>?n=IeO=`WTXAtykLpUJ_PS!eC^IER~ie&?r2ynRiJ8Z-DuHvx$2;T!Y8o-od%OP zdNXDC5}P8E6q?FTMC(8e5ZpCO{S(OrkQb3<0PI2+dR&P2XMI}lHPow5b^%XM-qL^8 zk*aPUDV1YF;kIN7KvU}*QwI;UrH-UvD=P%(KPp7QtXN>FtOzM0s1Tt!vA1t&W542W zN~}Bjit#tj@}7n4l77wCnwqXR^Y&qOgg>V($W=3p1`Api+ska?v_+31o13weP6S|w znU3RFoVY7EKx4Gk_rnhZ&+sO3xfs-8<0tjYDxr8nszm^_gKj+EUmW58ePL=^P0zqe zc|a@suT@py)JOzy>{(7T#gKd|1qiF|KDXvcaU=VW^*&8SyE z>jX@KhC7jgL*pW}8D)j9$1D~O0*v6IC_&LNrFKW-M)4{yTnnpXk-=hTdM+<3;7Mab zz>)(Gga60co5$sxuYdeES+d2<7_t;bcA}A1R1D^}WZxpoG}=qF7)!DZGlMuWmKH_H zk_s)9CB~4gg;XlZ+A7N=DXQP|x|wt4obULa@9+2cd7OWaA@}|HyqD{GZC8F&?T^(o ztvW}TA9wLZt4rxnUq^_9x&F}2o^v&^Bs@SziEpF^HGXE~97AjOlp!>@bzx}Qn#41l zGhv_io7uI`?94J?!zz(x7K^8dx*H5-KX&LQS>AttbQRp`+H0 zH_rofxL8F~N>?<=(Xq68xM%xen=gMAk(qnM?6KDna3kLTVACdT+R~x4in434X4=XL zA$4~ClcrU5I58}H++MXNx~^!y{ET*gs%$XdJ?2X-h5AAc{7hK|LO4CcDbIJabU;H> zbdK~3oArU}F0W|p%Mc6R5qYcV446kIy%xq?PlOsx4{nP|zKUVzi=75OuS2_(2r9}7 zdCgxb=CAHvs0qUFG<9F$c*;xo#a%iB0OjbDS8n=pZgi4aQA~Li23OnNuR5wJ6#E&t zItR`F+J=)93Xdl22HP>_y+js9(^PWEtoDcio=}~RkRu$syQa;#aDtUlRtSO}rtx{Iq<%SMy)E7MpQqi+C8(5xRMyrwv~t|V9ts`9P} z4xH%c!7OAjtnnleWH7S)i@T}iUZPW?e3r&WSP^O-Z=Sfnu{&7);0gg$=EXYKR(t@ur zVsxww?ToctSruuCs9PjCL@O5tcMjaaoVb}wmgx(2gHa{MMq%;L!=w)m<9}>^=x?6? z-XwcmgTR5n3ed*TB3_?#`Gr_J7tL#|NdFRQqIjTB^=9BEd;WO28-UC?v^OS89&Mmn z7F5yNyE0QOP%=Nx8wy+wCgz?rEaPUdho@c}u+j`|#PyVvUsG&Vyu!r#*AoTjGjPcb zlRg~&$uA6U9oO8Dyi{Bot)=(}L6ingWP22Qd%T==y=eEv!zq|dW7ls7Dp^B2!ZbQ{ z$2f6Iy7CCl|LfPT-4e++b-O70D2%7G2-Rx0Q4NZslB?)ayZ_Ut_FnEq5RGZKa`Ku~YglEE)-VZZ5 z{=FmApRML?wyT=zJ3;wJ80`>&Dukq z;Q>h3o09}N^i*!cUAoqNm7*H_KEl!IOGm_wsGHI^D}R7K_DsV=_uw< zfU2q&qt4? z5dZB;E8<3M>0TAIlg~y6A?aR9@vMr?UKw|}LlVhoqP54jv0De8TWk zMMNO{J_%TXF=_nE7iJA5q-Tdsv9s7A=qi9)50b63pnQ1OfRxd4jg22ajf$Ou8-nhp zuUaE(KrwpV6yGHlL?2wkNU0S%oBfDDZLsO+O;CS+(@fv2sR59Ihs@E-O&Qb@qBX`Q zq($Djm8WE=5essrtU{na(H;tvCpvR9radyx+w!drK#7&`;+>av3NZ$BL<$~3m972s z$rF1POAX5FBUlEUm_1lSI?3WzKqyq7HG(aOY@DSj;$Es09VJaI>r4_>rV~xyd(d3O z+$fL{Fgl@cDAzud2cVhDW{-^n%9e+V zE2DYak*?1@XJ*&)mxQq@wKID+dq;B2^I4LHm3MS8wq-$O)s`>NjmYe)JQ@|{8vBf) ziE*Ngk+c@RU?$h3K=#FA4;2;|BrEgIokr(PXV@W7!i9N9M3RdO&Rx;$Lb zXU&@jb3duN*nh#+3)Mw3^A=-R1fC!f0a}eOEEjo!Xm&+G2sP5mHIb^NFEz;g_m5OM z9KMEp|K7-RQMqS8_SN@+L-czcU0)OJ7e+Xk$OPoVr`lO9w;~5oO_fjmGUXJ&JvgS^ z?@ie?D-eLc1{RzJynLIbj-v=?p+oA$wd5p6Q?efA8E)O>c}MfrigOqdXQJmr^%;Sj z-&!J}=rBULH0=48Y9tT}(fIPA`^@WwJfwmX0}78?0tslW9Jc4Uo@(l<*>Q{BoFZVB zQpOL4l-InQw0kg2xa6wuq@$4^EtxN}Y(yZ)RS#Y^E2j2Nc^WG7hTf@|gVM*0>u_#f zG{-b|?nNhzv>Rgai*bWor)JndClS<9yr%p51tpN|QY?!nPoQL4_Gs>Skar0lLFvF5v-tP~>So@CmPZp4tt7N8yX@DD5|w#F=pPXCn)1ay5faxW$B^_cpy$Hk0Xpwt>*B1jqYx)XzURr9YIdeDA(2DOk#gpR;21v zINVhXIP884=X&g6@ka(IIfGTXJLnMP>v3aGpT}T|k+267SS@n) zah6L%JY<$3W#sV`r1&D=w#|z)WA@7|Zj}LN^0lve8elR)_EyG99;;NMj9ToKzbn^l z{>8h7N8XsOrG_jDQi~&IviEas9TnF~;j&|g;vz+JHz`qCDuT9<7zCcq7rmO=iL^j^ zm=K!JsMe={pu`Y=JGWyIgK8))0_$X=eAjnGpZ7m%;Kxo(t zM7L`zeLEZ94srXAU96MYZsaP=nLBsv_~P_u+Rl_Ti?s5^q225vnSg;k-dv>CM-AL)qEP4wVkfD#uW%it8r|1VBj$@uCab}eRK!i zl+;GkJv=-@1NQA3x?Egp>bZL&-Km{ys~+-m#3P96VSrLZr5r%vRQ2Qh#Np^>Wc92U zN=G;&)qQY-mbG&+wMUuVLsiw0!ylC$@%x7zPkZf6sRok<$wFK077$;5vGwW@G7x+2 zo)Bm>nf~$5-6)>9K7Ed4x^zM0DaRnjicas(gTJ#o!BBz(T6e&OD$3q(+xL8Nog;&I zjYv3ZONbW{M^?fx+7me7;%EmuA@6{IzF$V)K%6if@m9Z=KX8-zS!s`~%r?V#iDm;` z-B+qog2E~pZ6YcQ^IGVf0DTC!T}PPtdp)NN)BVMC6a~wx@X3x8l<9r+zoatT-howWfp)9W=(%Gfrp7a&79HZ6%0x zGSN_l31u(+BKOkwF*$e6tz7oBu+WiGq{6$O16 z2Yd=zmg4)_=TO2uBu%DguLkQbm3T~v)iUqS+L=;5ckZ0j0wUg1vK|?KUU5N@dbz}- zNu62ePi$gE`t&7-Iw{mGIK9Mbz-LeKZ5X0O`JPi8{>IOPrUWm>@rx@Ystxr(sAoN8 z+e86C`Q%?}Ye$K91}I^z7ngCyQ7dtqVWQBJ@K@qLss30^YU5Lyhgw~4PasoeZ<-?`SFjn&JR?yLO) z-U&U0PfV?ToLS{N`#v_cF3YzzP^_6Wox+f&ir9B^3buSbWhdZ`}vu9;M zu6@+@2RWt9H9BqF&v5w*FXr@J`l#w1mh)q1_zV)>V}{8@H>A?#BYM8Y+h~9L^0hOG z6ni4^OGLm_8C+i-EV@d8Hc#b6Vg(i#*IG|3bDhMk{oRR1t9RpMLoSXV^-!kwKBtxq z+BY0EaD6{&C0GHI6|WEHOkSh$aA^WSkE#^kv`I2eD8(my>Cw6ecOSap_Q#Gdm@{Nq zxxuuWvYYHi)`W}K7O%lAyT4rC*1jM1bA*@n)Ls*GgGCjHkkg6tLNwA6%q2q1%PwnT z7TMZ5O6i%*b!G3BFSG_$CNVG)`Vs+Pj6Z*>fGAmmTZZNstkZKX3pQjx69aN?xSldB zW`I>1f63qF-P~wXrRdM6r)I_emwaVYf$EI~HgO_C0sGQ1sY&nnLG*TU4Ge!*#nNFmcdu2^mH_6b6G)B(lrN@)P$(r zU$<`gVD5*sDX_p#?V#ArPwz!26p8+5zeYh83K9kc8#@xolzj2ghW&@q&59~;!8u@3 zgXN()w404wb*nioI65ct4g4Gz51n1#vwlF_7oUB$AKU3+A__%o1QW2MNe8!wV$&i@ z;vnZ=SH33Jcet8y7zCaj*PD`*kDXRpGrnZHH2HE9tvxWpuF8j-?!seGC$U*_F_FBR zDJZGf164^h=#4|R=7fJ8TzmT9BF}_(?BVasJl|!^4KB)!uY2`Gb=BSC=v&sz41vW;qZ>}?%A_vDUf9*NI>rQdZ^Vky|L$H^Eo8YmP$N!QPq;Qow+CpQJoA6 z3lm9pSEQu&j2dk@vHptk0^zh)cXT95xrw2Hc zKR>CUOYdUsqwIvXojN&rZLvkScOlOE(jZCxltd(MyiB^Ij>q!uoutlodR=^rc5s>q z>s<2M&9c?pC9&|4(Z3z??qOhCEk3+eaqnADk*U&sc`Z&M?-mm@*naTlRF}XO!0GnxW zAz@1=Lx8R4nS2iZvDXY$wC8H(o6z)cdbJq8w#r6|MhAkz(6Ku`5$|b2e8E2+$FEKr z5NFI41%p+L?p$(Kw6Ts}IJw~bMytFmqz;l{APHU4zcWf~W|DnU;_|jYw)QzATMrAP zLDn)}s`Jv@6&VnF_uAuE#k7P{$4iRO1p~X_7T|NEMJxcO-kqLzTXM#;MD1<8Ugjrq zP)QgMmkGSR)A9Rq#6fb4AIndil4AAcb@JcQTbbCslPjkV6vBfBUgTr<;Qt z+Y~U;r4kTTDN*IQFXmp(PXnLz3*$lvIh8+~FU|@b`qHpXacQ7sFO&!RQw;0TGfuF) zeInKK+|K0-6h)6bO!hARl!wiHx7}b<_QzW}Ujd6FZ%x?Tz+-?IwxofQs1)GiL=Gko zwyXHRsAMNDI45s>@!40ZpcTFupt=+}03f1C7PYbGi~H81l7hYW~L_a%^79pFnf=ponDRxonx4WbQ~X4giEBvJ$_xv3mWKba=P;4Q#W~ zO=g$A*}pm!beT^oH>Y11o0WU54=R|;s|9rgAUb=|eQMG+cb7S*w4?PdtonfUtgUJj z6Ss5Icd?2@Kl*7}R*7T6F_?Z?9HBJvw@`#fQdY@%h~{POQ);#qK%;V4Alfrnu}YU) zR?L|6hpy+VZBfmQJzDEb?BNQYDlA6gMFYF4CBiUM@Q8zi3xE$AE|Nbk#}zCa&?I~V z;S_Xul6szQs$M*g=7|b|wfhqhLpRAq)(Ta6z9=9(^ofoZ*?YYQJx^T6eL$ttr+fF2 z5KfCjikG|J;0zwZ{3dsQBX#oy>Uytq~(ibPT*|_~p75&714nTxmHB|A_z*s`e`K`XYl3d3|Vkt&1e_V6#c78=+wXL>XMaSNhxtT;2EkcX3%p{8e_ce zLm2Sk*}1o8VAuL+(-8MD@=2HHEiM8l4p72=_Uz>lz&g)+re1W}F|HI_m4WH#t0aYf zC>BU$_0v7-p7#Oo-m9giPMqiw)-}+5qw|+qDd-LPDT23+DVgL_>uVqdw|FT&wAY`g z7(%RD)?fCRX`wi+-kB4Om!rC`@Y=;ZR)mk6KTK&eb#d0t6ZIYMcyYlWqdzIeJ+0w* zhH71C0O4W93qa6EqsaU(3bfL{a9TX6=H9Z*m@!K?mz__j=un=vdgA66xt(L{OdXRF z*TpRM>(m!+vE#i}%f&Yp>#&2g23R!O+|)DWG23QO^_JL`$kIaxhq|0g_}U~%&L7E< z=j}Ln?X(OX@S?u>-o90TC~Fbgr-RSlq)%wkx3_WB!TP}#N&a!lpPTL8tJSn5P=qm%7wV0{nl{xXhg%NmwLCl`Oqj z)6$dIpCQ#aV?Y2E)Ds~y9J%PFvd0gS;_GfP^pC6E<=*$e8xj+$zZCw6i)DgDtyy&io|a+@64OVg*Y(&w;`iKehCqRFTzsx_ z7c{7=SD@EkPE|Q3(M58CSzH*}tj!9>&qp5Gw_3wCi zPo}VxoCcDWin&CkcTUz`IiBY^*mUeBazs_mLj+NV34zNOc!Vt*zGCv3H?`5)=Zd^z zLPNAfcu9jR1~A((pDcP)XZl`#h8g0401r}Bb$S1w>4!gWau6B^+JOI2vzM%U!_lmL zdhZ~`+?J3JfDqq-JSo=nlxHuL6Ij3%^M7bQ_|EoJ9vsFZuPxjC@GMfL`D>{aw;=_< zPX__`Qok0xs2-&n)0}`tb?3Bq^R$n0$f-S!>UY>@0CL>Ju-%szQ3U`FsL!2x_}$E; z(+jL`U5e?j@w2zf(XGgG0psmP0ZoV0ebDe!;_$pmV|(u2TY8`Ie!H(JbJGU31j^q- zlAzlzi7eZ=P!+rqW4BFk(Y;#Dg1*f+-bZS&akF$UuQTUv+5NcS_$Lw`jvb6JHh5(LO_c1 z@fLHB)C{*#cbFIL`X7bjg1rkhS1`p(oRFefr0`B3xcXHK*$^19CcU+>c5?dIfQ6K_coXp;Hp6ni$r~tw^)>qfy(S(eBAp z9qXzc%k>cF3HUQ@WyM1#Gzw|Yah4nJGG|AgGx<5h=!(*tlJ~PG=Nhl^6=gJx&s7zw zIKkh*#a}`ON`C1VHORC%X&lb+8hutQ*Bb{43U1h`?U{xnMgd2)yd<|^&Sc#^XhuFD zQb(TG=DD5<2n>77T$R2M)Xy}vY(D@5NlZn}FZ|6OU>CJM1bJWPvvJm!(~|b2x>QtDd?|EH%dYky(K?>jnMqK{B)7HIrzfH3XjoLO zwRZV}uCKvW@vyM8KlS46+i%Wc-(8FWQ51YyoC~Hx;aK&dS7dc_AW2XZ7jxEv<*=Hf zrI}w_I#V8}BxRRKI|ZP6xc=?7dd6q%6Q7c}>_t~9p>N?87eCYsB_aUy;4B#DM~Fgy z0A*@V_ASe1z~Oh!@i%nOjNiEM>Y$dAnYMWSq9T)hDZ}QcXvGxP2$rrroiPaL}Zq+mdzHC{1FvU~#RNUhAPcJk9&n z78)kWs1Sx29)g-70_otzKjiHa{hj!5V<)1bqY$tb`GrZ#@Xrt++Dv~F&!ajeVmgGJ zrPj|qTGt-78eoPHBax=ls&}*QI?)f^2G)X?J$J`>3=KVSAhmi`P((CE#17J z$mDRm4y2j!yy3)uDE-hROX_{>^56y+TGDTc{X|}<>U+knLxO;F6n1hfbW&KZaj*~q zothLY+K)VOriO{cTm-K2HqZHN`s4j-upSBcpoh-v(rI;4(#5ao_>L~3z`I55argUo zc65{HUTtx6J}tt_w9A7X}tsdM+8DmF7NdzKgN#hZ_uLZ1Ky*pm*ihTQi7(gwN2@Qb*#w z_NWq6%=93sL00FW`G2?QRlnykyTQXf`_$Lv9FL8|PR6W?oinvchBo5vX#x>*?-EJdnjgHO#0tD`XTpR@mEgPNjEUsMm$hF%&(GZH(S`}jf3_k(8lkE@?R zIA_yy<*8RmZF*7FZ}{;06v*iWQz+wniWDKkaoAE*dTr6*YBqV&x!HxwuqaElKLzWo z(M?lTWA7xDr3;f|B%u)b6y8?9)eKiZBn5b;vtc=Sg0B=OP(MiH4t0F8gEL41qA`7`-)baPaSSMp>lds zu%6A8Vr&d|0Bi6AlA`55_XRCX79E`^D@Yz#s-XzE!Da3G(y$qJXHnzke70tLa$v#b zt?Mkcx|4wbFevYilg9aK`!f*(Da`$zR8)_*yge)b-7>US*OVrsIcs#J?CROe!fxuM zNnLl}ptcWT80=iN5dngmRu&)x6x%DeF#%FNd#SY zZJrQcefzGvAN4P=t^=p`I6o?FO0h=UuqHB2^G5)?M@tiU8l7*u&oT%Y5LVUNJedJ6 z4~BkH17oedY-nQ?8?N~#oMsb(OgIk}>r{_Og!~M=g@7v-A_5%qd$0Z;pCc;%W__ne z)HMj4*A`K=5bXNHq~s3ntBvNj^(fT@dzVftNAEApk(}=1 z#6kO|mKN~PMsTbine7H?jAGdNt}x4G_ZANSa2mN7%-PhoYw~3qpq`qP#j8WHxi*B@4D_Qm?`K##99(}DcLdrm*r=3sW`BhL8{v8Tb6xP8#5EJ%l$_yY|joa^<5Z* z?WGvh-8H-Jw^geCH{+S+h2_nliC1Mc4^K>33S9m=-c$sG%I161dYEf5j^!`X17HDc z+29h=tuuB44P|VLPnS*Vjqhb@Dn?w85LIg2Vc)mdt7soVFAwwft)C!vGI{99H^t5$ zN$`k_SS}mIo!z_>+7n7P638)N8JafK-Hz&WqL}KK+aoR<+Vqn7bx-FvbdN1(AoFWr z)Ny|3RV$0k>SrSyb6j?2z{1qlMVF`tiOzne*{v5Ff#)VUT0j4+XR6U=8oerYvA*e* z#$QmoDv_?rVfMV%bXt-j8XFXUNHeb~({oPeyQ*rwWcB6|nPZnsh`qu56%Vwne8g_B z(o=WOUHY?VI5~*RkOKXRSN-ddUJQ7TvPF;5s_XBom_IJwXvr^<@kmo# z7T)Z&?}x9BThakhnD$Vjo&k4sUy#Ge7VDgI(tPd98W3`+qA}x6L)nX9f7JTrxNdd{ zbE^7jD@yyIOe|(xxM~`Y*s?i^{PskbiR1zkt_q?;Ns&Pz+(RkiWd8nZuv|y@Hxu{5 zEn(rwH>-!%xBo6suV_Y412e^P}F6{WRyo?5lq2MA5-0ic%|Fthl? z;{a)T#{3N`FyT$!6j4{sq|}%2#V`BKxM~~IcvoC(&_Ydloq~Lce|LiIvAhEJxakFm zYdStzn?RKZlZ8|)~EneYKt8Z}k-fHR`^spiF(-Gut6W(;+G-%NJ@Y z6y(0Nms$1C@;xQ~@#6jId?XJ&u|?x$P|4sLD%ADh!^8?Dd5|LUYCZJjnqxDZV#?+N z_erdpSZgIlRDy1ZalG~9UJgi4oJYwNY6-(Rhi|^9D#IUfM~*0*$fc57!-cQ1@DMDJ zjl&>qmGw_dJHJiB>Q_oh77xpP6!|aZVeDv|p0g_AE^6A{tbVwPrU8jH#cd#cHx^`B zHPC>z$qm+Bf4Y=N^%1zgs8$A>T5f95y7lfb%h|_|Ms=Nkc%S>OojW;YY1x*3?qNX8 z!=xW#B4Vr}Rm^FVL>WFgUmU;!xA%)WJz|Q>#Vp3x=QyvL-udEGw9q`V>!f!Oa_VdP zJY6z=32~J;7)i;Jl$=`d%jqbV*E3J{bIjw{Na02HE^ZUF{gOx~1N{(Rq9!;* zAdbY>2sbW_3br2Opw!Xcpj?vc!($K&j?7OTQhEw4R*u2A|GyM`?Qht1+Yrvr)adhk z-ZJmYA1cn?%&vg~p*&ibN=bQ6Vcy-d!VUj9Y)!IljNX{0A=c~w9Z`R-b=v&*>ll=8 z<|XT`3^0hGNs@`JC?wJ;OvW#T84~#?ZoI`W-(gJxr@aw2?erwByz@=cDrB2QX87yf zo@*MZHJ@W{D(Wsay^aKUimNFvVHy8s@pVw6{>ruP-_VRL!Yl=YpUt9`Oke?>0Pa$v zUU--=erbU!*JkdLA7#pobA4A(cn>f$@8xGf=3MB$58i|+8`t^e23Gi5I7dNg7B2){=!U*HSe zgpJ^m)KbjA`M^aX7xi;=bX<4e%kD28lp+rkurphgl#}r%9NMDXBWwz#_@Diwr~86= z(YuYM5c=C+9<6DG8(=+o^9yz^w{ zPD&yK@}$yz%%mGXehUvyqMpuOb6HpUe%TWvn=J==Q1}{A_yXb@0NHq;Z=v? zBTdDcF(%?`Q<|7GSVAa${MD^$D&N(n#KWuZx6MNmYyy=Oc|FHJKHZqg>dyuekgq!`tiX*2A|dvz_>plgbt#1iLH4RPcJ-@T*I0j4bq+E$$y6&W5rnyO1= zjT+iR4Lh3&LUO;b?Ydqw z=l}4-X&vt8dz=KU`RjvPa(l&udi?ZJgGV{sYw9v>ZDcu1{T>`g(GwNLN*F;lrG8OJ z@gzy*A3#;C(XJ<>$ED{58m$m=wGf7040E5uYd%~Ks zgNodK;F2;2j)wPdH!{B&Xci#cL6MB)6S`;f!1LlQ>j|Kj$P1D$FEK>44FH50O!Z9h z-Dr7Wm`zw*o)=V+_#Tj{d~_1|=4vT=zNO%(B$cs*H3Wp!#tjCC?=^T*@!{cD`llOz zPoRE}9+y=bXknJbWNI5z0-_)#q)v&{E7VAEN2H>Zj?N<rBsH%``q77mhfUMRtYWA1wVS$O_b7x1N6i&wy+kfZag>cIznRTTqSk0x?9X@6Oz81U`? ze~N{Avp3I&oU7N-hWBUBkPdC(UZ`lg1a|h;~ z3Z6Ntsl_OZC3iY_jvll3;-bI?quN$A?yyL+NAqAS^=R3u|8W}flOs=H(gopPGT3)z!)7fX}5&MD! z)0c1Ty4P3;Rnbi{FkDGxA^Ir<0q;{{T4&egt;#$)9f}m4qt_uPl5^@M3RI`uX~bt; zx9IG@jP`Y&i7A#G#WVmY79nN9v*Ov9R~`uP?MXRQ9~X z4gKRUnuR}pprFSSx=50Ok&!Vb``0U1MvM7aY!GLh73u$=S`PBenl03^@7+Di?k(BG zChdo0sPLz)%VXb?+!iI|5r;Tw45Wcu{K}>jVJ_F8zE+PX9XocEStVlJlZ?U=qsX&# zPl;HSOf%ii^?NI{p&U5k4lU`e-W~r!l#EkkarW-p_qs>mB`#aq~BWfHQ>{IzvfhJj|Ln?^`5 zK76JVVG=~+Scs+q<=~#GVTxSb5&iC@r-z{P^7sAx^O^I#;}BD%)cXv2bjfE}boBZ9 zh{E^TV>2eZX^O}~Qc%D&vbi^1O<;Te{#Sa3-Bf|KCd zItIA=`)(L?l1T=_my)J1mMeiJvu<9tWTzpzTsP13-rH5fxsMplbjzb{*J25aoHNIX z5#58HkOvG>y~p>nuMGmWx_c-z#=!&Vuo|y0uj&)OLMjqpoVu@OZWzzZX~Cw%^sX8V ztG*87r8h8A4ZYL!`ST^rq%1bWGQ(!uuy9au!RW^l!%naAEO;Ps$+EpD6MHIEx>yQI znopUogOX0-mKHul9qUw|x9aPNGzz^~XCE1I%O&%yx%sjI?KGU(qNwqWh876$J zoqPB8QHn_ugscbW44YF%6p0%J3511d6A6B>;zE>LvpxZw?6)M1ZNuJ3258*EOHDGf zvPwzrkxZ-ebu~_WFLBY)E=Bs5*Csn83@_jMnSBnAE6Dpzj$dNEUJH*=T-p*0Od&%s zu)-YV6imf6q6l1GrXLwp;I6pG96&tjejqDe`dwYGwWcqn*!QUCRYC}~!j;1%< zrn4R&_-J%A)1F&JXZMp-(9u_kIN(wuFmlk;88fmXeOr9En@pN07MOwE>1j1sNJVGq z>FJ5Yc{j644?*s34{WjJr=PZSv7Zmg)-dF!J32c{j5Yr~o#lB8U(6Z)T}%ZNlGQsz z?QUo^m#WO=s34!$KIpZPcJ0~W+e>zaS&IDi+2c%G3SSVO=zv#0E2-PzO#iZs} zjk=X`w8X=aGY3RH`{be<9{9QX;fZ9@zz$fTqjZx>Kbc-9>6t>$zXrOI7&S3=3(QNn z{}?}s#Rsd1&NtzcufU62d1HRv6w$oWGW9{6fi`|{r(TVuTY+I<5ykFpchqIxoH-GR zi6(5Z2n=LAs#_BAj{!x*-`rP6SfxT}vK*?DnaA*=63nO{7;~#utz`NPrk;qK)K3Nh z<=g*gWYWYRVkH7YPF?PR?ES`e%yJQ2g*!_IK8nad=4MK{FKS_&a;BXRE%zp}@<|s_ zch>1OTy!ila=N$oIk=f^zu2@Z{sk1hN9~!5gBgj@)4*Vch!)6&YU2fV*|Ae6#(eIA z0-$bsP=B_OM=xre{KTC6Is}TPWo3kPUjj68jPvIh0QlfdGPr#q{M#_Jp@X!#+aH_J z@5N;hjS>E4O+61)bvH^RnDqMNSB=g^LA3n2G(hS944Zu*vs*!p`3%2dIxWr0ZghHH z^9OG96HJ(-m)rZvIb#YB{}giSFYI3lyh@kdvg( zp}r zvs^9Fy10DZ8aCEG**u05P$OIB%*%ZMqNbyiytG%zU8122$BAc>SadaCW?CO6m|aT# zs);wQU3;~S(_q(Z-;Ez%CU}R(O}%7Q#+u?m8z99Y`ub!-x&T>{<-xSruEmKfW6sn< z@*Q`cMN}e_DA<2{xz%|Osy(jKqBA)!9oH#$kW3D~V8L19r-Mf<+wJoZ_Yt1D>3_K< z7%2ZOi4KwtyG~ALNO+RV)ko&n`mdpt;)ddVCK?^e=&n zd>^iB3mGaUqsi0Sw{6ShJB!G|Glcfj)MeS;7il<6hb(?pr9|WStl#=!{6Uv#L9kmv zP#%%mr{>0+zN}uQwR*4p;rQkF+_|0Kn_+fM%#1Buj(mEjzkg})44y8$Z`_=zev;cu z;#(P`9$Mt;r7zuwqSxcJ1}%*9ukQ89(z4QyvBAz&Iv9@**)m}Fu#Ud7L;8uS6$u+n zlImbmxT!lEbZQkeqW7?2*6_qU7mK2$2_jeJCf7voT2r$kLofFwS_G@eaGMR|iFktB zn2>C~2at3s8tD>E3uY=UAJ~L}@rWyQlyxfyuZgu6-;5G^%xP5M*_ZdUgczVGP^7Y9u^$?#8nO2&_GMQLCEIW z=vaY-PkRM~0YrtAmEfGC=sjaF-)%2%g*QK=Lc*;8{~e~%c4?L3($Og)(@0eKNf$@c zUf0GK#C;G_U0ag3RO};{Sxj-5_gz7BBRsLIg~I>J|@+qtUsh!g(Y<_BB;4K=bY6_kKM}w9nE5L#cc$t){XEczCrHGQCD_w73Nq z8*)})lPu;1!|vaaNl3TH4eZ0ckgT;VkPZHR{;^;bXWWDnMQH&Q9lypCG>B}L&%H5c zn3RO=;Fy}Ts8~ZXW4PI5o}ws%$sE91s_#)ei6&>LPTpB6aCnn=osvNJRJlZtNGl`( z2Dr;=Q*z!E6hZa@fxW4J&rB2|KYZ?<(}P z-y3t{#AIp>k+$kM;29Bz*ZA?{FDzlOgoHQFco+Uuv#C}5^7Ek&r5LAC4qElcH5mk@ zP#Ap!)4p}lF2ye4d3uh0hAfa-A1NP=*Z+hk)8+ke9LXvRTH+D$R_^tr+%5F*fOo_!2{wE zRtl5{d$mxNjJ!_9i9iv12NcooJ)g0S$rMouh5lYnvPuZYd1bZ_O=f)&I&l!-c>knO z6G3e-dfsvkdj36i5yREYeBM)Lr_{TTx#7`s+nrZ>U6rhQ zG3U=2mc3NVsxUUkS@JaAZ(B+Fh0Kwd@}NBXeobuW?&&87Flm6JGlJmrOx`}>vix%U zNlK889mgjZ$5Yr&pE?yi5V02jfZ+$e{ae@Y?wZG&4@Gy8F zR0|8E+h<@^oLg+(9Ow7deb)H6C(QMG6BJP9Yc!^*ybilr^CmX>)XUJAQT2kik$+Xj z3Q{nZ z`HFlu0qTJL`On)`iQhCZ9W5Jny~kAQYw$j?v3ERnZvXQX`)`k`UBS)f3hQsU17-f9 zOctdCxbT^f`eb9y#VOIEdKTFKWNHd(diURxM;8r6<0U~vJ<8u5Na2<)riYXvnI_g5 z=qUL$>$5!jy$Lxoi4VoTnzqy0lRugm@{~0!>40=p`OD}F(~ZUYLFem1NvQqDNh#@+ z%4QaQJNNl}hzV`$7dva-b(xR2Zi=;a5C@^DH4xMLLx}3TIn2NG8-Q_;$8BXtL)SnG z0*yWs$4D3?&XuG24jf^VK}|HAw5%KxhNm#Ea6g5emfIHdXp4ElO*d_{+%KsRR0teV z@UyA1?*BXuXz?~?Y}iMt%yDI+5`7O^QI9R#DP4C$G_g!jZg5i_ONLt`Z zE7m7NP3dTFufD?N!!~)H_%NJpLO81-lIx$rYn4-|-eKzr@8VmVxEM z;d^Hf-@Njy?%ReQkOqxXVnXIQ8D%MW)vgBYSc`b#Wca zKifH+dH}7z$lD}yI=zovH8*cQdwr4$rq$A~I`R#60+q) z{VPwSqE}W~fi#H>dzPw(V$q2%Ow#?#R=)>N{1z~XCDB6+t?8U=yv?O|b4;(_IXgUP zwimM|v}FG-@H!K;(Xt!y`c$BjdqePl2-|Y|hv@vJ-@`Bc$7Q3#Wuv2n$lkc4Yaoh* zG3dRK$$RV!IbjvaN9D*e-yI8HKkFuL_7frnE;o;#S z*{uvIKZ4GOH`;Ip!=iGEi%aA~9mQ||K>JDUR-)N$;i)psDjJKM)g^6AN8Ton~eQ zX3X<+qO}K%CkXr&*^?erm`)NBN|nzMg|Vuz%R8bWZ+*NXj>V)-0sRqi zj7Q1s?XIn3dGAB88z_Zc=R`cD(#i{2E-A^;Og|;cl8EdaN?=2UVCJLTkArweAoJlywfcZKgk!_mLP~(VH7GBz!+as4lFkv;A@0i7duv zWH|$w1@qenBV$QlJ&#(&i5}R*U6=FZwB=*pEp}CxpOEU*@F62Ts2YTXIg_R2qr@(9^qhl zC}#RrFzyKEYtSHM04!A21xW+nYMTR@F|YYw z2lc;i^ozzOii;22jNTW8|J~k}-&+%P)$74*g(6&l=|AV~FlVW=g~aD@Z6lRi=RZ1w7I??d-1hJ2iSfob3uWvMNEG1!vQrclhbPQU#vbP`3WE`GSZ1jLVj(WTRn@03E|il2);gHj%&gw8Tuh2 zLr}pf(P#hoMKV#zoGd1~Eghj?LrZqMxMJkEV27=FcPiB87%&|OA8lPGn$_13AJau1 z8HHQcYj6@S+&Y^9>3asm5Xw3)i3DBAf^$IdDIoFpr}C=5TEa6L#8Bo4nn>v^^QWPr zl`J%Cw~LKQU#K#)i#T>nCWlhQ%Sng~i-kCzcXwW9chToKkbfykK^-zvUHxLCkK}y< zmArkv=W}E|^UiouqP+$YD%+j({-EUUiEIukOz3O_4UHQB6pNyhBKtsNC!2`K=mWZkQz`nr|U;EVWz!z5Z zyt>~X%nI4wn{3wvjTGa@j~>Y+LNVtG+=+7xRnoE&3GD%|hmgv7Xp~YGLk3^{9^Abz zw|&;zh8qVo5r#7jtjXN4`%XIuz)sb7%aqr*?e+^0CbbV(Zk;2NfG7%Z6jy9ei?|ziun|xH| zq1!|;An6pfM9+?s;Q{z|2~5}Kx%|4i`o?@mVVLP~7zce{t*|$blGP@PB*}H4k(*ZGA!2MKLnG9u_BeLVVl_7j~jafE;sFKDd zioH&*r!7=t#$epo|Dd4NW>p7ln#QzJE8ooevG%F0lxPIH(}TD~s-3#r9PYgQ=5TW0 zO&)Ief{_cjB{xkQ=f^S;O{0V^Ns?85-`45-;7-_B=rR3$8+urYF5t-i{oRV=2B`W{ z0Voi0Kc6$|ROb76AL*TkkO8W?ev8!gp!)itOzlPQG;<~$@Tbm>bcaf~UzOUk~^5t=oLw1qz1Pk^jF)SQ;?OwyG>2UIL&QppX5uJ%)|z`pJYB2i3S zzkS@6ymDs$%{XHtL30>afVzZ!As=%;5!~}6ic%gTW`Vc6841uL_4?yAax9>-5u}&e ziAcgb*pF1Hp{J5+BgG*piC}&n@V#a5J3GVHWFY$SNirkvTw~96(gqD zr6VFFc2nI=T4jlKO)4Z`an&T7_?vH--r&e(ZX$$|5(#sZFl)!Bg9x~tmQn#fj_R1W zgQZ;RA1Sq6Dp!GQaV&XW?{nyFQ65pV`<54Ws2`eA)aySm>L+G1cYTE69(ztJLb!Pw zQZ$P1_N^Z&YQDeNy5ZT7ieEVwjv@=R06iR)TKc zg5E_O$`TQD-nT%%O8qz8I2g`U3H~__4FI=YcG;pajX1A$uVvY z`b>a0YU&XOs;#EcZ2ftMW7PUstf!|h__J8Y4e`Gf>u+cLpeSxQ&%1Iui0jsYvzz*U zjcWoyf}f7W^{S+z^x;CD%Sl&BG-qP|Q$BLvAoo;b$#(g&Qz!1T{?O!8{A50jq}7-E zauQ`ezY7E{Xs{%iHr4*YoL4jhHKByakug7op|&mG9DUq1_MROaI)Y8M`c8^I=AX^c z>N22cSbA(>uv$5rZ4Zr}!=a$U;APOjCTzjHJBy81SDa{Pe{+|>I5Wt=uFrU`&%v{Y z%+-wWB@E@c=ocJZ5I*~$4${y6&KU@?F~66wadk-PlcJ)sJ5wjRRGxl%vRG#00JY@? zwLAJ)Dr_W=b-~1K=Q~~8eI(E7HiA7*3cAMSKP)y*BWs#n zv#XUE#+$sM+5iDigm)hrl}Apz0UhU@&_6mY)#-e@ob>drGJ0u3mA-v?S5f-^i7q!) z_h)}l^ZS3;AOG150>fAhIo(tTdG&bYeLVE=&_-MTb?H^CTt?JWsrRZ1J)xt{(O8R4 zsfkAC!-C^ZG^_Q9=*ZG{u6)}*>Ftj|7m~zd#mM87SF`8L=`?6ZT9Ij(r~SSH0=&q= z$Yx*Me|R=!wznXoHX@Eh(7q3VqXNRr)v%Ixj#I8rH^7vFQg729?*)P z|B1&ciXTxh)ei<&|NCF*Uyj-%#@}Z+8+Ob1VligZ-5dSJ$&G^b{kE8xm?3;kez5L? z_I;zMP!0tyC0vQ)Sw`g14fRn)H;HF&-n{#cdqD|Ma7SD^G12H@BN?TFVnCAW-^U@0 zO$ZI&JN-11#OpRjb7VtT`P|*7<0)Z zJ~}`rZ^zNb@{5kXCa6|hPP>i-&B@uvOxqqxPWMRvWlfHLA&iR8`^hjWX769F zCkiXCuUg_Rsi&z-%4eO~1VwXG~E$YDLZ>y*I35hH$6Zg#G z$}`oI9G?w@#f8+{6x-6uDM6|+M!mwuN8T1a8tg~P-oeRcNgn-9--QA;1j zFbCIn%U~-8JScE#aN(lZZ$z~5$?Z`bt1hz=*OKuwOD2bddk8MGft3gh?11|a;EGM0 zej-^rf?*C)Q)=lhlOT0D6?omDuwz;)pPj%^_YWNrF3I}AUo>Fz6bwK1Sb%AhXb?y^^)H|AZ*sC^NnsHHQF~3O*A}}p- z1~F1Pu3U9$)m$vZlB$KFFs!o0T@MMOko;x*NX(XYP; z5KKm}1jqRauuHI5U!v0<7`=-wt4q^*cJl0S(=_mc<`Xi;J=+1jhqlb$F*Hv(cI*^< z!X=txzBz4h3|uikzS@iI-FhpXbSjbY0y%C8aa`RhW5E{}y`&fp+hI8c?iaO_Dxyn|7Dti|Y}@(`}Z2 zTH_T%_l0Cb*b0z+D(xrcFP5)~61WC}1IZg~&cc7|iRSi$v4!i1Sn2xrx0N6% zS00r;FX*eTu%1Q52o>wew6hXuk0Dx3i~VftOU7^2@;Z^Ky>jZLG7YBwiGNFsL?Ky? z*F-r=B?Q?jgAVy-`u3ha_iID7t8Y~Mdzber)e3IscK_*o-8)zArFp#g^+gkx_md*C z>&S(i%z}49wcM>!XilK9`yJK>@gkjHow#&a()%P;>Gt`7eYG(O$2}Hmy(Vw2^|`TLO7xWJ|{6->&R`U%&08 zY9=?UUgjeRGhm{z#x>;sAc<|NNId)RB3S7T5$+toi+cN+;RXrMmk%tH%0yIl4`cYgTM^I?S`e`6*}!UKi%$suS@Cs;`>~y2vqX4G(=Vhymu~ zM9fQ*i~RUg>koD8Dz(;%4JX7KC{9QciauyD_shtLOag>_ug;Rdb8xe*TeNg}R07=s z&d65YIo0wO&G^c@Lt;*zT(|RhZB5GFfO-kJY#R5X;i49vu8J|cVKXFmmEuzWLoP}$ zaKCAU4)$)Cft1v+5Z-gSN1+>j8c4?m-VMXL!T`tVO>($72`Nlg2oJ`5)p17`hb z^$?CVd!uHG&K)Fr6HQ;+iF-KsSQtqfBo zL$FQ)Y;4%eWHrlnn-8WW(KIs=SrIgd(q4jCQTGX3#jOq=+!k^*-QUuA|!Q2hP zutyZA(TNE%3R%mylSmLr6_PWMvz`l6Bt-Rh$p`V%O?tny{trRx9QZqSL7ux15d8|9 zgf?oU$I1=<^iSOPI!Xc`$objFKmZ+O4Qo~3_NJy_Y7%71jZ!>cH(j6PY&KnenwCqn z`Mdsr1u}J&6zO9;_yJb2hx2cy_*bQUf&__Vt+aMp+0Zx7(nftILnTt&&FbH~pQ$pC>!Un%TWA_UCOH=bH5`;mj$+|!t!75O5vA57 z)xR?%9v4wu=UtP|*ONJvUsvS~Fe{yOvSLJE;%QhM&|~T&RZcc5D@Ry_AxUEd+#(@v zW}%xAa)SRA-1;n>1(G|HtWylv#WRy?eq}rTmd*v!J2)-7a6Z1N5_`p(k)m7R5bh`b z8eZO;XE~uX8f+_Zg*eZu`Vf^Yk`JgA!OMFn0}Nblk7{qN0>S_&g%@RQy-pw5`iO`@ z3p#PE)Tz1@W>Vjp|4xFY$XO&B#sfHA5Ugoj%Zx{06f3riyl@kQ%24g_NpsVb+wBa5)XshMNm{X1GNCnCx2?&Y@e zv-(SVuunnbjxmek(QK3fq{oTq+!2MCz?z5_QZyBfCO{FewwzU<;TlT`BNd3~k}~lW z9SL)4E~8gG3@%PbvTwV7N-M*^o)2pCCKg|3Yf8q32ydV(lWy5AyY;?fctX#_%{IQq z;rS~A=B;`)irx3%xHF-KFy%Z|`lwAkcD^wCC&sx0?alLq5vSVI9dYP`$ZgnPSh191 z4gfir!{B$Qkxj|}NA@%J1!!&n?GRPw=bQx4f+IeHoMGPccbyT_Dkuj2*9jM%3MMNP z7JyX26{HSAR={Y^zhIn`07iUBFJfaJ^Geo+8UV%S<%$JC+IgviD(99dlcs;$Au|9i?c_Q7-YK;Y@4u^wQrnk4=-L zj_>Ca~|1oBx_OY4s6IUg3zVbwH#JC4fTPFN%I`4xbP4- zN9^_=luGGJq~#(Xu`yCs8K49cF*DRHvNwA+BGQZ}W_Gzj{}iU4d7bdioQ3+n==NF! z?2GEkdgqVg!XTuCb6=tUJx1$V-v-@sNjMQ)yB{M9lIgKZ5|TryeGk z{#fzVr_Oh`<0?`+b}{p#5+AH^ zU4SVoYKqLpYf`D?@qC(Y-N*OEoRqMCD)pya$e1NrD3I&62uSrgQ~cfx@hN})Kb4Q4 zLqSNc%D*Wer&l=bDfDOB(kb{XvHe>f%J69W;JAKL{p%IyETUab%;I=nH_tE-9_nq{ zCPltPNAZ4DGB;9$WPypnW%9aI+Zg2|=3`w#hxC7WF>wT(%k;sT%;?pKU-@1mZhj>5 zjc`N@HcT(y(BQNHUzWyC8T2l(1~OMra7)SHk{I)|XU}GS4TAvYGjo$ou-k9VL>w-b zZo+ilI?36VUpVfUeAiQ4b3K&*chu+OZsPsmz|ZV!SMj*EDr5haoTcXx2nmA=9hZgU zQvh+INKRblyMfSjNH{}%}2 zTYC@?nNUgTC1ACP&sz_FYYux#MRZ!^T42L7#TOxN5sURrlv6G^3^-*IQvRiVaCy=| ztKk&pkfY8q+D!+8;|X>k(^$Bc|10So`NO$+J{6Cihm)h=qpP(&jH3GRkt0e`9fvmhGG#~u zMR7-hLXUB8BE`ETN!NJ${nAcRf#w;mAV~I~MenFls-~6mP+~>oFx(RIxU<%p1)xaO z7Ahd=Q)z38;hW1KbaKbP=VH7zFs1o?$A8*yaKqk00)L}yZ$%rKFv`c?OqBs&1Wy6j58 z-R}t=d8)%1X<8Ae1kOm4$;NmWb1aIQF9QK7cFRStY#OL-Z*>Fd_sYh(cHr}oh57L= zb1vL$YRantzbhzxB@5{J*NXHGypjKhvo`_DIdA{|FJp{ltYaO7A=@B~Bq3RIp~w~y zrUoS;Dr;#NWT~d?DN>1~nrKsGtl6Sfl4=s#Bqk}6p4WNB%-qj^JokP49lzgk57P4e zewOompYH`KNc|@B6^ifdG&Ls=YkoMveyYo?FRc48RAQu!aH##w`)R*iv1w~@)GocG z>7akqvHkILN5;(=*q}XHRH%E186VJf(k^)TgW1wsbTBMiF+X%jL22pbanzx+t*s6k zi-)7IF1^&Ffw|PT`qvq{@?>;W1N|>5dfPSA&vckbjUp4tCPN-AWJR<(rgO1l)BLnC zf%JgPRUUQzd3k^8RStitSEp02(!IevH!aIqwW>*{-*YYE78^s}v<}UY;``rz`D{3Q z2&~+~ntKQzm$OucKOt0I{yn37CLA83f+e5TFe4*_Ip=}FuX07o;-T6w7P^4o3 z^IMjm8+az3ecU^m%;{tiuoP(C&}@pi~3L7Y&FG3cbE_{IHM zMH+jMGSPVT>I5LtD@w(Sexs|RrxfPM|GP$3?fn?#=e_pv4z|juA0teV-E5gZ1kV5i z1A|ea9W+3ty2CYAZrh_cMl~DEP+n@#-Un`{6}?-t=Et)oReLtvO{$~av0rG<&uRcn z-9-SUX9eHr6qISC6748cY^SpiRQe;yZTpZfPP>2%*)`p*coMlkrt4cUB9jZ7hU)Ca zu&c6f3H90JcX>>3+gs*-PqpbxKg9Qo*YWyq`qwu@>}LPA@Mm1sJDus#1nKlA;p=(b z*!|KDZz5sf;qV%+w>7anz5@j7M~oXsB}UB@O%dV-cx^rY}_d~yQZ+O`K%Z$^bnzwE})kyF3ANEEYf+ty5^~#Q)nOQu=WkQSK zofFgMmTYbleE-zKq|K9BM@;D5^~ct|C+YQ@)8&w&$(+R=H{XBw!~NV2^)XI|Huk(( z{C4e=R|f&ODynps#O?7Kn*U_uznuvRr@Qxl6wyG`u3=x`bsvOfutY*+?F#)4w;K6znN;|L0 z<2B`}a3}5)KJEjxeUgNie^+?JrGvz#BlY70i)mNVg|`XGQY=!57>HliISlm4Ux*UG zmHWgsLV`>-)qKc(tX(oxi^Lsix@6iT#o%$cD=;y|%Lby>Or{Uw-X+TmEO3vyc&~{m z*K)E*kZg{apcjIg>jiw{hqc0#Xd-(pG%jFE!10^cs>$Vz@W)x1U zgkDSqqyzT(TJ{d}s{XgnybfAWJ<%9rCvj$Bs5E%q$_t$T%pr2SezAX%CE|+c~xVf;N(%l#>DM>G_OxmxR_N3yEOmm;^ z22o4q=IpwACac9o*zGD^OTlXzT+wvV4#;F4=KJ>?XjiJtz2}%;`W~|jZRP4q3#SSs zy8GnUTSv=ePo*q&?#9@hp_2FVd74M^ntl1jwmm+6xevRBw+)&8Sf_i)bd{tx#c)`^ z_ZJie1&FF9?~Kh{rp2{2_CnTL(hYkQ-Uw^%GicI;2~(MMpj&(_aivn)b}Q=W+O1|) z=Uoo!3RC^_M?SCkczCOJCy6nl$Zw#)i4lbMRDL9g4wBa`?eeUUd4cextzhh_GL}Wu zEEY|?C6S6y@W@`deV~83*xbOX6B`?`L&W0CkBw1GjQw89M}BhJs2OOD(c_pxz<5X^ z0=dO3X$cVkL(V2H+gL;u_*cY9 zI^pH3i&vd9DLG*yGUiq<%C>b_-k_pIZ*zz*tVi})<;E{C4wZ?u_o`dH*ltws7=IM5GnT0sM&+8oJ*~i0tQSk(En~>QtX|KU?0TC4+W|xl2YbVZuV*Lzv z?U#HBM97V|cIdB@Vz2+6i=~z6iu%%3$jCg1c-CzxiX?Z=Ue217fo6A0>?iHKxOwJZ z+a!oRGGq~GWbxw1hX>m2VUD)!Qi`NMdcM&?nO zts8&kmmRWbPNS`(jaCeqkNy2^kT4c8)yzOSon?G6P;nLeSYrN`=!{Pt?3jL> z#3d%-j2!#IXbdMGoEmq6pz(jM%yhZEDK>P1`8h61kmzLmR=X={*=CF$J$mh2h@*KY zFP{cJAND79 z8r2fds}Wae=At%imQ3hCo-daf2b;7WXsjN8>%M#V)3r*gQir+MC#Q5hO3P#!X)V{$ zq@`6Gk`6@CoWI=Oc9dd248mvvsxSI5|)M(e3 z;p<`77IrSX_)i;V&H_5ZjqjGn<&Ipw$=!; z$8gcndyANXPi?NN6=%A4x(5+WzDyGcX*K0>5#f7Ul3&d>tQ+eUq`5Z~; z9x}}idxUcU5{9ae=}m@e9UhKb4CoXbGG?xB)B=$6pz82&U4ts;y1CPA*6wpnNaYw}z86{n z0h-(C-C>nPuFY<(koX|s(No%pfp4KUORMAC16B0?G=a81xukzvtA+gBx#!hR1*LRD z0o0G9qkuf*flPh9D(x>_TQOxwww^9bG77SpU79CC5)x*W$d*Lp;v+<&pY`;lT!UER zndKFCJl-I4ziTVYd9bq>in!fs7wB+xR!Y}85G_+V5>8ybdUbKB>4x1dT=^aC#>9y% z1!>G4b(O76zkW^HuEHT9q0u%i>ygv4_pj1SIEZ)6)L#BfeV8j5iSL<4OhH$f`y0ze zef&=R!}-D17bjGQ&rtYU4vRO5EPV5%3~c`482DH4AJ!iI8kc$o(L?bkdk}OhyK@$!H3`^;4@m=GP=pk!TjIsD^y-i=zqIFu~ZUWZ{se{7;U*#b?oXC zf|1I^X;)VlskvXt#UL&{9TJ>RH>=?vTCT|dyrpvF8NqS1A4>=oJR3nn>G-ei2pIA* zG&EF2xF|2`u9R#8YHNlp!o;EWnj{4d*={Xmc$#b0Uu>-qiIfXl9nCzqN3Pc4$ehtaZK`n;sCFtJqFeoX zx-wZD1W2VRkntZ{ZXC}#Y1|*g6kNE8u=KHGwpyLNBD6GWkR$wJQHZ~0SbI^bU_gWr zil2(;va#(;lij<{(5+p{oOzWJ>ae%-824HE!p(BywkDId1=9*VYO5ZVZ{G z5<4=`@?y}A^2qU352*S?zxR0f^T%`%Mcm-?2Bio3Nz^15ulh86u*-d(spnszg^dKzi|rjd$rLlB~PTZ|N2W$-)!sXW4{(QS0tu!I7*JS5M5MVP}9V~ zJL^7-c2UzBbHKG)IU|!==C?S?f#SHT7rP`z(MZmkC0;h$NRSEf^71+v5xb`5!1~JL zmY%C`Z!g;SL$AkHIrGc?<9fZHP>~(ocWHI}(hCo-&>}s-`{q);wiYn&xTDi}e{#La zzyTAyAg%>DXu*3dY2bT4a?}^=a8-LH%5bpB=^k9#ClElHaIykk-m{5lTWpJuzbT^TTz7NRpymcmJq8DRix6CG+(Mpk7^(K zH~bqIsbHS!Sg^peI`&me)wbj96PNr_sI4vBBC-4Bz+AU>WCz8{$IOlas3 z*=wTr)prWXt-j|Nd~wBxJb^+d zwPQxnc~_n6pWjS{kU=YWP(`Zg(&#U==JLzT{~2(?jODQ1}Nsm_*t#{segba+ZW9N zld)N&+v0Pt!J^N0>}wQ-a*>Ht-pgy5YL44@EgWDOpEFZFNyUIBLoy$hR)~W~5|qOeqCTLL~tRR~U!_yRZEAndNx%HK;SIn%fH6I!Wx+g(tEyL{@&Cf&Gs(|yq# zF^LwdK%J&5lR@ITtM&dO^AIpCNv+X+W~U)uIgI7Z_*53vP3}i^^@FaPwXwXBv|XL? zlYf&nwNY+$2}C4y5V7G{#3IH6+U;H+%LPQ4SyXa;7dnlXHiEuQp1fBb42mMC%Y0xg ziB@)PF;mrvQP`+}h5T1*xufvY`P`aXIl3d1EIngmwhf)oWZ^NXM$Q9#5Vul^&VpI2 ziJo56NW0qhzt6%eKYO%#vZ|ejSUYF`aj`ML_)Qvr35SB&WkLHZm>y8iajTGX<5?v4 z#RCxgC;&3b_>+;5vj8YW5iEOM*q9utvZnYa5>!nCFTIfT=c1NoB}y<0ir?8+Ia2;N z94<5FKXEt!nQdj&PkN4YSEsU-S^DRJI8{c5q=^~C*25vMmJ5IqLS!ARH@O4(7MYxB zW{xK@Ze!j2$Y(n=9oy4zii2HlTb+@#lvmB#U(ufa_DJQWlk@>8Q>zqzvGGy z@Vn~8Nt;uO59Oh|F*UQG12UvR{hDIbyyxaiK9aGFOd-X{?DF5Nte5@7%vQpN2vz-$ zCANQ&s9ITKTNVyD2|UP8jHlEgQqLl|U1Qlg#*d>i?TWeBSSEyYmI4wAPJp3_zl+p|Mm#y49fcYqhxgBPd zRv6lO`11`*tgnZ^KqC-9&qE06uM{iowy|)1rm+CkMU%~5VKu2z+nH)i^bl#QG;;Tb zmrd55J8|NzftjTiBGTT!pTvYf(e-e+NtZQi)_#D3eYA8iItM(+{Ws7q1l$AUS0ssYnZQt*hg`IR#I_|`AFC7&@kYa8&YY4~<2U0O9FP&pIk zJimgd-zYJD2`@l0PN2PZ)?-C@G0)wOxTr~*Hl zsSqd%dkxIB)yZgESJ9=ZY-pjuQUU<$%wPgkZ_A~VQC8&1l|*Qv_@&-OBEm)QeC~R2 zBeW8r8O?=g!TeBQ(NAnor>1xFUR}+4`&qjhpWxavrh-F4Oh#8}SMDQ0Ik7dkyEsMW z7SeS21<=OK6R%~`dzMGeQ@u-oK}MQ}YbC9I?R;ttI7MzI0k7rR94~2Wg?_nr@HW*p%XQ*Q_c_ zO9#(4VC{2r%oX~G9QQ7o(_&#W1M`0m|1-qD=> zG>RZD!$Dm3sMBw82V9+xtJct&mEN6R+3*3bUyy=zDx zw^UVq&}x1@zT`!8Go-tiowZKtl)0X9fqquvYh;z8c~MtlX?P5{34u;$iOJX#pJy4_ z$)!a9R^~LAe_sxCXq&P4K_)ukAng4Hyf4$r22P@*K@k7 z!87#eI=^KDA1eYj8IA{-kM*Vua&TY_uF%m2LZyHG@7MMlXvhU<#?oj(#MW5h^qt`L zH*Tolks#8LR0C$g!nrdz6s2Cu-dJYfz@aL#F{xcyauYq^yZg&U&LA}X+a+G#VPLlW zEVfk$2P`XJsk~O1l0c}*jic*1C64LLMvZ}Xn8bmc_2eIfRlDMJ6@9I`G@x|M>8Ntx zj@Obtcd_zXe;$J!B8>v9LQ_5>9w%uDbV|ZgKs=C1G5OTA_*I5)V#p`fjGpDKd#^|- zU+Q&4({fs+B%TP)#rt5@Pl7^~&Q|PR82#ti_9H!n(JqcUq@2y!ACMW;PtI4&28$^R zM;19)KhK+eTPrSPkX*PDxGl#jXAs9Kd5fQp)zzybKxY88e{suKsLlCnvkqlot71HR zHvDwFmQ_{f<|R9+^T89Qov4nz8P`ssc$M$xraLWad6uL%OGf~Ec3|%p%g<)8RzGdm zgvG_-IZCGhP_6DtDp+Pd&c;G#(prWaaFI+~-?%Gm`@LHG-#UTBnLuF0KqTpsLMs>X z0C9Z-SnAl+{^>&3LYsDhHN@OmF$n)^TAiNHP)0Q!X|LVUbHoPwwK3d0?@(=iuVl=V z3ZXvRtOLIKiJ)DrkHkIkm~`3guo(OjPo7#^X)pIP7ciL- zs7MT)>fT)FNg=M9Lz|AL`d7Eizw0d{vc@Os7|!P2o^)K3>NtP(X-)mxSuB6%)Y43>eq&Bi ziA)vk5n>oBbEl@FewH$wT08sMB8;T7o^{x@0^_JDBg*$W65miP{v1dqR{I*wef{!E zGwi}fzAxjXumB%!<;~|V(1UFt#u?Hk7mSuEZWb_NNpiZx-=hES=HOQ?##v|jPTIeS zghp`>Mxgan88HW@uaV#QalLbsJQpv2e`x6H#fPt3`Y#K+>rzQv{Ku^X$>O8k8(_uQ zaSR1&uRYmGgzcmZ^c-kvt2>M7H1}{}JLhiH8yu##yAK|V?%}jnChM|rsrsM+Ca#Gq zQda96L5@Q&nb;Cg2O(?I311wB$xB(wSRTjflVtv6eMe zay{?WNiIfqybWHX_P17lffTRCvd+q6#_fC)oVlO*^?O4bQOujBiETPsuDK95w757D zM_Kd4sU@Ue6RjCd-pL3D;B}9gAN)2-VvybAl0M)kB5$x*LZ+DJ3p0SJ;w*99P)49hywfXS zcue*6J3Y@Vv&!IuWkQIr{lQjiqHw*juy9@<`^twl?Bk2*frt%WJe`8`bk01A z>KC^0HfsOdnJ0sw#MX4rV*V6^ijEtv`3d@*?6rAKMnF~+OB--V$5boK-O71x+fM+w z2^03^Ya#4mI5ST`edz~SUQznC;eHYl0JbJ)AZOAPrF;Cf&L3XZ2LiHS3-K9^87wge z1dyAeViYmng`%&nl-`&lgIXLjUr?3f(7B3EHcslao!8PZr|)Y{$|NBsK>y5_ncm!f zib{kfTE%tc?dORF0~n_qb6niE--*wH=$zmWIbp;+pL z4Qm9F!+>E&;Tyfzt@vDb2Ho4ME_DJ3$$jdnzDfvfZX$jI$S>w^#eC=6`5MXRd1Cl7 zeE&W=BCLhw#>J3F@q0=Z;Xb{lsNb&LacLj_IPBdr&k|v$i3K1`bs51+;O6}K*-Gmv zw!+NVB>M-@1oVD}p!d}1DQ(VKkG*v2O-rg`*!ZSURYT)X?k8u z-y6<0GWwAT0@|LJHQ|cicRb$sS+$MM54D>?4jVdeNp@3h2Aas@Od_kFFBzGFIQ4bP z(GRbq_lKT7or-coCV#@_W74&7x5wqZl=Bo2LGS{FW;ANlrGW?DW>>`Zq_HO=XKD8N zbqrb7=eZ1#fmjwbp7`s@UQyu_9rJ-hPEMW}q9mWxxc$Yh=yAl{gSTHd=d8S-CW27jA zfm=^ad!?R4c=T!|SN(JQ4MDd6i9p@yDMQ+rO2QH37;uQs#u(9m@@xt`l(96kOR!SxK?hATlr(c-5Z6ro$L%dYVZHZ_EPx*igLQq z$eguaelWS1T&~AE(6gVIqT|J0NRfD-!W|FS3ABMz*!AbcTY^HjK*ooTWruSL_yL7V z>G*O>XYSRQ3&t(B$*m=RnQRXehlCxjV~*ZCA#EhX=)LML?FM$;=#@8R)4S=FcGhZc zyc*T;56Zh$)teHb+4+VwOx!A%9GtP@y;TpL)VWb>uaR0xRj0lC_SwAeXgbl%tShAb z@Kdj}y#dj^)MK>A*YDE)(egEqy#HTpLoxfd9VZ@#s#qE;d|Yv5?jG%~VD)oI*rfFAo|w;ffXy~Hn&=4SMWB4jzNfwsDxrZLwL>YQNqa3;HI z7{gl7ajUw=&u z&^^3(E?nO~%gXHT4$YTl5og<_XT#h=;-9YK8zrzqW?L5NA*K`>R5#k}3ri1waM>$L zGn8Rde>>&<9}RmgC*jU-{kOHW;ivl^N$*ESSY?c>xNiZo3QI-gN${Ts&wasWkV{?? zXaKHhbF2XllF^n+&?o{BOAa{>&pn98X_1Kl@&~p%Jlmihjf3l3&z5T2>19_`YCEf= z)9ua{82KS@|tQ9>n+eGxNBx?$d)E*f~@Qsj2^J~q|a_cyh%DHWM#`eOV%4^@f| zBHLZ&$82JP%euO_OvpQnl}*0)n)%Vyf-DWod26`KVTf+JwqdvO4BHIOh^+@KgH3Jw zX&fl_ck7c^`Q+KNQw-h26bTNSp^15&2N=oJuE49Nx%Z~_Qonr$$UH``OBab9`Reh6 zzc^Oko=5>Wa6KHK*KlNH#xj{FURWP7e?!S&L1%f4L{i*0G7qvD8k?1Ux(WCn$UI~t zsQp8#=6?$@j1v6KoPk$eXt{;50$VaT?%CM*9|0jA?)~{ygO=3kf^jonM%jOL^68zi zbN8oNhMGg2n@(>`=@qM-JbA`P8aJBvQ+;oL8cu!;Fj6F5qIZU-r3z{I_eRO9xvC&Z zJ5MFT74*?40$%={~Ck^~g=y3vQabim( znA{{3TFhgO;j$nQSUV$k$847?m_AxisbR_GJo}Fmls+=pXEXP@m=nt2D*RkCem*ZR zCV&vP#hIaCv}9r+XL$KqxGvZ}OBP6rU2dlZKbLTh-U!0Pd;mq4hEnoY@kXjVq;K)8QMcsIrO4{pAMA#q&*{^5Z1*1A8NYcZr}_Rx3=!>EdL(|^ zHoof4g9abOWp0qhfj*Dl+V})RqlZKyJp@;s1+t^~tn1J_f}p;Q#;<#Lz0la`OIzw& zVTXlnW034o`uSo?u0)q1+3j9w&(^&DqaT$s?uh!rMS_(gKrZd9*UF>6i=#Z(C|!r} z90-DTQ`)SdB%Ru;Rk^)^=on6(oGL4~mulrcsZu!28tj-~yexeJ#+X1W+Lr%s=^}cS? zYv4fl%X;27B%a5+bmNJP)j()d;lU6?88j%l=y==MXC?4(FJub%ToT;g@&VIYo-o6I` z#}Z48ye4rgOV9$gkL26Xr9kIoi0zAuK~ZGpayWsVs|)l!wQYRG-i+q7$+thKZ)}{0 zUxrxu!e8w_XMbyrtLq>Y6-cqi9Q@qsCDEnh#Vw=Mv0~T=TIVyTyH)iSd`hl2=oZ_{ z)O2inZJYaLk{tfh8nODs1cyNcNR#%sM zE8JoOQfO+qf`=^~@i2KwO1er0&2;WG&bh(ZUgBSGaldCwCm#OCD%#WYdvHu@Q`VQ4 zCVvhcMYuYQQ(M&wdWcvlfA|p3S8q3d1VbpptIV8ta)PRuOfu-ROjd`;{U$nd!oRTI z;=Ayn4O8`_pO^ZjrbO(L{G7` z1{0QYRM_YOYQZY`2x|3J32;nPWUQ;##YfDujhyWF;1aBY)D%|-e$p1qfJsVg$NA;6 zrEKl+KdY+$`)szm*m43ag{&)k#%#9BU7^vUDzLQ4MoxU$4USD946SV^R4nW~x+n|c z8Tiy<7nK&e;NrojVW zJ$(l@r3}kQ!(O9QJq<3@x^q5TnDKW8BZjScvHRe;U?cbum3s`rEaRn~%=frMzEd5&-wZN5v1jvIZH*jV z-BtLgzswu?KDU{*30L?eVO33Ws}&Wvt4n@`ybizCZPgBvCM7J-?R0M^*Cn;vE>tI= zG0zvP$F+AeSTF=MfYi)x!>a)a!qXb-S;_20DmvKkQhH(mX^sY9@maO>bzZKQ^UIVT zP%((FdpHGq;Zs3=8%#Bv?p`Y{-&Ql;z6~%(kE#iZm^M+FYHR*qY}{2UJoTn*QQ6tG zgR)wGUF)ovnE;m@hbe0=R+*-_C)OL-H0j8C^@`+6SE|yQH@dYr!!KE)6YUZPr;k0} zk1%Jo;pe9`jh(JMawNddr!`{->bYM(f@*lmjQa}+U4k_79gPn|1z%slAHesXh+44LB1fLmC+QERDR5^17{VkE#^l5dRZ&_& zti~2guOo9l?-v!n{Kt^5<^S@exHC@GRJzstn$^jB^K(V>n|BTkGSFAF+iqcesBp{- z;{`zuaal!&wI0}ZRQ#^2OpgmL+P7-wbFHQet_M-aD5n81=c<$FVuQ%7i2XRS=&i7} z1`SHl>#8U?h=>Oqvap@$UEmh6SEbAwJB~~ep(-PiLZ=9;>^fNTCHmSD`@^n3Ycr4k zE^u|*!}foTKAkjB$C-!@@BP~{uqd;;xhs3MYdrpfscMSin;l}w%Mlj?%_~Z$H*#uy zR7Cyb)cSaT{||H$RX5*Slr$K3OY#YaIT%v!MFIKW_da$a(y@F912IKU%i<#!dq>q| zfQfA8VQ?JDIH$o{&5PU0C%1iB~mVF`<; z_iDA1MMB3$O${=@Q5$|3?_x+%3}d>uqN?HVAR1zoGum2~+&?aVV0byZdcmpajoa_uICs^y)mULla?7hkLOeS~ zm!14Ts$q!fU4DLbC1ZOuJlgBP&yu;bVJ!sWRST7^b)&5!27&`pQH2vV+yyU-zW#?` z{A(+plK`h0r!!?ro{!Cr^!Y3|h9=HKp(8FF(5~FR-|cB*#*9hL930HpfTo?3u|!ye zA4db`_(5!Z6ms@cctKsg`ViS3|M!Q`r@>cS#0|{uuLTk4z2=?W!?|dg+IT`^!=A#b{}%4;elU&8j|t6tp1e9F3Jfvmf!8M?&62d zlb?Crdw%EnU9S;``v3jqeKJl9pHTldc++f*S9(8zS@kMTF?ZhPHFW&#`_;29nRFWd z^=epFBBUU%?9uFP(#y+~2}f$PzI7Al#r_$!v@Acg=v3()_i=4fY!aPmZvp#1l6o(5 zVyOpWinY?ibqTjT1TY-(Eoz@pddRLTJajsa_!+|5P~UaD+T{c*5`q&KYd4{kAhnSV zhMivRP*9wy38>h&dO9h1dlCg)%B1@9>#QE&uh296MN5^eh zU_}}cq#Lz^Vy)=cOfT;FncL$2I)ZxQ`VWc(qYjOhW(>P{-zmGT)r~{uljAQb;ZGMr zupgjuUex=A15W7yBhbq~?q>E}f{0cSj!0hE~H2d)Z&p%#2Oq4 zIbrquWsQF5=}i-2zmD{D-O}_H)>j^{>UW_Km@9@B3=UkLDLl>I#(uqb!I?4B^{a^q z^%@JzBBFYC_u5!Trv^cNEEC(>;8Gc+T zs>4mljv=*om7?HR5nRAQo*-Zuc#nwz){~nrExei;VG_&^Zm}Xg95$Q%rYT=+oJ*Mm zQY_Y8SBi8yU4lAs_ z?{|01!VbD777VmJn_)7viH>i>wh8xt*Ud@FyS*a$L){Gq@uTV^Gw6P^vhJ_A8;69L z#uiZmYkJnzKID>Fvmm&tAk@?GT20{gs>#^4e)Dmv!pKU9zhkd%`cT$c9D&O6tg{mk(pPwfb@3kL*H7O#HBrsw`U2h6tBe z%S(Mdj_uu*Oh>ovd2h_kx1+Q{w|>nV+{nc(_UCp;h)>Z_3u_q~h0LoPE1VmGbYH)? zBJ>_Du7SSA>xe^OhkZ_1jy&S{&JwDd)sq|UvKX&3*rvWXZ;IF3!-o(5b1@P$BI{kK zvGw$J14wzeIvPf{#R|MfseYYsz`IG`tp3Nb_4g)~|4P&{TGw9T+qY*=ef)Z+sfd$` zhwT6%z*RDq>G#jzrfk|#8$8eM@(;Gdxwc}kr!I$gVL)RoqH59qLM_xk-OMe1^`k8l zLWzR_%bS~<*W7tgn_V+UdREr&x8Bin|M~akSwB4OUv%WbZQH)KUF?n~@!7_&hLk2# zV5X2s_Z;7xUD;x8m;LXHQx5Dad((gLtH+s|%l=U3VEmHt4OUpSJWYj@^Mj}rN3jp? ztrSBQz&4?zats$r7zbS(lWMW=W&BbI4{O-dH!WgS?)&182ofPo+etd>r&KT)>(jhJ z0o<*1XCLl*V>5FJ9*H6sg1I%Npm;{wg*M4aUp#_Orh^2?4kpg+r4d?vri>B#r3LkS zxrWG;5u+seT5I1A%bcDsuD{sTE2}J?zqby}x6gV|=h}0V1q>3^dk+~RV+y4CCqk$> zYQ+UwYTcLinw_S@Bp;KJE74k)Ik|E1H`5s}T-Cgsesz8i1B%+~?QL3mhF&1t1$u-RAtXM8$mS=V{!w@mJ*_`9(4VW}^G_)mmmr$AO=EP7521A*V3DYDTX7 zLl5?!-?a>zr98RUNSh=;{D2&j^(_X=jR2J^!el0K53lSE`k-4-@g`I!pNBtp{dEgP zYS4?buO3_+W?4+2wYjarBOu%+$o)Qbf>TG#k(y=UrIbFRq7 z`;gWh)>Cu#m51*%b>DN#&pmA;hV)FQB|X?6zRu;*$4oA~`_Q#I@5;!+onJfpzG_>Y zYOAi9#DTGwBrHR39pPx}jg_zuWO|J8WL8D*Q!@`nOQW{x(cot$k95sM?nu+9GGpW- zjZ-hAtDnwX2J02WzzY_gjN{)7qMdzN<5m*X-P#pkLG($K(DtR-!7vP!T)j|w6Kx4F? za%l_lsB%rE^;>o- zu3_PUx)w9i4d-Xsn7SUBGg!Y_|Eiy_H?8UHqULzE4y{Y(xP?h{Vp9JLGhloE zDq}l(VwGMb?7{uvAv9m&8SjukEGG%0W=u6v3dav?@ZhTgl1i#5UUKsYPrvmTpVY$I9V>YST0vt_z<1Pu#kVA|>7 zju$UpT0PFgwc}7<{w#0jh5NigrP4q*zr(PeZdpg(y|Y-B1*1d6RQ^@bBW#dy^}1|! z3xMPw6;xFPH*L42T#Nn>)`vERB|Ez>zx>s8zTcYS`w7s|16Vfy&Xav*RU=T9Slib1poxr+g@UDbdRE6w)AHb$V5v6ccx03Y|uB!H1yI*-aR^ z;ld1SvPLvH(9;+i4m}pS&DBK`;^od`P><~JSwafH#^5zC=Ao}~;Ksv8Kg#yyAEV?l z#lqGjvt+p@DL^Tb4JgA$(-_-YLl!2vxx?Xp3_o7>;z4?lF7-|BbAu5zA~aU{n<w zZ}gywu0_K^_a$$Ojb*0ODDf211z#XIOx(~Do;TeiMpt@Wnt$k6M`vfuPU|IKDlOBFJQQ%jV<6S%I+@jzHmGZ8`zXPySMz z5Mf2kF<#&hp&m#`T5{554~h51E?c53bUcVL`lJEJ%9h6JuN@1neG+= zOe3X_TvWginrmJ>a=y@1Z~D;ZuRI4A8Uop51xlyE7s0n8pqHW8$?r=lYGe zO>M33y03nh9A1nVJPS)lB?R5l^!Xp|W*06LDlbHpuPDlJaC-4R`|F|<^BXsf$4{Q3@9JzY*v39&WeQ=L(48!d$@rYNSX=6I!S?1g+(C? z3%U4VJ;onPCDR1inpo{`e7g!dKE42kv_??Wsb4%qwJSz&Bk_+*3!L6ls8akB8e(~e zDsDc?*(Pnbh*>YkMutU|vne$p7X!v5KEhq38Idn4k!jhERo0R`CIihP8=cRd z%FZr}7+$gavE7=sT_?&^sb88Ui%xXUEqhFE5ZboUR$C6aA`wK3 z$VYMt`O8q5EM2I25i8Rykv+=+!+lQ4F1FOR*cNJ5W^X*BiPFM^!%5oo|NMBRgK1jETS_kyDi5wDCqWyx>)<4qWOjn7+A&qb_Sy2wl zZ}HE2HhvIq8wfQ>9@VpuS~@vwz~b@?_d6Z?5p219E&0wYj5IFxS4kr_Sjxa6xr zem~0KPAPmzOlZl#<1xp>TvKN$WBOb9Fr3^<5XO}+kbs^ zW$Smg={gRPRU^7b#}sWiP-D{Vu4j*3*Vg|zzWHjdzqS4ADB6X=+V-}&{;kSIE0C%T z3gXnYeSO)*?2(6juTVP!={S@k`jhZ0WwKC*#U%>4;sNzQXa%`p`(Xg~#xPVh*`E`9 z|E0E)`aznr!h+}<9FBJLe!dmc^^OY$Av3w@k^F!&aGuE2lFLK=-qlikhRgIAPTp-Tnktt;~(LIPG?S&2wGLTOX?4gcaGx&YU;zG)%L( z;+MhK?HQZpIC^AHt5{uzXE=O$%AYCQ4_>-gR`}cM4=*pQa5&@{lXYTMwnJ4rzStX^ z{1j*j-2-pt=dhy@k*@%aoZulm4dAiCmK|O$5N$NH>5h(_ztr(S1l8kW#o+B}ORd+8 z%bPTDqIzIf&K^b1tO^G)SYjGub_nIJ$}rIkyR|!aK!ohmTdUrx`?ijz%= z%w%R*k_Y-G%@Bice>pmZ*wAAnnZl>#?%(RaSZqj+= ziC-TsxiszI^mR`xY@BmOZ1P^EyL*V&vy&R%J~essc=6D?@AXKk`(||Uss}AKebO5w zw5#yBTQX$6{oxc_buV9-OFYS6zP7BRNR)-GlH%8V-KddaWepGRG)Ie?@#z7OX-M++ z@Mrf}vVC(Gao2p^|MtCm&DsehzCkjV8h_#b5}=A4XDeiBI$T z^s^?x@e$Z2gHHsp6h0y%%AuagOR}oRYu?}ftzDJ>(0H%cIp%3ZH}m4}%e0?71<_P{ z(#1lmu3U3C`Ay)d{?qBSxJ!g-pkW%Lx$eS*PFE5})T}I$hF#7cK!Edwy_{Nb1;JMU z^&~MOGE(btiRX-I)4JA%6)J)y<%Y-z{{-kZoYXPB92&YOo zNP*7CVM{U7A3)?lu3?F*#OZI!IqeD5p2BL7s7uN@O#MQhKYu>GsF`#4a?@#p zZLS7;YCoPev!3h8#HcY(^QSK)8=}@1VBexfGmJf5x7j~_d90g>=LmzmZ8^SQkN2|D zaa9joywN4D>aN?O%uUA@CsZCQ)Gp}q*wl2dtx2a%}Ygh`X0qxz~8&?;Z2Z%plS za;mBwpKb6NN9DRG!i2~YJ7{%6P1l-R7O)%o=v;|!hhOL~S}wTEryRz29dyU?<_Fv~ zR1#w0J&DQ*s*8yCpF~o-(g}eHxLQR)8<1`>4s(9V?2<#2!@^L<_!dbTT#z!@0e3;^ zC(e-)8kQID=61{Kr8WH?b}PrB7z*2ukta*6q<49`yEv;#)ev&-S$i=4ZnS(H1l_Vj z2=xOnUmM#4lz;;PkR^k0;mow^5i|b2LMR1}(Dt=#+xA2)2PoVIzc>$6cgg@>nE^KfS zC7Ul;t+UY^L_sRkGJ#}(fdpFMBSA%%uk^mH5j$CQ4r2De)+`3N5W3iuz?y(gRyco1 zuDrPQ0^tc&=tOGg<^~%2Jvthz5*E7h@Y}a8iTG`hJF1{Z}WtYTvm&QnZrTcD9 zX@LM#SOV=wN7+(tSs^hsP#L@BEGC)qu6)Z`AX7dW^0i%GXl6@YR`2IweDBcT?OLp>v4$H7*NUYW1}j(f>di z2CH$oX13#8#VwhbUISzwOGh!$gY<=5b?18As2;820<1%2@``O_*@&hlPnbH2FbmT- ze-LA_7w0UsnAL$n;JZuB9DSh27jm!}LoFsDKuEm%bi28K`^>B8LnhFhG+-c!0v=M3 zgdvAMoMw-b;>g;^4Phavt=WhaYYul!u(Z5j-C}9LZ>{%4E)i#98a#27gY6Ia3nV-E zU3SNt=Fx%q3#fVqqgWD85AG()W}V|7bWTy_idu>~ZGXb`qiH_oJ7?Jt`pk&96>z@T z5UK1kEbKUD<)D#SWBcdRsDT%OzY;c{?DI}}z$7+%-Ekr`4u_ zxAz>4GX|yKIJ~!0nElTdBJ{yEUm_C?Jb%K14A@erm~z{RYj&Zw;-L>dWYZ+Q3e?B~ zifdD!Cx4`SR^(4AKU)}ja?PzdVn8O>qNIr7yCKLu|1MFI9oNMmw-wwpa=no1O`=yG zgDe*?tF%LM_XG2MVNn+#=GjA}RBx=q(uEMIM!}xcHP?F1=?li(Pt)ZqFTYrApJLSY znV3323mb1M7FA1HjX!4#*00*6zml92Kqakp~y{;zo)pd)@h`3Fs-xhu}#Z2jJkNP z&=e}jca)35U0r4g5VpaM>4)!5cO{L|wmoCrP^x3@ zS=g?`WI(&U>T`l8+x#*EM|M^+mD)j9Rj=g{-3E)7TU4+TC@hk$rkg%|p=LC1-n`1} zKJ03%*uw{;P>afhF}ZN;#*ODc4XWYKtNdLAN+ig@T<0q%``@8*iQeY3H;U$A@eZ+A zA@~wm=`*GbfAx#XMM}|_xXwLkOI>aP%whSZQ}z6;%A&RX;9K&uPyWxJov|!iA797W zl+kcvg;?-unmh}-?44~pzRB+67m9lnpyEwE{4`?hOHL8Qkzyo-sfivy=<{Q*;Md_t!eA@9Hbvd~hI%(Iavoup^w5aqX(tgytcJCGJa`9duhO_Kx*-`yF8e0(#@PLS(Dj2?2;e-D%hf)j?`Lg3Jum>NAV0M%?eT?a?RiSaZ0Syy%pcUj~xK zqHpJpl`z8;-pbVhQJHko`HMCzjLMv8YRcyMpLR!@?2ajdNQ=salIp_828_ zlqCk2J5x>d_md?!V_#UCHv_zTp#DmPnI1IJICVxtIe0jt5opKGZW3mLmdwGn=lGohC1 z#hDOP%eWiNk)c|bzsw1qrIIMMFtW=ukNDwQi)ow=;O%glbWWu7R?gd1N71}HbOkrD z4-`*dPUnH&F`~tY=Z`G2u<+OoGmhTF$A&X+;n;t0clabf(M(``roW@X;e5FoAnr+r^ckWDPuni+O+&R5?Ch{RzmqJJWzqkCNo!$KZbB(L6fJU=I=To__ zpTx-War>5)H4Lwm(=ZgYh$XyDUbwZV@XUFQ;%h|zA+EMG>@4hdZ8#99>~4v#;5RM8 zbZa{3QAuj6EI$72b*ui&)1~K{FZ6yvYCoR3QifUb1J*%JRpvBqtm)}aOF&cys~t;9 zUkpx+LM(<8 zyoVjQY~XCUd*rdf!uFdv^N?%Ou_o;`CvanyP}AvjVu{oa7kcRG>IP)@$$R{`>-^sy zgvZ!eUH9#xq@-1OKy@qnSkq#mrFb@QO5l&XTMj0*^nq30JP!?W<)E{{xc)$YD=Aw4mD9I$W3{}d&pa?6iUjzQ z8{8>n1+-mqWSzLYJluf_Lwq}UOUX&~)9-l?GuAp>^2?$E?SJ9C_=TBQ%%EG5*~U9U zX{70`Es6^<2;VVd85_MOdUTXXC>Uv*c&X{dFFKoHcBad{Fe%YgNk-U+OE@6=?`rhl zbW6RngSBRb{dnaoEFUIHLkC7%PNr@ljwCxKE^szQ1fLEe9W&C?VpS$H3YbwoqN%~s z4`R{*Tia#JX=3CXL(Yt`l%F(*6!cA_gav-|{ga-YxE}tDHel}-Hc0b zavKsOVlsfdQ0^N~*ScQc@M0n0-Kd2GRCqwQJ96xqZRFVVs5B&5?(dzzrkWMB&uXAz z;Ffh0?@V9XUoxUYFMcoqM;1zQZ+JZ(tzK0rYde7?EmbF=&Sv2383cO`hQ?2_8S+1& zSI#jT&d_T!OTS{N2w(KyU+`L;?-gV982(8Qne+bH5Y8Qo`1arTaB}?|>!j@t^EGe( ze9AJD4TNY2yh>!bCy_|?YqoYbb_0DlRDG?#D2Rqz4%%T5Z!rVgH1X>Y*&xy*O||-Z zyNN_i`SrUoQd|05b5#q{#^fB-Q(Z|q{C%?LT1Lb*ui~0e5eu0A8dIf9)fl>|S{z6` zTwRSgT?@C5e1D8nFr3+!bX6=$2tXcUepLVvn#TNg=8Dej#eP_!wK5&jm&(=Sb;gpT zfp|;_t?N1=0Dqx4Qp^;#`>`ZA`nT6PU)-^~_B<(!FA~TwnMm_S+pk=TXywzx-U=h$E>e5^7G39-Tp4zY$)7R_IJ*| zWw?IGa6l|gagwX4c=!Vx^pE`3f8Uac*k_`U9^AP1e zn`!}P*-S&jyA5x!hVcpeq{U;l%%CpZbn&eltm=HRl7^z!gdMsBbNP=+2#l#)O)kLr=*nEZs03_KD z!mw<74T4_4L7yyp^s8UW+uxp( zQ#|u1IOobY0Y~PFGpJ0U5hH-B1s&SZLT`iF$3Eb?G7FeOun;J)*$aPOtoYTn&31uV zWp&vuY~rFeVd=^{$HKyPa)^!3*;wX+Nb;K(et@j1gd-*DUI{A@AdwAZ;H@)L%pHSV zcWK(4{>mM%%*me!~wcTYpW&i z8-@`}U&t(yzQF>XK8OaFK>I<9cNc2^-n+Iunng@W+f-{JF%GB>>jt3Z^bM*7XmBoI zbX6OuQ{0298Zr5Mt^}13!lGOI4t<7ZY}`QvN%56tBlo5)O+)-Iv?-vO@4?@th8^B% z%GvxbX+!p}x<6;hV5?<*aawZi19^3<*nq07S^I>|1?ES-Dck#Sr)WWS%I*xZ%e0PS zSzYytsR~vh5Z$r@l>EpXCnvn^5w|+E5JGir;k6q=weZ5s$NrLF|N7pG%*!2DD#8-} z$F8gy-V|a;hr$NgU^Fm1=on&>tp^6YNfvbw`!-;(VE5HC5()fbAeL*W|UOiE-tw@^p6DnvpVT8|e5cF)za!gFbVl$Ezqd8uFL>)Pa(Db|{ zLy^o$Q0G_Ii!&H&Z|@Qcma!1dp&T}B##+>7i?$ou^`C#B?#Q4C#CknO42yArkc5y_ z&4vwUG2jVzZu^H>qfi=+z$w<(3VtPVCN3llrd*rfue#riB_tGaI(5rIYJ};K3;o)D ztV({Tk2fi_IJ9(BS@jfSOk=^pBNr8QjDdXfQqE2;lzd)I`Yqx zZ~-Hx#)P09fXUw>*{M4^N=>zK@1(h7%CJWEyWHEmp-rdq=%TP*HK&T-a-eO_nNt3L zVnBm(mL@VZn4NE5Z=Q0<4XCXxB}@|W2sZ~hUIydTcwrvh=bH^4&!B382A+lQ*h9r- zI5j3lF8c`S1pXt0b!+OrXdv8g-c2Z?*<}uAw{dkP2sY5#n0oItxY)G=SKG0W`sixV zdwlO{^tbvIlO4#7j4}(!JNX1x^EwbgRF^2JHb*MIALOMISw7{hAmk%+Sd=|{gWorV+Mc^KB@k@p^|Di~)4gYCJE7{1wZ zjqhAjE?>QRn_PZjYz2i9{Y#ibuBa8fJafOB%J&K);)q*C{{vzQLY%fsT?6ym;6$a; z^7RAarRvFp17%I&&iR7YCMZscQ$ov(9+&ZM;B2}|u0>4;x3d}M96&=|E0lNJ`FO3F zJr(c%3o^t=g-0F;D1fk7h^Hb4T(XWr;Lk%G&iI)yzf}UobvPEuYEY)UVGfu;-%7P# zfRgT9#hzoO%L~4j&cj?7Fn3K{u6Ts1QaGCYifs81f%N+7Ul75TgLCC&Wm1>A47yt2 zj4GRjGM*ze+eX6JYx( z|HMdI2M{BP_7b>{1wQ(uhr$CGyxNDDkTy)25CIz-&QmvAhTP}>iWDFW0ceyZU;?V` zP^A!3APg#p!YA~wq*0}mgj)WVPs$orU$O{!D4?zXLO#T81ntt;4M0-=Ytdo#GY{yx zRH0B{QDFm&k-4|=4h%@PV9n&%rrh`tiwZost;{Z-)ZL&vLCDfC1LBsVMlV2)_f4!4 zppbBpqC&Xf$*c=Y)B+AT5?e)47i3w2=v#;!p%2g~oM8o5)jlmi*S6R<{>HVcVil;C z4?wg`12+&Fg3(|o&I0#KwTA_Rp?B}%xkXAUxy9!(Q0U&u^903cP+s9x>$2R{oE(MECm_w6AIfjOv;Ex0xpV9X@}RR+d`ESn|`X-TZ5k$hxJ&4H~7i2!dVtow&O#nK# zR=06)x@`ZfJZW#W+-L`A&eF)d;=7mG&lw>N12l~IF25K8Dgrw>y1@MG|I5M^&qKFO zNXBPXMrcw*E)ZSZ2RCR|VE*ei>e$sogvIActmN>MXW=B#nK89z8&m5kLRNe8 z$u|)Q(JgGH@DGoI$t;yr?|6ASc){f6GHASU{@vUf?^DiW7^mbfewd|k@Ef@!V&{{E z-)mHir{WLdGPH&w9Up1W(=sKp%kzi6pE`KL7ZG87gCaqY9!1H-*c5d%oQ7n_vCZjH z^R~k$1Az;t$g^wYgn5tH;_PXW>Tb(>E8316+QUr=zd3C=3?QO_H62UO`O}-%FpAB# zWx^!Tk`x(eMaE5?x{IHc<2m6MueB<+0&D|y*)(^ndpwo}2 zO-j^o_PhdXXvEvQkKAIYh?nW8Nu7Lhml2w!IY`4D;bzPMBxv>INAza=efVvglW(Zi}{YDIYuHp292Y zb^w&{CPY1h^oMjm0!q?j_MEzMav(#){#HsAzl4OYEH3gNxcpkct&+FlYY#3R>cj{8o!(ov zLeBEWWOulDA|232lbxVt|_)=U6iTObjl} z1{EY4Nt$SqEP@iXVh&;m|AkLP)I@YS44EX*`Gzd%Xa>^Y0{`_|baJpLnI9+^%&-Sf ze|w`AR$2H4TKsH*dnMT+^@Bp-Ku0(a&6MzQGU0qjRL0PPE(k1;AxX^b=;-x8#GG=j zuk_Nkao*0#sanT9@~SrNeRC3&NtVo;*%%0FHWeC_31) zC9SZvR)5;5jD}}#ss-MO0MIvpR>}_=j6mYMf*FRsn=Z{(PlKGQ2()K+TVlF$;DBHa z;8yF&?cXwq(q%Oaa6NCBb9v6ym2I<|%ts#Mc84IiWk| z+a&E66~VRXI+7W#?5?gmdxLmN%DyFciP@WIg0YCT=gyrAUx2?ff22~wt~U?Wc}}WY zJEtm(d9gUy1l406iKCtQ^@;Nb4LJO{Dlqd^j4Vrk)ZC5F{JF75qAX6$JMC9D{#<=Wcp2&$3Ot7 z1zAn^9gq*WT>(ADlj{3acJX&Y?F_sN&eJFLgUm6_PM(iEp?BwD1I5yp z9HVG#u1>wY)~t&swA;|9OT{KRjirDLNLEj1Z-es(Mo`0eXXQUM@7p&OMh*XXq4i0^ zCo|d+{( z1t$uZ%462WS@=|*J7GTka>xAe1$ys?f8VcysCVwLC^Z$-c(v~*F^)fJa2@~AH8#pI zwRsgyztbEHPn2=uc*b_RD0A_+<~@NIfbMy$?fF;jo9Ac8Bqt57JPa|0q|}&UzgB`# zVxwodK=64i`hPy5K`mu$X5hD##0}aPs0ekSa5sPcIzbxH6 z{nglIH5S(k52Nh#H1YTLD1WGKsMU3=z3kJ@VEe(=fLp%=%nye38Ey=RF>)N&b zsNW92pkZ-^aBvr_;&I@zpH1fnN5borD#3i4h`^o9A)d=Hd`QD*JOrKyBXn2l;tQ3A z^u(IvS~YB}L*Fh2k=6Yf%^8SSyW;rp`(~27CseMUH=)8RI*5E%VTn!gW4K2g+67B* z@D^QNJ8Pt$28X!F7dyz|QNrVAbNC)lR~|ZO@JXVlHP=Rz-pxDd`W%-j=X2jR^iN?cADRA>ecxt1iCiu1$y|YWxr9Dl9ZSid>;IB z8E5e!0q>vId_qSDUQS!b+SDz|4HqrvPt1^FoC(bOuzt?v`LykS{}ngcYV{ybSE|-S z(e|fy9J|NJ-y|G&g^`S?4>s!7H5}A}AyoNdUL>XZui`h&6@d$PUB^L4hK#@s=T7ml zLl7PK>c)NVOeqNm_--k4mS-czy2f|E@IiyWiuwSeJIU9WyNDrFiWy-N+7YBHgP$!B zq{-a^N>3!8bxb*QVpxfvsz;v5QSB{+S(aM(#Jj8wUO;=-Trp*UqJ8N+0wv%Zj2|$S zCmw79N{d|B*GQWGeKJC>+%Q5c08t#04ThdmDh-xQ@sq^CI7yzz#G%uFFmkR$JY6Ei z2)oN`n*OaLwc&&BOEp`iNeI!N7bq|RwoXVZ+{P5tIQ);3vF+y@_vk!3O-|0xU$nq`%b!`6CxUb8LB!NFnAK_fFGB2ca)jTUQ`Yy|_=S2Dt$#>j?oZMYL9 zcE7Ro<8!Sf$>v3n`uvaoBML`d&oRF44~*v*W{x|zN~*yyH59+$#g1>D?I#Oc z;CzaESr^3#KA)eY1cvYqygxnL|K0+`KXwCs@&mXB7~u}c;d)LeW?0_u(cxeX@-t^3 zU_A~EyT4ddIV{z)yd}OJc*q}ngvTQ366ksN)Tj4oV~IaLln7Io>zIh#sjQ+>=WFB` z-Bk@kHeBwUEwAosz(Nd;@yjvSfnrdc6JF&P7H(s7b&aHu-N zVOH}#W6o;`Uo)gk2;JtFaC(x$N_oqfKip13VOk5%+4Ef9YrK+H=pd=Bt9uh0LCx{D zd8Lhu)-{n)#0@8;7Ompn3g4n9!kisN*+i1y( zZJ0L!^~HpmmX05<7>|~L=b+MeqQp)^Uj#T6{MsdIK?ck~$LsfSNB{myRFK~fT%>aV zjWUxLN+qGRGwHz~H@yL4n{F{H>xLN388=8D@$*MBIEcg<7fxMw`^Exs6O}nO47Q-P zx0b4E12FP%|CX8Lz?4^3;Ceu0G>?cfzB_Yxk`Av#__B?Fdv(! z>S~vlhYUz`k31MWbAe`3xH0__T7q5iJZxuVoM^O!jFGe9xkkApwC*Eg=21&q^;*zt zy1r5SkoYN{VtG4SYU*iP1jx{L#F|XGKT(4R){|dbFrR`ygAunk#oxeGCoy^GIL|^+ zVKQ>@AAfWRtlhR9e;PtPcbVh~YVqmpMK{iIl{T2gQk z))v1LvD8BOTnh<=PtEks2Q4hz@OZ^Z#dWxd8E1^R3Eal+yZU9T&#k)2th;p+mFqLy zKUi#6av6H>&>nDJguaqC1eCn304J`X-IHuswE1~eh_NxQsUa{+jKxxyR*j!t+WpBx36eBmc($Zk6cqsj%QxFVNQAXe& zM&qid65!C1*R#zcaR*I@06vD0Mv4Vdf;SAV{z6#-z+B?~?Wn5u@w;kvKPYRRptRJK zL*5|nrgQN}F1~InDF#T5*huJmHnBKlk&I!JMBYJ$-T|yWW}r%7!FJMn?##V*TOBh| zoyCc1mdqg<<42s#pt<6fBR3h0E4yE>UrnAlTo6OIX)+1BZ|S=uG7u^HO>u8szjDTC zT%2@~1s?E_2JO-lT=D<}J(NMp&4{om6)rHf5;NS3m}0F=y}t`qv~=yncO4uo{0wHVWwGz%`3tiLNB`WQ zycR>{GrAa87$!VBEbMy%ZsUCg?>F4=m2avvX+q};GK z{*&tdgFq$9`DGywOINwCTp96Mb%N)UaYF}6Hgt3wercJDhmWQ_P$2lZvcwRrF#WDq zQwdi1?bq-?ez}rKl2~&7CAbn@ifXW%+CAuL>XCZx(BiOltF#;vyKu0TAk~6wVIF>c zGJ+y0yhaF#TMOCbot`^h-uM>GBBp*#xNpE6Fp?@7B+*3ea<4a{OGm}NG&mixAzj8L zF+IEX2J?=6aOilGX!&JDk^Tno)95zh>`LT8u*G$_I`HfdqzZr5Gc{u9&6%y8nn8xRAP92h&qi!eplSfNNn#9N7@~oV`OZuPH zYzJM^%H6qVSKXX6Z<}YezqicgMei7|PzQ2C*-QsMmh{`TVLg@K_ll8X3%6hta0!&~ z$-^L&!J(g6AA_f9i>4T(IFsLrW$BX;p~`IIkK9`~b1wfFH`GYZi= z=@!H|V$^9NlN2x^HmFx{Vt`dl6!&cDzYXth#krPh-|o+7a@oz3FF&+Uejsw_)O zatsbp3`WqEOVwY~f@g0_$eJF8iQjRJN8-RGf0J^yhqT;k371Q0&F6Me?Y=eI{5b9m z5*gIe4Lr^(Q+Qv>(WND2A7EQuLdXJkVSCh+CL)&T#G)UW9t(WnMs=tiF2?T1sT|+w zrdiSnwaFmqt5NQ`rn0ix@AnCM3d3=o6ABpkKdmZ$*>}`fK0+Pd z{ha_e9hieO7S4wQ290n5`hgC5Re(I^y!_`|o)N>jLXkjNC{ui_(#xCNyD1rkn85FN zZgT^22$je3Agv@Sa)@+k>M|1Y%Z5o7pj7B;1q0Lbx!%;JXcP7MBYlL0ccSE^ycE8= z5~3$MLeRAcA4tI^Hnp{X1<%(i?67fvVIF{U1>b(2 zYu2F^nHS$iKEh-PLyp-nmf8sHOnC8^dGOS4+Vc?OD|AQEXyT;FlU=gq62%L<1stl| zyDqPhTx<2t0|&S@CZZ|K02H7VbBMJc{tV8GxtFz+6~1kpGu);+Pk*a%5{tY170?l< zVQc%n$^KrRpLRd^Tq2Nf`fp1#YL5by7%;xzCov+X3!`7fcbi7HZ71CpLv;4ZjOna| zrgh9;=*bQ2#1}hait>hgHa=-;AOFgE9^*Kz3vA#5>(^|plK`#Ji~@i;W6ZU>d3)na zr(wT63GvN*HE%bWYnwzE%r|68PAnMdy}cKGrngsiqpjVdb=S}x!6 z@uzt5IL*Q+o{y>tbkfoX;O1FKvz6#a^PYFNV_=!ucFe`^{MZwnjuoNJA(zn%DUB{! zqlC3|mXcux#vQNZMsGrqE}!3p5XaMT<4ixde}m9WIEk z>(c_X9eY0?>y~d2MabtR`4)1OM1Mop3-XlkJmlmlj5+2%SUYv0fL11c5+&$Bx`~dJ ziMVE7o)k9U>MvgNeu$0OK=lH01KdA&c^fqmKiboA<4 zBzM3dqH+gwQ04OxyOxCX8g^Z3>?yVj->~f>%wQ<6h>%>|Xb#LFe|p{4k>_-|gBW^3 zpK}8vq3Wr-V&UD-&a6oS)j^m=!bF&@L6#dzeG)h+_5~Qlfh~g3#mheMU;cAT$0gbq z+Z3R2?8CZ)D^V3l%8WTZK|b1Sx&y)aF>mht6V4y&lST8aU}liero}<40r-Q#xWtUu zlNWS}j|{q~iYNHkEdQIl*bgteZQe%(r0qd2M{jw>UUd=`=h|6lt28eB&xdmI+F3Wz zjoRVJ#OHZ;9@0Z?^{zL0ZC#zW*571<5_WxqxLEe=FxPJu&}lZorYRW<>N{QZguAqD%BReFdMBq5wj*}slCb~Ijd#cBDjVnwjM6{V- z_SM|`oBnk)oXPrtQd=poAdK9d#=UAA^kc^2no)}5u}@>M5+vWGspGcOHlM0I>6}(S zRkZ|mmDnh>tu^LN*eELo9&o#_rA(l10J^u27$K9CxvVu&{*Pd3S=M~8Ima8x=#0cj z6d(n_f5m19f1xDE`qB3c_I>+6j1{#u-*FP#QEb^B{sW*hu7xjIcWF z@KBjh@2st1IAD2T;OIslh5@54RLEwcH+ya~R3shi;B8zw?3wI{? zk3W2QwmJI?Gd!0sgzI16?w2y;iH61iUn@gJ*Bz>ewOVI_>y)k;L$*lm;D1s)^B&c- z$Xr-+CHIjjtPO90W$dHt_`EFfk|!F5+Zgd6Nz;u$KLrwl#laq^9&<(X-Yl*{cp7h zzrx)C=#0kENbkT0sTpU^S{m~47yG?rHX|-vbI|OC(c}^h|^|HyPo}dEa z;Q7v-sF4De1`R9DhPj~*VdV{*sSDm78GihV;g0(Uz5Z=A%UoSMiPoUT?LDfP+cB26 z>PqTxdt0oibE?0}@;suqChIXnGyzh+U!QEw1B*sRGGOQnl3?h7{r}-hqf3<-y6Hw3 zUnl$>vS@$)a@5-a4eI=>Ygw|j_YMbP!3%6g1O= z-is>DTt=Ck=y04}S90$oJXzrieMb2QnLqwTZ~#H-->^iyN8g9*KZ6;_eNeOR<(KQ_ z@L<+9H(#Z-*n>T15SYUHFBh^ev2r`8I|1rdl{TM69qvD=gP*688wT9XKodzHXx>**+YK`n zRD4`(!8QYYc+wJKJxJ|M9TpY^xzqu;n-UVxzs}Fo&{W@@VEYT6l|j>UT5~xH_V5kK z2tv6SdgM(So<=Z2ZiQL;=;+)lz(UtwnWc&Kd~_LB&$3@lqCoJ_fk&62@5sS9{&$gb z?SFXd_a_Zzh-;u``=z1k6HACrCwN@y!89I(Ou>XifM~x@QCz5An2!PET-FNXPgdg6 z+tE|i+vS0QeufHuB7R@-br59I8|Pnr4XXn7E5)oUxdLT(&~!*W(2)r}u3qVwNF;Y3 zC#}!tA~&Gvkh~3zyc4SgczB-*fpiOD=xVh%ps*W0lr0S(R$zT;(bz}5G}*$UPlxGqyQi}cJU=9ARe)> ze51+6AY0W;+zypP!nqL(zPMd~b6e!PQPffu*R*hkD7Y}m+mh=%zc{I~LD%!SL6GCL zVyO9({XBqS9ShV!8ki7VaB=O~|AbDhePa3DE;lu?*tr_eijgZT)U+U<8^#Pj9%q>? z_OJ6m{((gSrgk~qBNT7$d-}ndrH`x`AwPB$ruG&E=F$q0C@|b}K7Z-Fb-YKAB0rMX zt+}o)10*BCyWUCFek%7ENSAH%fDuR!#o32NMigToDJaQ8S?k2g+Txq3GRjj97oGm? zOT>Ks{wvr-7SmpOx2VLSdKT;rN}S*T8bd|P8L)1i3H-DGI%mh+>6Ty7e&NNAjYdZ0 z?=3OESPTQu^7v(P)(sC1-on|<&us)fM=F_l6JBFOQf_KWj52&~0GlfH_7Z*$nq_a2 zghqQ&T!Zw}mHWRqp+u%v(TP2JZ|cu?L-3?aWyOVYe}!}$Yo#AMd3;b_VqUYp=wJZ# zv~DRi4>9aIxIV=&46;VDA2vdjdJd+WGcEvQVS)dbO5C@ZYjsX`eyKZ2<2jUKloV=* z&4(?CvzJc8z8?4Vuk*J)NjHKE0l}$NH(y<4^!UNSmza1|+>`GL=sm|h8oD%n^$?*6 z+mb%#V_C+uqzka+e6lv|4yyiBF%jJA?7ER*{TMoTqR`0l2s<+P&0(>z8tvwWzUZ{3 zunN(6wxWcn2WYj>xQMy2tpRhGz4}lF{&aP;;15c1RG@y%y-A> zz#^>GxNs4Tr%vr{o=VDF7aUNrLr3YE|J%L%wEw))7(t^Sm**OQS}v0k9nPX63=E!7 zNof`^vsmi~tSLSbAH7$m{DR#_`(*WH8E7X@Y06}X4)1$(HhW-+97@MnzxLwqs|&Y> zBnt;1bk!&97@{%ZRe`@&XMbHf?CZWIs6qN}o8K)_PuK01`gnE}tc?R34u7w)(j9HV z*rR5kWh!Zdp3r~Mo^W!qMu_5H%9*FvLaofsX!OTP`z==7qCP3d4h2sG$#$KB;q z@D0!}3RqXmjt;f~y+r(mu+5!W4~%s&adJn}rXtBXXLkOoERYr^WD!H&;A3@Fmtpcs z^MxwGQO}MoJo5jx1m+V?0 z+qS{X5aI45l+~D)Z%c2RFd%r=hV5S;2Wp)_qnxFf3oCEx zJ<2z}=DxN}5TgTa`fEU%x4?Jq3~HF~`F{Mr;4Dwh)@0 z;lWrw+55ke_+EsH4=)JnX`M}Bm^2%K;SXyFY}*$UTCti8qG|KPm4M$t$PA^`(K3%LKJstQLDV1ibd+PpO*f!s>6F zoMKC{JM!gLKNC_D%Dyof`R+;%Q?)tj(gCUxZN*G(KiVcESiig#g zzc8(N0gD-=VhY)fp&@4J z@83_88wf+$>dw!<#%11b;@7j z`1<(}o}^T)mu*W7&zls>Z$>~hwmB}|>(y>_}oqLuT$P+AE0cj5K+1&sVj zXqYj&BQxoozb;S2FMCrV-7FF~nf|k)c03btMXS@6TXh|L^ zp)rke3mWx~^XaSO8o?}bP=d0*2329~T`D_fqlrlrI&GYJXvqE#Kbe@MvF70Q$vSi# zLq`wLYb%G1Fmr2OVHlJ+IGNuF1eA5Udo;Vs`$g*bEaQHVVqy5BvL=2$6fP_W4~O_q zE{xzV>#{?>Wg$n+TB(pHf|91R1KEWvDi%J{Y{#K>Prlnzy*K0SNj6@WZHy=gbZfLh6 zXF`O&YQiyfOGIVXTbd>B{y1A5_Cys{7ajxo1xlMv+%{O#GPi5O)~EAoET*Rn=ueHO zC~J5|D+db3oyI^3&a?(-9(9t8AAcqL%It#=snn= zYru=Kvw*(FAtmba=kE7pg^o3skh^UDA~ELpeyWfVfwCIa7zuy157IlK?&CWm`Z10_ z27WLmXfnh4BE%m*Q{uKXV5E=1e1b8b%UXOr;_vQYBy?r+(U8v&K_H=$%f}rDp%Da> z0ic&ghZZj(CYV2MYE;$fOQIyoQE&3-J$UjN+T~x2)$^ErbIT_Bi&ewzuEh1mGZgF=^jy}@D4ooIa+`NpVz`NL2o2NTZU z384cY2Z^G)3Q$R0$AXAlgdGA9Ij2$@#cN5|?@G&e#b1d4!uf&Q2R3EqPl3iEgy*Uo zu_s6ob4+NUqFN+}yU4P|f4zD1l?T=K-rvCOI&CfnkrNAZOHRY|CbX#u4`vJ*`%BV! z%F<9u9fmd~sK4Bb2mSu7Gdx4M4ADZ~lcsr#a zK=yt!-PbannTOp>9+>~je%}Fk5Dfvf!utaa zCc_$mR^-)xY3(e`YM)gx`P|;63?hJnl}K=eSG{CP-l4=@`Y^K~Gj81e2D2^}pcM>I zn2fO|(AE(&TaQ%ge7FIiFZLB|OHe6(`+sO1;pAHkVV#2>hjhsH1IjNXrrm;8j~EFY zEpP4;HT?gNm`m{tu$)c3U1ZcfK}O|KL@0$iIuH0r7XUD!lVB99Y9TG4Nt2`K znNV?cwl@)Y;K})hi||c?^hRc2F$RMiCPrSu#73gd2v#W9hKx{v9tQ4CjRCK)THN^< z@s%hK3fh_j>~Vx3(A+gZObp2G);Q}6utYthTffY?1+TwNc4yWMpW{})E2Ytn0ZdVL zm^&8p3}b-kg65n<=gv0c;n+=h2Rc@d&SQdukbsP#L3suu#Us#37@&) z=EN%qNoa|;d`pzWZ@=`c#rLP=Z5+y2`Go>ZkR0Uz$df;RAh7LdS(Q&g`new`a(fde z+e@_Hy6IhrJsXA2hFk0`5WMA=hL^e^TwvwTxICPLU#IEknSD!6f)5IDQ1AaJVPv!>kQQTNZBfpKnvV#-$NoG@8VT2P$i!%vhq6hjhw7pfgF6?*STK1J@JyB>b` zA!_^X)G;=-|>^Pv_Gh9V)s z8=)rl68A*I^l$4vJaiBu+Cem`Z61x9>|{y3L&^71i@)60owG~^a3v=cRe#bzxrq?s z0O`ie<#y&EKGnp}UI7}vylivwFVw{R9*{Q(as6{Wr#J6QEzhln+03A52g2n6Zv4_d z7^h@?v5nrcmIi?b>*;qC(2&@m=&un7c#s4ho*~s{TYqr!rEt7i^fy;?=OIenhT`BCc#0_w8OHD|eD9>n z{CRbywuKfTahM&(xqP`h=G-dE_O)UR%7owYRRK?xVHi?cbrbTIr!jX_auzT=k2ddH z@@vrPcdHJ=^?f~jCV9f3uR-r!id(GoZr`-wy2s}RF*IZ-wDxtBt|vKK)R9kojAb^v z%q9XK&gm4c0kH4jKX3=Ik=MoxsQMW$XW@>BqIk<|`mO~l$Mc|YV%B~K{h_<``$h?< zHv^0H!RV3CDk8RD1E^g5Nez#cXnY8r=LG5|9;jq9qp&GMHZb)j5v_^(Z-V^e!)M_# zhtW7_tK$qIhy!H+Jb@^2?xKXRUEQ3GA|pI#-7;$rdYY5;mERkjz!>}rA{iE(#jM|w z_VxF#9K{f+4aQS}ktO)Zu!vJ~PSIDIR0OFA|Do2jjC)F22!#nkb1tm8b>qg34%GwE z(Xx?7Ik2|eU*Wj09N7QwzeFYYl$ofDi%VynL3)|PcwPF9+Y|^nHwwH@rn^PZY=u12 zd-qEVa0j5lBOrGxKqm#0G{2u9mm&phK8i9amhef7^lY#Q@RRcLV;vMb2TYbCAr1FM zjhv->4SDHxp9fWsl0@YW$xYzfJ&y;Cx5j8rg2Jq%#H$Oep!QGQ9~37AaGh+aU@rT{ zMnd`!sp^1;_2>=qs(~9yms@3wETuh>Ge1h?O{S*utli8&2)Nwt7@<)o zoj3$lT7G-S&&-Y?NN}#`aAk$z=?g&(;V2*#0}<2AhgMiq*lrN4twhsH#yC)Z)}s=? z#N}Pe{$!i>3gv3GQ|-a3uIq=Iz0BBK1+|V6SPlYY8|h5o77~x!iYucL(ArRLfR{ol zJ)UU!7GJ5vaubpAm*MS99;ReZKg8aEkO(v%}?}~zBoxS#0c>vY8SO| zNxt%-L8~|D;X$8WF-v}^_vjo*%()SET=V?$MVlgDRnMF;^vsWaSEP>w&QNtf9bjR9 zt6p~anU~2gzusA)sZztfcYDK>;=`UpMD^Bx+_>ItO64^zk=vIt^tbY+FP)XHzAs+g zP}@fP`DLY`cC(j(rX3=U6*i5=4-_!$OU|f*r{>_30D}i&{nRtOL=PgCq|g@G>@z7q z6}?A!&!%_xyRTC#iK{#{7`X9yNxGT&IwQ}!Phx}vT~8;D@YO{y3l%trV1~grGN3XP zXG32K&^9VVjqLQQj>BAUDq0BTyQJ-n!|MrJ(lbYIm9Kd$N59=oI<3sz8|8= zYN8+D9hpoS(C~Hm4hJyu7a{sWN>Wlhv1@h7J2q45bmo_k(ur2rZajUeNoo&NIw+~d zFIyTitB;L^?Y22n>JG+pH;T`_$l*w`FpzXY`w0vk4Iz*TU$BjAttH8`=7jdEevb

ZKNoq2E*qoJ^MQXK-W{n)0jQBj@ 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 z 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

_&(0a0=nq4B~WZ%SM%Usf<98eEjKsA3Q8 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

Puh6&5ieO4P#kp(nunvIx>p0w5%)-s3mC$ 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ÏhdNGamY#tu|_hVl2QnaLqgiX(B7!PW9w&*H9 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

XNDC``QY;V$gx$;@}l=rk!$Z^Z={ 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

(wg zmK`dy;tY^3BK1Eww9EQ{&y?=!eomZ{3sr~8AnTm`DK|A7075xo1GXK$AMnpJgx-aR$bu9ZFatLywFXO zNozDp_QALmu|8mzXaS*7tcfY#fA%U1dAwC`BWM0R8zza2Fd_L2gUbNCtW9juG^>6d zYXm484dX=a3HY=Y-=n~G$twJn#S0XIm?%Htcsd@K15_@$0WHUDP2-G8Ei0=ql@&A) z70Iz~DTZ}6f&kMrvVQ(h3z)qj8m-J{^+E3=lke}7_^8It)e$six-hpS+k0J8 zlX6D`h*I$a6UH|tzk>K<7|2mFDh7#i;q6c#7KTc_%K<1mBCzQv?mPCje>25P>~QH| z2scoEMVJ_pAWEIdl91Mo=yI?!`)0v{+{6VR>Gu;O-Rek;+QjOQ?y*3Caz2rQZY=P2 zv#P79EP^31D73_iO|hiJe^_y`9?%f|mr-KhN)|A%LMe`x>Y-7=S(Zl>I2yvIHEz{m zfDVDnWzQZR+g2@=P7Y-;%PqrWtBA2O=^VA?Ebap4PY8KRA1k<7@9dEqua^D?A6WbO z8%}7`J$cNAj5CxZxZ)*kZf7u)&j)R|Uw9CxxVTvRT0^a(LEk@oHKJ43{iWJMCK#3> zG$-0?1HyyC!hi_`GldoElKY_>`@Qc%~7=rcH6M3fvKw&ZcoR-;pM#+yl??S!UqoP-}oK= z^4|$d25+n+5j#*nbm@#4zYYFYS_BMzjJA%httztS zZX_)Vaj__Yqud_?f`@&@0Tr1JD|9M)0sg?5kGFJPt;2d3y;~s&(VpzpnsGZW^j=6y zfy7;Ea%95dOM=zxOoA=mU1&P&NhKW^LYhwJ(8X)2n$vC%i4K2p6MEkrwf6Hb)q zrLP_sHihr94;55+v53LZ(aKU6UI@6-aag2UiljV_rM}_02a>0yPHd;{CC1xC2F~YS zS4S6oL#Hr%ebPX#_XTa5ZYgy?t-JgQ6%R{4kd`CXZHGfl=U6+gu{mLHkddQtVdcoP zyLV0YWCf>K%v4gM5Rep{leiyV`oVFv(K3PzVr};^>l;|Xxj~h|T#z{d(F6W(b zX!wb&zE;Ovi;v8yVBjymyEX)RNZ7n z&c>pFs75$X1Z;xVRqr;o%8ryq=5ExBYL889!Czi9?bxZ)NoFltfcQa;aQprHYeI_E z5;c+xXXIs|<96tp2H-*{NP|Kn4WUY73ZgXl$im#HL4|8bOOi67GlNP%` zL>9MFVJnj$h|WZquAoZNqSIHvlu{irqWq^6J($Eaw)*wylmAo7Uxa^ZtwA*b>4dQ_ zgo-D(L&dhT_;%N{l3deawZdVidr4}HV@aMo)# zr!yU66jyVDG}!WFQR-&))2Hu*k79g(6NM=ZbnPqliO@GZvE%o-6-DxE!S>Ee+?+JU z&@iKOkF2(+Ks3#ht*1oKVfY`16Zd%M)Gt35!&Wz#vIJMzgGtO7p);Cl%~t#-VJQso5vRXU(Jlq6mq9 z$GnAQum|wt+#?p=9T#kR_EXAVm~3k9k^`a2O`S0+`(Z&}u7IL8dd*jZ2F>~=?Uj0l z-}ndm876t_hLqNfK4clSx}?uP=Km9HJFC}QV)FYFUcG5^OJxc4B6Ad=)5Rb^8oTcP zFYwMMxN^4j3BA4PdbQ!7j&;=w5IS%(EfYaFJvnGE=dCvl8}s)!QZwjSowK{ukJXq= z|HDJ4$2YU&>&1I7M9eF4r)lmz!Ar#&t(^+DIC4D%sD8lrv&KLBMW&(e>Y+YY78_>| z0le?NZFLnN>YQN@`6DS80~QtGgH!afP=x#hM1GW3Cd@OlXl9s%*;TIAN+om)G9^x2 z$BrEn0v`vRiWc;$jlfhggm*d9FtCf+w9U57$3Kgh17bJTy9FF?#v<8mPB_vaTKD0U zoX8!se01fy96($O08IU!j;}-L?2z7DgIRRmbx}9iH^4$Y{pQM%MPQuicu0$KM{-Y6 zt}~FX$M|9z7CzGJLci>l67$>h8#S;&0KZa9^JA@uJdCj zCWYzgE|{FuX|DEXzic_~eYo>ahI%o5=ML=dz5HO`?I))tnBM3;V^8E##hyQFYligC zchg_5vQF{Exdj%*;mJ8E#i1TCyGQt!jqk$;QozCOqczs9B0&7M!Sii5ZrpD^Xqv;T zN{83`J)`EvZijl1_Tj^6*y5iV%-~ z=KPGhu;35=WR{nWLwB_$=`&wvYq_OsQ&g7xKv2vuDNX zyrg7)Kuy~V1wMo00!2^YIIp0<7tXjuqYKeK$Aj`Cu+tzC%%=i%i-?F2hYT{i z0?_N`r-@*`U^vJ^4Y2MAsZ#rNnMTL7;rKlc%=^GSkC$V*-j;=rcRRi|+jgf4+ScIK zBF^xSzOfbfG8xW?Zzs{_NdzSiOR>Ahqm^-Ry0cQmPSjh=2iWZ9k$+o zq34pDVawr$k!&DGj*#PYxq>ZM87X20r0%lQY+00aee@*PF_x>Jmv&t@yxo(3P8;H{ z8k;nx4NjIdB{p$-7H;krysPpX)c6LS35UyiuAVykJQckcX zbR!n}BnF^Gf<6hB56ohr^@-0lj{Dl`6*yd5=Orqyx^?PXaY|rI9nOg8wK;pAXOXSI zMBH@?3U1=mO*&!9u+;7*d^>IIQU}g+ptwU`&u!I2650TguAbY`d*8u>s^dZ!MIo5_@Dgf)IiErd5!ie1%P&bIz7gPN!magWk}4 zvmn!CU0(-c?x~e3vSs#oJ>{C$f>+$FA{4^~sl!nw@S0^aLfsZ;WzrCy4bYk%Zeb+3 z2*djJK0G&OkTzUE&^1gEOkcvC$A`n4(nu9o3Q5r+!VO=OGalemTX$Q+WzEU!GWWme z{((~_6qhtUx6H=u+rNL3Lycj@Y_v%RG~f1l&AZcI5$AC~V+E5Nc zq%fh0EzBl=&ks&2kzV*9S`#54m*mU>kxk(8!!%94{l8u zcKsns_!?xDKuH^MToKZwPr0ef@e<#YMXy*Ag*e)zf>sGJfmBL7JH309Mc~Nc1C&p5o_2!@TV@CqA={AFsssskH}Rw6@=@GW;+s3t40U~T{-YFWDuf_mKcZfdM6L6dW0V2=H}>4D zA|(WUy;I!!bn}7b^Y^~4@$&KMcs7~LQTh?EKAKstu^yDPrqbczy5UA72q%L!0L zOv%;b3mWi>TG8J2!!H~-^v9zgYgC$C#l|1{wzYY;I?qT>3+^;sCSoG+mpv!=y?9e$ zCu7pRozspNG$F_@Lp|hjyS~Wn8P#p*;;F}0i7HdHv2&LmTpDuGzBv5m3y{QY-P~6x zT^UDDJ(QX9bA8q^QcIUXGG50^FJF&&6z=Lpvf)Qkd?9gv-4wkYh2!FK>uM_{p%e)v zhk$E=2-SM5!#sRW zoapd)8L>%3Nz~;f41cLE2T{o${7p&|9+^_Nag?J%dL`feE@>R-q_(SS0hy3&A^B>} z^72zW#1=UWWiUQ1dL(Dq$#CjVayHV}MDZ!jUsAwDn7a!YFZmK@n9d~y!W=uNLq zOO&TOwrH2BBI?zu?EkT>)ZQ#B6`9}-`sX2SSn!Pk2}1BK>kqk}Y9G5_Fb^-he_;m+ zeUS6|52xJD%Fb@}`uF)tO4<@?afk@db=e`lG&tK3|-Ou=63*;XPFANuVH&3K88IEbDRw@NdZyAzvp`_X{e{AUi zshq?a>&MeKZru2;==r9`EWCbu99{05VN5nXwW@Su0NE4g=C`A6h$viKFs1n-NTd`? z)UX}ycz8NcNNKyARe6xpPrfcobM&g@X@6wb#A*JxD8%@QM_F<(J+x^LM)&WfbaYV_ zSR>|~mg||Dlmtn~GW{^~_qbjvX~RW+CNe&_2RKe;y6^88q*?r!tT=FMc# zMhPD#n&R-YB*a+8lJWkN37;FRy;?4$+b+ryNCEZ3jPyAl#*ZKW0==>y=NX10+S8}Y zXkGaBRug+ds8e_$kJHjck&?&gE{Vv?lHIS1-ySEtjQ;NXbmGfVX|RJ3$_Zi%N3iW* z?_qohd7W@8(E?jX=AHsV9&7n%C&+;`agPo_QwJde%dY74dE05qw{n>mXn0uDvGzpG zaOUR-YA(&v@iF%E%j~-q?VM0s5^aRV{O_+#{ky&ZNy7qO0)LD^t zo!wkr^G=7%qDBURsjt`du~wqrn6kuHC*%p`1&#l)_Elk|04MU2-25HuYJ;5fbmlKr zQc^`Uc7l&;4kKCSz4fqvF&l=89Cw7b4N_40k^@A(Nci^0?I++@ASKOUhms}~6^>TE z$OZpWOD32U--KF2mRpWZnFaZh40n_%q-U?Dz@kCwFg5j6rtsmmaEzK=NEK*1|swQA%cF|1;XKpG0U z5~j(H4L5~NLqQ4Wh&93k`}2=ydaRDy0`(a|6z+xO5h>q~!ttsF31xs7lsWEbJt{I^wlK0HMcK zO2kNMbD*rf&6U^X;%`$^yv8w&C5q;(ujE{m=XoP5ZK9?7&#Os4!`~B+*bo}IQ1 zlBvo|YWfuY3&+3x#N!vz#ok!w8A{vvH13G(E+n_o|GpnBaM7VdhaihEZ;~~IAJx|l zgLMF7V5(^;m{uXIUZET`48Y|aa$9k*Vr=AD^{4S4QsbfX(gBkf?jk`?XaU@)3_53i zI8lfrrJ~#ZJe%6rwjv*=JADlWy3FH?A z_Tbh+o4C+p*en7o)>AMe7D*QaeVkRI36tr6B`aWoBaa=_u3bC4WfJjr7&$T{9m&Z5 z^`SF)K#-^noVF)WeaHbrdpsQ40`0WX-X(+*5uLw!`BFko3jpyQFC#w`NTlIfkPO`f zlNQs~e@2)*_4g$H&pEH?V{9ZX%ATOoY?==bu8% zX|i$q_G@=WB~_;>xzSuGA#8`I1{5W zv2E_`3++H~n^Y-YmUHwhch`}WsunnkJ!=IGqP6|E*=fAGLjRR^;C?9;LhlXjuvvv8?X3Q9PI)H)G|T& z+fbLj5z3C7#|``|@x22`J1dT+|JR3h{Qbhlf4h1XcU(>h`f9W-y#D86Z~Udd{dfE2 zhF6SKch|6=yJcb4S~AzD`t4#uzf(lU+js9aB4KOarHd-56Lmb9?%!VL-~J$e#+xV* zv6Zaq((tQYow>ygZ=m`Kug6yqMhq1nx0XiTSs~ukze7al^Mg&ge@oXJYm&|Tqt2dn zv;508)-g05_HXU`FXy~PJ>w61!y;n)fEq$lu$XkX@#sF`qhvxyRdK7%pKIHK4T2 z%#0`aN+gvb#WL7{a3uB+SW1kscBkDz@p0gU(1XRjl`!dR*7RKyTUf-qTja*t(|}C{ zT9IzQFUlg(O6paenHyM9Zl_uEVjoO0GtJ$*b`9M3zdm_tXhY4#dpM0dL}(HP2{g=; zAPr)J)&oTBEzGZ^G?PK@(y1dIn#I9{{Kx;v63HlAPt3{55nfy}x$4nus(XWo)uuxG zk^$+`Oa|H$YO%Qasz3vs#KGz2{@y+Rys0qh13PNm>Ur-iUv)KBMWW7H@j&RQOzycwx+n-HMhj za4Y?}J_T_WzY7XL((lJ!X`ZnsZ^4HZnIp_51%67>br1>8AP!mrD0S!PEAwuQ4Ht<$ zS$i}?rm-xi^f|0|8{8)$rL0+_iF)ycaC^+Vr$Zq2j( zuj$i^^(HDRoyCV!lNaLf2twgSZmq58@x$E@n2>gU@C&pWcZ!s4)L<-$l^9(s&bo<0 z02p@S?U$>6Qqpo#U^-R}d!@VrelZ7dtM~Tk-hI^?H_Z2>gG$B@Jd2@ye#>IbHCJzO zi0v@>;tYF&E~MZ@M3}hO&v%@^GAU4R9&jS=A+(ERSm&a^^e7dW4GwO$Pa?jB{e z5ldF!J-T7bnYJN08a1Q+`JQ2n(Auz{<}4_z6gJ>XK+{XNRe$p7r`M781xQPp=+Ihs ze>;MbWJdy8gjwd#6pkTO(t2?#j@e&ljxlRX(X56I=TWH37F06=MUhx)tAF$Ei}5UL zRky%&oC}PkmX!V|8QpcdCB;h+o25fZ2m?|Q!&}y*TKQ;&utCM}mQNkTH}C>|RlbvQ zHN#g%L6QabFDcILK$}a1b|USSP6Wxm_V9Lj;b)#1UR?OE5jg(pn?RsEjl)BJU&IdJ z71FXL#*3pm3+KDc_6C(48qvU{bh1|j&jVuzTbr*CbVkrfZ~#334uLQ-iy+C0TOz#o z+0r)$0=1h1mssp$Q2wmIAZU{Fy~jPaXF8&~vizn)gbKG+7|kjIpx}rk;!2fz90AOk z80RhAOgLK=8=MmX{Majt>r8G`f7Yo}-}8g;$-qxL0HMr*-T= z*+cud)gzbIuA~jGM`4+T@Q3tTHG07MJ1 z$J@U0!Ok&P^s=H}l$VRM60D#vA>-O}M$Gn2XhI=!Iy+;wML0LYo5WSj3}m!0WJ(qF z>L;N9xO-JN^KZr`&>_sx<92C}a8{9?E)$ulD*>Eo#SK_L@D}UjT@y-l&|fUQ6fTDu zfR(^@tYJeMA#i{6j@zD^8<=;RHIwl_w`S`!0OGBzV&9U7y365C*HPH}f(J^K#(dLn!FNwZ*x^@K&Us!y%WIPJ zZ2cfo3gxqP)EF+mPxn-z+y9WtnE+TFE=F635v6;}O7W)9Q$_vF?Y}Ae56olh62UXX zViGK3Yw1LXx>qTV!(XT_2;d$>Q}@_NKBw^nRag; z*~`GC+#^8qpKEiS*4sK5^(bGzi6pF;_lx8On{2>1km-SrKX(zr6|- zpByofBZZfBM7y)Y54j((3FJ2j%IUy}$4QQ73Q-<}{y2uTeS7sfFK6`s^-=Ok1Ib{* zg}s;&68E$e=mAdDtNA$c#P+v&s}AjNb5-Hb8ghk;%RyOImOA3riMOfh;0>fvAl_nr zOW-(gVudDmvbbEj1$N`6n6-EHSE)H)UVllpFYF|`S@d;ePu|Uz#0AdF8ak!)yv)@h zr4r>d*Lb6-dPx85dI~yRT$AtE(Q({{obYotWlKxHpPvb^btkiZIusL|pV_{BVRuQo zI)Br%Niz-%odo`4NX@~)^{{>@debY>XXuR3D+x58!djn?y!Q#pnX-_7M&bpRywp(g zpB(+>6woZCk0^9N?DmjTZe7*N-|pG{Nn)5MrouE7j(d6**YrWP0eLzNUWwJiOaFo1 zGF^PrReT9C^&}V0??X$ihEJXyrJbs2GKk{{dklpaR{0`O#)Uvg(sFQ!PaD<+xv<5> zPD*44f)AzKzFz$q>sMUL6>t-SP#2s8AE?lPuW$6_vK-rmrL)&1Tv;F!N9xT7xWrTF z58MFhwblGU$tIkC*q6qLs=MbrD28LBm#U=Jz0pweJGA|~@_siKaVa$^9`PJCDW znkLPT5nDVP0vIj$uaofaKlXJ}ch|g_BE^Hsh196hg{j#@DX<;WP;iF}x|EK92+d#CU9XxFq9?Fu$8v2)S8A?q7`6Tj7<);7k?N9NC zld|8^g^vy}9?$`{&opsUk~Sy>L6K-#X{E`jMyQIyTq(Y}45KLg3v`%eKu1??{<*&X z>8iXdIqT)@?3yh@U4m(*ibo8Z!DFn{hm>ewyA}uzW_A^XkTDja9<&kX5z*SDbbI^J znm#$&>X2@wME0iGZE;r^#|qL=gWX|1L=ablBSx$DfZ>fTJ3xIfe- z5S__vQt>n*jSDV=WL|=b@IfpKN0aU|xEj2J66XGarkJI?P{TuC=N%Ex={W-{1YE4a zW>)MuB+H_XSH%MotSZR42^1i|Z_}-TU7=1ZR{Tv7mGnA4*yYHP)q^I!60Y|CK?{O7 z^8LUf1*D*4fOewqIk}Bis*JuPU6e5w1ajAyK;U+o0qm8H6;FJLhj)@lW@v)lV5Bls zmt)sL$~4R1=-o<)BYPKY>$}WNFhpeJ0~{EC0^%5pzd*xpz9s+Jv-=&L{OCEc4x%{8 zcn^)C15cA*=DW!Wu{J>h9!DcKERPFCtMl&RwEhf9CRd~%5Y34d*g++w?=6`tK&k9& z5bpMK{?c~L4EAA=!SER}@`c=(c-s69D6PyX7B_m8f*)J-*i%0&kAA3cOwPY!YZDw9 z7K5fR4So>c;w#SQ)XsYEK3vmhPPwPv@L=}iL19kMC8DNN{NcpwmH8yX;=r9W3fLe* zBvfMciI&q4BxwY>xs;dW<231nU$0d1$?e;>W$Oxyi^-9)vpFh^s5KedGn{C5^{OW>g!Ab`@<*ZO2~kUb5-4wOty|?B^IpiRL2W z2Hsw$rYG$2;^lL6?Xu>JxvRi_qBqB<$$~EiCG!QjPjc|N}Tu0_+lN!vB)Q47$h*3Sy_a@bF}L4+!>FZm^&dxGjXXM4E#Tt)pPW{fReO4r{b!O&^W;xb@*fP@osd-- zm24f892IQ$-_FZ4)(5lHDkj=J2dKEp8M6-}y${*ot3;z%1@z&Y!R5*0N*5EYZvXIL zSCL2cU56rEV9d?UhdS22e!_8aVCWKUP!td7LEUIAO58=KS+%$5T;0a~5f`^7+t*d+ z|6ID4?!*az4*$~4N>0{Oxm=bwCOirVO-^Kl;a=8T9+1e@QE{)Xx^FD>Euf)reVfv? zyMo~+V?VVIfkMFAEWoItFfU|CV{PZR)U8wdMQyKW-BV*cWCnX!LRZfLMKw1H%ycOC zUyw)lDdmF}-S$xFF2*H01(R{N>blLb%P@4fiW>hAhm{XI_BH{gjD&B~@$$@Y3%9c+ z(f!#PDUkQw+1=hmn*(42Lm!O1y?Ed2`yJyh4N2&>j}0`+=kSI*edhj^SLdYMf6!Rc z)GcPUuV2~X8AY@AkjiD7*s{Yamno?%`J;RQnPgafWgHmGkYSAhyVc_mbF3vk9$-7G zEjw(Tp&dAcmIiJP1IIw%Nu!|40`sxG`(umsm%iG%n0h;k?^_lgY(KE;nse)*o*zO^ zHryg(0K|h7oIX-{XSpPN{?!PZ*5BXO=aIZK*<)J7n%s1|P-8PnMHgyMxl2jobCGem zxYgw^SfODa?67tg8+VvUmxeCBv?q*(&Q3934b<=vls z{r%_ph6or63cdcu>?whdRNqEjVHtko&9q^me<|E;9~~G2v{STuknyRbC&R4gg91PQ zx##OIHDCVTPQ&WS&$)G@Y)Z0F+Se2mlP za~T}=JP7{tNZ(v30&jZc!kuuPZ$@9~6$|b+u67@-Gk47WcXl16ruCdj&jZgsIXz88 zLn;OItr(Q?`q&u!Dir+7{4$TaO$smRV&g>R7xmTfPgsG|$XZWx=?9g)mJh@+tz44c zuH-U|$6%2|m7!4xtCa!i1BR8d4c*4%|6CnNm$LKV?K?rXnW4Y%H8)3Xb{ z0RdNl64ob=$-hx&+g|CVCLHpaw4o`lUNRXoDQTGP^M@mJ-iqYo4?bri?UIP>4N1&C zGP3%coz~MKi8~;O9liJ4SZj0P->XCciKUU0w(dT5IF17IYbzb=MjcvtT1&B5?&QZ^ zSMEWq_>d{fS2(keFrs|*fik0|yNFp!&laDVR}vx%oUw8Nnj>-b5zh~YtZIRE=G8Ns0Y3t4+@u*1_Ve)r*TX3km^Fq-RQ_{j^lOHu%xf((v~ zDl_g$^|c2?kbdFe;XR|0p9kgFSOlDW_8_NM&&t{ll{8{lC=Y+_<$MW(#Szl0am>b^ zz2Vlvtxv+zW{!EVbC|rBkG`t%;ZK#?{K0|m5gi@v+GU=RksHNR;3H1-H;)WqzUE^S zr8@R+WsC8rOD0i6ZwdDFIZqlWp_-Qy~2NvAq6 z)A7$Q_2S0OsNmdN$t~`zzR?POldjd*O6`MYd1%ZDTYg=8muckMg~Zm-gF6~8;NSmi zeB}9YuI2L4oO%aiD(*05GJ8X2o?G1OCE~X-Fd}OxwyX<<3QYyCF)C~AL~UG=BP_-eeR=K)6d6!z4pjk-~X%}^vpGQQ*SVu%V-!5f*a*SoSgwowNJ(F zNyrqc?R{`t#q?_?@E;N2IUAqPK*ls+Se;w!3-5HBeZ~*ukAQ)`W^Tj;xjo>{OAu!l zfHo<1=lEaVTKSNA#gcuHF9$FOtgfo7>_#slrPgy!|A$yzTxM^ayHb^uxdwiHGTBY& z^~qg(YvGQ+OB(4k*5=(C3*d7VVnxj{i%n~GaUWvVEvQO$svJs8!~Vu#lcdgkL;nhdn(!F?aYPBY=N&Xv2dXlwTkQ^E9x5(Ne@U%gj? ztG4&buF6&K!7M6&kht#UB0cmX0IM)9hWZ((6d+ zX8UmOn0$9j!`tp{vRUY5)FMl%b$9$9o=cU5i7gQp<{(OMoO z^b`Cx&{SUx1&^~T>3Qwk)B38twN}T~RJ86qbn%S*-q=6++kvDe{YHOBh2;5_VcM@al!Tx;@!`y|11B5Mf1g((U%4#^aLn%1;bc>fb+nC3~m zIaLuwywx=|tvQyDF7O3q)pN6yL5L-}zY$|om6X2UCAp`bfq^StIwMHgOx2`NyYy9+GQnvwe2VY`nVf zf0~Bp#y+kcSyAzKma#?ZR{?Ih*S?fe4`xylO*4;Nip{9IKeal2p~JlT+vw+~ji>hZ znIAc&2XWL&>SIZICF^K~OcChcKaKEpJnikfEuTODC@d`8o_tgZiGnSx0fu8eJ7z`^ zI_KOE>pn1e`%m9IDRMq7F@{G*b2-19N8kT-`fr23qI9z4)OPfCtgF4v7_u_*fxyS( zm5j}39l1#8;Y69_^X65!)*oYeu?z<6q-9U*=AHWfTW#;u^_m-QFLA3g4{8^C2E<|B zQbuNE4&rmoIraVTsFSLe+$-1}#+qmJRr8piH;cYoDoNW;j?fwN@6TOgTltE(HjBoWDCJbN z{QUgZ)2kX(8E$%na5%vD)ZJeB3yweq^MXXV0?MEoDP6i{$lDM4=E(rhfXDSuovgD7 z%kEO1;3$2G88dsy88c~)P2F(S=G=De1bIIb$>>NjF1Ux+;})H6z_6y6A?kbfa|ncKiOH&rdP4@jKtg z&RKK$em~#O=lyzai#o^%M^iar?b&iC!Rj;{L!`EVTN?bU`^|VzpgTGQ zyLRCFwP!4&vd}W6T$Hzq{LHzlxvr{#wA#6&a@n7clsbtXYY~pd(T&2`$7^6&*~&my}!BxhCq&MF2Hejlac9?aK45D^n@v(ge+gEy?Iw6!e1_hhw6Yg z{n$yGh9tiIA`w(I$`9y)PMZ@vrjOynuY%2X@N5S zToLQsiHb9!JIX~uE$)eTEsktdV5SbY|M|#h=nxx6n!ASs2V2XMsG^vbMG^ob~D!N0^0d z2pjA`HR&nEv*hYf9p}^E$vq!y)C<3Es)l{mRDkO5XK@PZD@aTX4sD9rv$@c9D~cyT zC4Q6y0|WV4yV<;PKdJoDgz%;EGvJ7EXvT#k+Vx`ThwYn6-L(dQlk6 zUVdqSX z7w4rzz={zhP_U^=VeuUn8JWkXl-S?C36`njDjV9|x|5%jM4RANr7?dp19_R6l*sj5elyXi0BAfuK+eeMT<#4Pu-s{@ylpS68#$*FDmd z4Lph2`Oly$**;peIR>jBBqhbgC+atRnxNXhV}8eK$$XUMSUo z7b(CR!nX(uzXInFvZ0T|Zxu{U-a#YPVLIZF24)# zr7p@CwGE!mA`}2~Qlo=#E&Y$ixZeg3!7^Fz07MI37dFl|g?kN(#8p_>3Xoz=MxiG{ zs0{YjR+;sxWS$`raT2QQ3i~20=GU-|vsF-K4ez!4wdja){mg?5#QVWw!szgsZDuj5 zWOvxQhBiQ0tm9>cTC`IvU3Mg2(+gO!+k@JDx0K4QyutL9;AFSH6j+_(&m$EIU2XfL z5(nZUDvm&}q*cWuGh5P8jkt>knxx0T&COKq)yKcQ3Z0))n8+qx>~?!t3LH#8isaoz zYryZEg!4{4`#;C@zDk_Xe$SK5bP%lKE&v2V!7(Sm8EBev-AUbcWZMQ<85aO#O8RAC zHOdWNR*0Y`_pk7r5{QzvfnS$Pl(itf?N_bXfs?<=c(2Uj{4pjNVRhrZSh(uB9^E{G z8E}+R=_g>r`ftwY*9WV`eeO8{i;&t`wgo@lbLU6by8~BH@r43m>-5x7d2+$DD+_+bUOPj& z?=$gW!=SvUul%KB*clPb7m(AXcCbAOx3dlJFpCRtxu&!Wtw=NU^VemA$SxL{LkvK#=g zLBL}q@!WGP07mfW|7oZ>4rX1$CqhMgUg$zT__wJ&J4v*(0K0PC{txKuvB2 z0-u|15TR5uaHK>I5SX>BFwj)J?bUQ;2u|4#l>Y>vjGZ`!bQky~B~brsaoVru0=NF2 z3Y_SNVsRH%FV;vXD-2E6Oa1sDqTLH{@H$|LojwssvBh8;C-43BUo6s3vt&kPzZ#pF ze@47}%EVJ6Mlb#ZirH;&qP>_KsJaMEP!0h3IP4wwTIKLB)l5t^m`z3hW5> zXlQeKzAqjjv00D64sQH{>YiJRYzgQSML|F~g~GuMsZ?l?wzjJOYs9(;9Gk&yHTSo4 z`-j`GEl?lfJ$#PJ`x4u%6-1rpc7=^o!&K@At?pgyo9&+n=ujC63;U%ZB3AjmVm-hY z+BoYVY6*w~w0ap6Nnq3>G#0=M^W>;S6`wIRur30k`*Gk05zFNUJJZU}HEEZ%9Sx2C zsv>uhNzQ*Q9kM1I_S7oT>W%nGrT7YgH)0zK=nddY@N?s2i#z&VO|ma9*D~~e=fE`Z zy*X??*2pF8^vVCoMTvMWAHD)I>^a?Sk@wc6iS2;*mtkFX0N}ZZKJ`$-%QqSR_o(6v z?dOK5oXrXez|L5p5Tok=e7yu?j@gjj)=b`aZ#~Np>_OjiW8d4Hxlv!=3>n7{2eNQ& zoU?oNw#Az4idcu8Q}B2nP8%NwzWTl49~A#Nj6JZWX+JML(73#yyQxGTsN}q}P_67w z2VY&sG6VfjU{h4G94gUVLM8CRts`uLykmmiw&}l-2@htIu)w;0<2oir#Kx{bMVqzT zua9X8SuJf#{Rb1%5I`gYB`hQHRW3x}=2GMH+RMXdgFqNq24gC|9vzjiUV3=?UM@PB zb_}|!vOC6kp+d7(wktHy_SOXRonXh&#?Dq5>k+>h;Uo?q%tiDTERPD6UwyzR{h}H3 z7PvpE&{MP7x36<{@K}i+Ptix!+C@iBy;c_w{rQNKFT4Gj`lwv&z&M#92?94;NlK|1 z$*v4+8)JBGuzGsq7ZSx^qNZfQbR_@PM_Sx@5Z@XwAx?H&;Cm7g7c`Da?#wqVx*Mg} zaPCcgh5l-T!l9I>I2p3*TtqKF;-)5GByI7o7ttfLn}K@eNdAaz^O!FYGhb`#Ctk^) zw5dLRLcBrB&h2PsGFI<5?JY9ck|-0X^nfVd?_Rjs`ebMD8l{7?Vi(|>5cgJo^zGPo zFd>R)<8%MDa`FjWL>i!#;!pAQxaeT*VDcOHu*_-qPT(m)at0KkB{_Y-LJ*D+zJ5DDo{rO za*G+?h*pMOk#HHWzJtdH;nq3F%dYH5?~kl^B+?_j# zu8=xB?mxnT0k=VkuCxEZGDFI-;sof##5>=yH)pxz>zupwFA~M$QT!Aj*7}l%msY_ z+WPR1&wh*W>|<0mZra3xNy9wm!=(szLTL>xJ`*=G+vY)}@#xr+-Xn9OR)uZcQeX4q z^3hoa=7F7;8=`)`&I?yUp~y;^!jL+!CfX>aNC%o8otJQ%+Zgm)C>E=l0F>d}M6vn1UN*S*BlR3HU3JEiL;0PHCbdZap`oqwXb1 z-`^(xzJz5Qp|lCA4pyvHFm5tM8L&eUs&cZI>@3mLx_k#_M)vnjt)fN9N!y1}4fQ5P zLAmO?ZRVi|*nHe@&}I9XsFF{e_c$88*5wafyVytA=@y&Gm|;*}9fu#>UNOn~B%)u` z;AX&5Xb6GEoq#sN3_?;(FLcFq$ThjJ&_4|X8IlWi^p&F94Zs2O3B+omV2r+is*2>a zw+tIqltNxI%(jHjXg-Hq;RO2A_enoH8C0(IV21=H0xBCS^npJ)OhF(0qNUt%ROLeb zP-VON+DX+tD@bxLAG1_(l2y#-JQ6}zTX{OB=q+&XJ78;I8keWE25_$(K&q19zV*&Z zqGwYsMMY_Yck?w!2FfjhYR5+=EGjCWNer=;u?1A2xbM9aD2~{~dzBuQ$WRHxtc?hB z6+vK(>hRri2tBZ(ML#BjK4Gi<6p7&X{s3~Gz220vx2?HQe7eF#{NJ@_dcVMe$>^&P zH!ciw8*H5%+i+;t-K)F)u!>$jiNy%8r^qhie@;)sLK&J^6SH9Vss$FUgVn=Mlk1mj z$E%jC6Pht^G*K6$qU2Dta56)!UBsdg7=Wf1=yOt!(mn~6kiy*4-2rrt0^i@O!GlGuYwT*TNc#RPm|r6zsO7PX?MEV71A?b zl(g=RrD%l|05ze){8Zq0fS%NutM?fUJokJMCtb08lhIy{AooF$%ab)GtHUIZGHL@&)%qX9t zpJudrPpZ@1*$QGl4psKD5twxMgTloerSNO8xZ-}YHCBcDwna^Gb}>s;PHLPi@ky5M z*tQ(&G2)qhZMJ3y9IN?@zk7LzhvJpuWLVs8Ch(1!)TIOu+3BM*nuHpa4b$i)&oZoH zu7ALK)eR1Y6qsvz;hGwx#XT$G`R9iMN4m4a^fy99BVypMtFTV5rIH)EtCzk-@qCk>l*7$Ni+7BrG3|z(y-_vrsM!6gp29C+}qXSFT*Yd zz7>yLTJ3^!4m3sj@(oY~U9#D46Oj5hiD%M~SY$zXd758LC>GFx60e{}f$RMUczQ?`?SI<;8JW$oi&M1%y zsO*(8wjW{vUj9vq4B4S{J}MJ@*(rS6`|45H^Ne1=a#*Lcr~qyhYyadfiQh6@zPC)Z zDBrO?E_h%r`#98U>13DYxTJyNBRyk_mZx5|TBMB|;EhLPia9t6b(%^Bx8*o{;@-po z9i3NHneHyGJ6;!OgSM5G-b36N zA@Z)X0NJuAjm5!8S%KRrJVe)@+XiZyH6%Pd6Hq9d;gR}5FCusK;WupZoo(ctNmXavPYnJMqq+L_<0T@- zZr$H0P0o4Ai=OEAW1st)-p_LVZO8Ga->* z8Mb0vVWw!P+4LuretDGQF2{(?M7saEtri{CNn}rY`o>LkDw4e?>Og7S20CZ<&c-PfP&I;)K0S{kAdG;YyM!&D_)pWD7C)S;< z47a`eb$a#>W!~)rO=$tFY|L_lHrh{=h}ie^>8bido5UxAJqPsN+LLd@eja{Yx%;-d zS%!Y!xWG3+>* z)c@IiAF)TYA${Yw)Y+kM)}2oxn@cb)H1sMqUUNz=|AtQ0>5<_$a?3_ryKj_Ij#*&B zn!Zs7Ob0GTZrEDPJJ*wIaMi-CDrnIhZ}EW9jFbg(HhKPjQ=}5|&Pr+L>sO|4wy#?4 zr?_i_Ql)*-5`-XT$~P;KWj7SVQW_DKCw}+z>2CE1+`5@xfa|6L6Kq2rMzr$5P6SBz zKOCw2^yl-o*|S2q2ocz0K44(S5fGI3P_Ot}f39XX(Z|QUB(3_kT)Ep)`IN4LB??b| zN?9`SWQpi;s-L*k5S`n4pnlK%iZ1LeQVh2U9Nlujw8U*?y`6uHU)Lln?yujyGG=cY z(%9Wl>udG~ejduEdYe=+(hflhl5%8&>%i>nC7VQcj*LDkzxC)~!g(@)m(0S23#nhd zzVOwX2OEcMFi>iXUC#ggp=OrIF#qCZyZX#+xIbU8_wlb4U)>nxhhZqno?LLmVFA}T z>g92Pf6Lg-lL@ZysEglm^RGVgz6K2;7+?>z!O+kj1B^1*Pgx9(K(Xt**2ra{poIqG;aE1xjC??% zUt_(8-sH9akIA1Yy!Aux**>c^WGQxn&)w$M%aF4yG#Vihvj@}9+ged#rNE_^oSz*N zFiIhz2p&cQ20t>ij@Lu{-SE54_qER%`Y}Ugh`aX~$MB7bwG+UAsIz9Qx5WWX5qB42 zw9JTi9$jR!_4*-+h*jvqc`d&IL4UY0o6Uu5S$5+Y1ZEe&)pvSI z%5M#TE@DU_4UuCA?dyD2KM};1NXJZqJjIQ7fPTB3nMi?@OxT0NuI{VqrhW}N)==bn z9&I%se@@#=OQ}pIWWy{L=TN(mvy)dS_^YJRkI>ao`7HwG5-?V0$$ZKYaM>6Jcy@W7 zi&AROr(*jH@8i({=`veh{foA=at=nj8R#{S`UZ3|p4 zpjD%)VW;5Fb`)FzH8fOf$z%bZ5tL4Us?TV}LtOwJh0#~n|ElT5E*h!-Hl_8D+$FhH zAYhZ-0L>Q)mOBYw+;`Vz@bTcAPb=gvo(5Z|>;|>&BytDTLbyFUC>^o!qu`}Dhv*9s zgmJk4Po`zM++EsvJ+%zP`^nWI_@@H!U}ufKgN;_O+EPd{t)d{3qe|yw0N%uzRe^^MjU^9MizD)`ERC5j`~DXn_$|4rB>VNrdy`kI)SV8MP*|Wl zBJaJdf9zR0Ln<}+6NUe@{CDxrZxcs2*wes$z!oJz>+rNx^fBT$=2L@+4 zeLAl2jXjYCzO z>%YjRrhheas&ifQx*aGH)Mlm$cC)H%Lc?e?>!Y1Nm2(I z$9%MqS**j69tUOJ0G(IKGoIr8iTJM#SUkT#t{laGY%c?#@Rj; zAOX7e@5gOFW@ov3w^CW?wQC1zYLH3r_oqTYavLT78LZ9*_{in~78YHU4|Ll>)xMHJ z&9T;bySDdH?y&@G6AaDs^5ag?=1-*y>dW_nahMniPOBEpY<`WWdJqLXbXMW69{HHHlI2cbYzK%fpH7-?@da0VTH4V zl!%CE!|4cLcN#EymjY*)S^j`GamY-@=GKqu{WXd{9GHNTO;>@&L`NS6kx!BJEn1o$BOWT1VKU% z3-KfGs3t64TpE^QdRXK0Ti6_6dVMCQIPy8;gm_9UpOneOi4#$$SZu_>?u2yA zS@64S<$o+Yze#VHn6Z+_@Go&^K}tkmheaRdybx8Adcx=ZjOV)ICvX&$h3me1F~9!S zo&>Z|E1FVNf{K?V5UV`y5v*^0>=B1ZhyefrWAnY3s*=GyGXAc*v3Fah`Stxw< z=oc2k97TY-@Gdw323NfQJe7ZKOWufD7Kc>5Mqa)4enUS_OcnAA{^RU?3xp+B?AX^c z)8Thr1SX$_gixI#C^SH?CeQcXAm>X6oNU|MUUwSxh6yN%V*<)Z41n%)L|x5rDli8> zh!`T`g1e6~p6Q$8go(Y_ompP*3jGt~FEaE$Yvr(-6Lip^0ZUu&mz0D;BS-M$SOxRi z8u?Vk>fYi+TVOh7kPHZ_Dk$;;_THL6WUUBv&pCzn5;V~yX%6;w8)9XBh|2SAFN+jm z6^v%R@>p$tXWmtuqWa+e7LL()kb!tPNCINUYcn z09^eyAIaV3wNb?Y5M4v|myu?bz27PJm7B}PD1+&A<}peD?f!@Fuec)elB1?q#MX{> zedBHrRi&4jaP`lwQ%q>l1olrx-{d-i$@Rmc}V@l31Lfg;E$d5 zZx8;Mz8)FkV|q?)I<-$kW6WB@!-W8~O|=jQV{m|wGb%9GQh-8t5|FoXspC1 zGaD-W_c(Xuq;G69vj4FBd)uS{B;=hy=U*cQe*3`TpA@$UMUA5VK$r4t;GenWAIWWZ zzKmE)V4EQK5$&=^IQv)y5c3P1D6;M}8Z*)+PH-IU;LsC-2!&sFLEurEjM+?V*Q)q& z;iu}u%tPyU#E&?tyBu4i-8d|nYTfMbyE2w2wS&hcyP27wHVg__@o`Z zj&WLS$ zD+=$=>8`THf;0!0$aKv|{-bbUJP8rpAv4%_8{nk#;~0Ra&LHXOrSMqWy6kgfA6e%) z4~}tq@g%ujbVID5<*z8Oa=3-cA|a=|f$+U{dCSi0F{dospisFzWpZ-T8X^58c^FT|j|DJqrs#4=tYXMJ&Iaay!6!1%w~KrwPj%sCGQqxXVJYZdl#WD;ZfEBX^j>Ex|Bq$ijzPZ#+ zlh!0+2TTeB=n0KqID8eoNvZZ$u=`TWiGyBKgQw`?^1^U=YzR?V&wE#fTYrfe?(F3` zAt&Vr`yAUJ8F%HoiwkxcT;9E_P}6D$aTnFrtJA3REu7VVkbD@9E69Qp31dnKMf&hx zpp1$`ewbCU<~m>o(4?1%%Yu^4V~TyG}7f2MhVW_(%5MPqzGDA0sB zY&dX$$?sf$VZ!>8`aJI9yamlYf5-T%)2*r((thbzq8eoqreYTq99Hia_^UZ8humY( zm)4TXhWJ}IY$HXN9`iV)(SS+N916-%WKeWQ5Q5A#$3X!f@=`7KxA?5>DT`Us{vuGh zv+?)t{1ZQ(e(^6M6j$^J&Y#QfKX{u|0Wy)|Sn2jT%4aBzZ!$eU`MSJ#OSDrD$N zW$x!0)>&qn_%2slAR{(^dMK&+VnIXFbX2_>Uq=CfiZD!+12Mb1a8}AOtSiElFQZNs zMYL266BTB3CV{YNtCJ};2T)cC17@;!SEa-{XzcOpiu}RP-e`+r`K;>x$Knfi$(|nv zYD`=IKh#Xam#V0zr`0Zf_;|Ls_pUJvdNt&dpV%eYX8U$D7CD+~-N-)I(IbKL6sK-7 z-lxZ2q8U0mjfR*BoHgedj6nE6RFk0|0_R^e&ugK034qXBiS02L0yVU#@nIagukd>- z^R4c#%LlJMb4)UQkZ4;Nf4DYFT|3WLZK+a2;Nt1Y342WJryN`Le>We;HWU$5aM^@AGmVbMmgU& z=m#Q2elY9!-$BNP$<4qa`9OZa8{rLeFp3=w;U zM_ro@_Eetg|Efjk&IQ>h$J;Owr_9+0Ohgf^9Hz5kp?Ex}@U_%hXfddRL*4eya1bbj zgKaAbXH{Tagwqw+@@uF^iersJs?Ks5BFxD4Zl#_fmXU8cg9j>EL= zAW1-sG%sV7%dyDU7tim1wy+nfTo0){nuee-ASyWRnWUF9)^&3mnb=%fzJrAv?ePy0HksMvj&HggOq|=yP`a$1pOZYyOPP z49l2x{~Z=C(`^GYC8uPv06G_8ijGwuO0Jn#|7j7yT;?Kb?}xBR?wv_DOlT_|WS9id zLN7r6Jg2+gbM(>|cW^qQJmaVEsXyZeo5Qx4G&Y=l0_9zwtRam{$?VH-47~XWzVQiI zyU1$dW`8L6j-JYB_-1PWLe$%2?87+|NG1#mmHWr$t29MaKs)iWbc@ky#Cvimow6{n z`I=t;n6hN?@FR{zAN^~aU}f1pjv&TkNU|K^!gHWS3*szOEKo%ZaI{7zaw z0Jj#ThE}>1tx%H&k0i=YId&|-8Ti`AF|;8v` zzglQ&Vx~depmf*Uq-%NJ;Rar?-3NWQ5BeQjsmu@Jya3Ds}FuY?%MHH;1J!DhCaPEZ)& z@sDJ9(;_AT|GPti6@m+n!BT)o;(=e8i~xxsoCXJ_l~oP)GF2)|5NLSSZ+j_D6vEiD z9o_KgY2ds8;2Y9l_M;68*_bdyLroRU4$q@yHFT0hKxoW?7G032!$KB2Vk+qgxRBtl zVu2@oUT3QeP!fOqfBSUY_0Obx?;NJ=BqdZ7vSHU8$;!}FqdCKs2p(-IWtTaLiZp~d@Z%~^eLASZQ<>T2sl%HJiZUKz1XqTEJGoFtwP&vGX|suh|X? z$qbhRvE7;~hji@A2Iv5DIM2WVS^QOap*WS}dlzY|&ZAxr#DrKUvIcZ~MmbHs2vb3b zvzXlysL>OggdIk5ac-co{in~~BOe653fac^olx#NA)G66gdis!-qxX*nr~a&^=B+s z)&TX;pq^KyPyZ66(ytcOC3^lx0*Qfjqe&0rhXNAD+5qI+K=8wyp7 zi8%M?IWEDQC_{B;M?DQ@Roa}S8n6kf$~Zhvs4XlsD4XM9FPh5~m|)n2z%WMexx&_| zGG|a@dilRvqeDW{I6MCm=pE89m{v@wDSbIX1!A=WQki;uY%a8LRSqs-<-GWzEEuji zwgutY(MN!22j@IfcWu?u%2RFK6t=O-wzWJmOKgMUg_)M=uv@VjwY-O88&&U|@nOQH z2ZMF+o@k1vbcdg zAiFA-5pXRv!$Q{d0*R-L80lKlCxzijg2lFQXAAx5r|sTO{)XOEJ1Rq(#F}pSOLy-f zue2!b`7yR;PEf26772iico(GJWG|?f25%GicPkA9KE{7@ST2NzSHI})7&*VY@-+0g zoE1hGPi=Ef^#;aYPcjBh_*>txgr6-M&Ql$9IH1IMC{MjOUIWbNSu^l9jw%9Q)}a}P z%|wm}ljfvUj%Fkj@B4kW{XgKr5NGZ}n)t)N=YI;~YOR+`&7^A1V*CgZJs3or=WfKB zIXB<}y-WdDD}D#E<@A~}{rBNrrvPy_HCt^5qELlM7_J0*VwbnDq!##p0df_m(_hcY z>L3x3lng&d9pdWhS~vl2?caTeAq)41cGbtA-<}Gzz^%Hwj7K+RQ&EYle8>0qd?k_{B6_w6} zkEyxqPU}u}saFUtTik{+WZ z*~rUZYT!u;h7hp$b3{V-fp=0J(r^wCfUZ*|-c|vI5Km(mR%}CK2u5T~lC4w#*oMZ+ zdPg}F@dHM%S3$HDVW9hT0Y*Rljr-c@w!or>y@*T}w1l>F;~}rjRRsqNQ|wF|kqT^l z#PgE%BQ~EvU^j(0K+_A(sx%(jWnr;DvwJEI%56NsPOA);n0PnLqW@NZ?bYU@Cud!{ zezYME`SO+FKzy4VpWqLK&hSk+`?hk$=u1@lS*+a(p3w*^iiB7k(!;pG1=PIld+DhY{-)6 z3>zXVI^58agrhsuGOk}Kl6SJ(sh&L?}(qpR$aZ-&VU?ZVHn+@5G+~? zXGdW&kqRg5m3U3V--}u*$43t6J4vUev2g8X34hWXlR<~rrZvj-_n zfr+si7KxL|8P2i4A%4l*>VAXsAXIKrzK8-c(1xBxphK~8syc$)+b~hURhzOmnkpYS z!D=z)GF~4jk6%=xhhctzFLm@Hgi&!vV4F*WR!8+y*HvC9Zq4E9j^UCL)j_w{?$Ymn z%;-aa!!KFP#TmrDIxdgLif*q|i_PjB&W78hq+htD7yzGG0ACO$U&yKUViAE^MDhE> zWaS0KeR-4E6>&0+VprL8zsI)joV6TS9_?#1RE{5o8SrZE28$mir}|YI|CET#lP>^cGXA* z?uoKo>4=^f47C~&SazDF`BbITDAPKz@)R1ydS-tHLU2Z=AincZJanMx7$5j|)f9k! z2zu7-i7k`T;KgLdnH{`gJH|sCYC7o(K#c`GyDn@9+lh;t)TW1EP~6kkK%fP_PD*O9 z*>mS0l#C{1f~Yd>;Gz<`A*>dyQ~_ovgQ@V-tip3F(DFKeTxB)|f?T`dCIho8ukCX# zPhi34P~iRoQo|*Heshra1o9@oU(`W{Bn9qQ&{c`cTjP_W#%eE~${dOqZih?V)8Ah+ z3Mq&JIrZK`Pg@8}Q%&dme$l`7U(c=&DO4sNMABPAu@Fvf5FOuP0t|;B8-%FVO!JN@ z-5jJth7#nV$eGHRLEDjriUk{R;iLwtVmY0_Nv>lhxRM~6K;rVLH$>Rya1{b4>>3q0 zM~DHPs=eYr??B7WMM=?Z$anc@Wf^pu?nO(9R3u2#)|NFQ4v${I`8tXbjo^Stf&T9b zeboy98)P(5*j}Gre%J)Q%p5ZFs-^iY))IFpTS&m9bt8)lfeN#9F2f2@i&^?s@Y5r2 zj-JaL0ABsNtWc<$6IFGm`9cU=qt(rUuP<*N;g~YkExI5Kk!pMO=cM_CoP`OoBBDe_Np~k8H?DY04;|voWcE2^%j%G0 zu^gV~xc<40iO1^ZNY)#cOgVL8dF!gsgm}_cdtRqvba092Tv@#0XRsZ_+*)3A?uH6++V+liJ6Em!eCAr3dGpBQH&o-UOpE zU`zg~=xl8%?cNY()vhb&yXbgiSeR2zD(nbvW&VlO(+>zw>JGz@4P`q67g=eR9A~6i z1Nq7#C(p6Ma&bg|kWZs&aPvHWg~*^C>MA<(5=fvA9!h6PZ2WJr@&6CeRf6RZxzfew zo`bqPP?+pAOmH#jTKq=3+hm8(+&~ymlen-VPHf<{;LKKAe7<$zL@)zi(c+LoXr$)S z*~Y3zNQ1&bXbYns+TpZ@eF2PL4u~>y#L~{)6EB(?w28%b)e6o3?=SEF<@4*KW`A>M zc1*>O@gL3|d(-%|YGd06C;#$m?<`B7IpwA2A`aC={ncXXsUv4*{v2}f>gT>bW)nX? z_x`SP4?jEi&rkffyNxN9_dMu+^6J-?A8d`Td3fD5u(~OwS~6hF=_Kh2;yb)t^xm?X z+G?U&K_d!_Lyq@hEBk0w9^CV*EXDdH+Tp=rK{bG2$y)p4@`T<2j*<5Re&0lV0ojp#PFuL8 zIn8NhG?9gSgSx*$c0T)v6t;i_LfAw_3ypR7i6m_Sl+&IGP-av!O+DS_R`>Zh;JkSQG*5KB-D=O&1T+ zs(@?(%dRO)4}2V0@^GGehrGx$D>(mVXtm#-zyp$j%SUtqI&6r!F**m?geK0Cfg{TA z^-LNWx-#*GUB$m7U!P!EHZ2wcKsH@ON{D;BHd7^h4Ug}3txpmY5_^h*=~q_r0JMyoWQ1(*tgIr<$a z5mY}$6l^N$b7Gb9FZ#A*8~i0vT&Tb z{5x)744$CHnHWeM9dbz+K0{IRmWPF3KBk`}RCYhGxvN0z>e2jfR}hjDJ{Q6DZLe3KOD=$HDjn?j zxm>K2qqB_`D2P#C3~OJATu^KZl#-J_LZQU5M`G_d8K`ls#WUV;M3lsLO7Dj6wi2%% zHa|bYYVRTrmu{RqQ8-P3`w(5PpkbeQ8f%c|W%PF!6o7!;I8nqoG9aO5*gpbOF?QmG zgQHbuvdS&S*~ss}fR>%#C`YyHM1Sh4F|IVk8LX&B)v$`wrqyus8v5cJu}i3xpu!Z8 zULK&fAcPZBP?a=C63&4DG6Ub5i6_x~nB$#j;rA}}y~W9Fs!W&d;Jy=lwZM=#V8HL3 zoyAVVdl=W0rM$8Ol#(EYR{RR2LLR^~!5acl2q$H20h-Y@hX*j&u?<4Eq+$M_N6eeF zdxJgUJL#j=}+|fBOrw2kaV6z~ugkvHhz>`0D0+<1oktaQFTa4$WKaKRk91?sGxdLA5K@ zdj&<^vT65FQMy10m`ffIwQoH^_k&~9P7}_ju?2lMgc;lI$xY~8g^zxhgl_n`A0=o) z4Ht0)#Kl^&e}D_>VYec{eipxSb}`CF9Sk@X$r%<>^RZwY&nawAZbZ$7 z)A|hU|Cf(ux5KD8_3&iil*cME)w(Y8@DUgT&1St)`Z?S}7LAqF&IO!divj+6j)&7` zk5fKm??B8KejlUN*;=W}Ln}K#HO9X)wuKJGwht&Rg~XIxA2h3NN%#;o6N2}rt)+6jplTf_2BjAkZ&_QzsxL@vf zlC;nw(ya;0)C-sv4OZx#Ecgb^NRdY7RFwbf7}33r=RZvasu z+MJM5C8o+rGa`xvptx>ONFo!E> z!}d8M>Ug{b#Mp5SngTIGvEy9GL>U4-+$~VW=AoH_5FwC%oX3r@pahCS3A>OnfUb-W z%+h|0RRbHMO8vYjlXSIcu#QS{zmX2FU4ZbTMZoZqrNzNT=mkihLl`a#0>JzN;7Rf^ z!s;+IMbgNnxd6@IbZ|%nBMM;)4wJo_*eOgmdcHb(`oWlaWkqJb)xq#4ft`P+CjxWfDucDFniW-J3O<>CkkT|<{HV+n%7?sEIKR&dfAQqUrDXrayZaAzVgpy~!4hxta$CYQm zM${7L6W?@cGOW(#7U6*zm=)PX`0~(4l6U~4zXZBh26?z@J}sYF3gAGVgynBL%o8>8D7EDbFVvK3_UP@w=zC3K1C7Ga<{imr0bf}cdgLJzlf=U#(E^N08$GsWI6|)CaVkh~8p_AfUxi2^ z^$=tQxGib?gVJPaxoDTgDuI7(_YS5WQbXfrc?mW;&vHQ7#0nnEb8gK4d;9a=K4<88 zGZFCEfLf0cqrvwCZX{O=-UI_4f)}C37^C6x80oSefq+^Mf=g7-0V2!+c-D?UN06|; zuUoJu#0u8r)3bu5h-Q0(x>%WA#|)jIl*-^k-~9xz#BZUcKF2?5F?FJaF;ijYkQEcy z;SPMoI+&sEFZ6rsj+eOkZ}*yqFB%>8 zA6I>R?)5Un;tMv17)4pc`ErCeVRycM#dkiNH(QbujiYXQf}x|~2w6vD8(Bwm$QLOT z!lM>8RjC}$FnL*wV%d0O?9}|1G11v$yQ5bn_2)~Q`{bCaFGv1<%PYhAMSk_aQJt!O zO|1jgN0=x=+KJ|7NP4>3Qy`Y=v1#sm=re41WJm>9m1g9)-QsB!k6O(izBFKTrfE)|1K zvc56#ZEuO9c&{FX%n}-gm`o=VPdbnCjY8$2xf`Ob>?dftpJXHlyC{im$vC{xbalvu zG`FUDDAMBe>;S0cVWPcLEgLFa05*Y;pS%khIutgSed3WWnrR|-W}yc=s{M5yZ3s9N z+6pQKZY;2vMe1p}gif->!RE|^O^Yt1r40t>Ly{(gcD?#(>PQSD@`DFvyszrPfIz14 z9V5K!e$E!UvsK*kG^It|0Hz|XadK%cGG;K%z)*~EAZ=*vR(^gsK7X3yJx~hxVC#yj z^C1e#*Kc#qcyHv+?h)O2{^6TatG_t=uksM5qcpP@F5vB;#H$P7F%TFcu>~3oM@~aU zbOf}s6$E842Kbm&bBuB4;;VX3cVBCGo*8r-0X}gtfKlN@Kf+{H_p7S=M8D=5_g9QO z@pr`y#*XDnGaW>$-u3;j3U&Ls3+$F?5di)TJ&IK!O&o-=ehgFzb$4m&>bjlnC+8@@ z5*h23elO5QaA}~D=jbivpA4>rVQ*hvcPxgN7kevmB7${kXofn708XLsdDD0*7TnV~ z>iA=fA*r3q)GK$b@mznqZ#r)hI8txU?D4T6^BTgO=dCZr-97>eu%4!wLN5z72z*BS zbpbWzQ6=Nh zkH0-$@Twg?83G9Y#^We(JG}wMhctd%IvYie8%Zu;4)1FG_#TkO^GjxQB>-I}TE*>& zj^b$k*O9@f5Z~d?Uu~OA+1ACR;^6It z)N6so!M#hF!(_kxu+%9*QwpJuusNQkRfrEZ6~&dO*`&K!4qQtyiks`WWJ{oQ!PV)L zl=jSwLFM$8*S3cB2E+xe=774=M6y%a_w+?qJQ_E$bv$waN&2IRgN|*K+RCau|DL}N zGPv5x8aNpxD?Fj-o2Ph>hpB#p7W-Bh?=$FXNip9eHq(<+5km=db6LcRaj2!KKvP_Q|MCvYK1k?#|w!Gx5}W z(yEG5th=_?*+!@G;(M(RpS;upXlZ&?>zoN19a(PnxU%T3dGHAS&o)aZ z+_q_XdUi#V*#+xxW4k)3MfGDxc4-E?j=pWO`&7N5ZgiHp`hiv2Dv#~LbX;2p@}^B# zBwFd7*w7d*pCe^=$y>(U{n3SgEVcbgC9!;7bn5d1Q{3vmH(EGg?iA7$AGxLaZjkks z)-xaBA`4tz{Al0%RbR>$LvNF%&n==-YHmerNj?zQ7nRg;aq^V{H&LnE(zxAuPmP`* z4NH3Rb#h|0`rAvOnB_wyZ#i|m7|RxzJaN0c*z3I!9|#VvEa`>#H?l2@r z{{Iy3B6bUwIAie8s(d%>>L~FU=OelqqNm*Vk!)S7iTX*;K<6)m+_t+7*8FfnRP4KQ zpmJcPYyW>;YGn14x0S9>>io&XI-$$YQ_Aa+xHGS!{h@rEc#3mfgV@dK)Li#@!4sWV zJXNyJo)xUDk~yWT%)PYOxoyDiNlZtaL*+G><_a9<6>`2KRMO zL_Mp8hOl&bi~ zz}o|C!iu2)7K!=wCE%HKyjXA%+GiCg93%m#DGeOHIS^K5aeqfqQk?vUA&(9~i@5Yv%MtVGS=6-^cz4}@b zF&(c(6v#+oZpO0|r}+(C7BTU*Th;e^u_ZDsh0+|3;+IC2Ok9lApNt2)r-8+2X~Gnj z-b90EzBe%yYA`r(?-5sgb5+#x<8A7nmAH1QmdA$_sEw>`|Cd;{(xEB9eEhuI2X(|s zL(dX{!O^JN>u`|Mrv>s(^RdsSjSN1cFa2P8gOu}Xui7V)^$p+uwIiY659ikX_FYut zh3a&hAr8jVM1?=t+KbN9mp}~d3V1s1M*Uu!`J*VKYtJzmToBxQFH}&)K(vv?>E%2# zq()y3+-xN9P=4#ywPVVU{Ld>q?J2U`nSNuzi`&##;sAx&+#^07vvkh9UNg>b=f5Q zZi%ls^3sNVna9dDrteBtoA%pRdE=)TyVOZS^YIy^$Jg3cF+(#SjY_tvDGLWOJffd5_ zx2q`mQOkA=)wv0W!2QT*;xWZx$c#=F$hTU6Kf%Rr{z@uEo%ke;oB*nDQXe#-4*xJF z7hgNllJEHD%VWjGp)fQaVaQ8n9u%b*P7_WD#0u6-+*A3X+`%!oa5@-Wz0BdghA*te zsYYsG$cv!+fWQ5_UdyHp*OnjAC&mlUVUciPvH71oev9`5%V*p_`H_lak}`OX$!%obQB>qk(d?Z)}R8|*)@+C+gg<=^k>k?@y2R$LGWF{_WD zQ=O&qUP3Yi8gK@A*Tfe;RPj@xW#f+-U0qpf19#(VS}~jU*Qa-SZ)CmGE7Ieap$3zG zx4b+(SS6+LFK6HTH``Js>py?38)}02n=$7%r@1&m5r$^;`51Fzc?dHtn{OW9ZJA%5 z?6*(pt&3q>!w`DTw>f*6Haa{D0evl?MaO+M@L9lrw1aB4zVBjcT36oInWzq2tkpT| z?QCX`>Th@AI7g%f0{&pjHsNdq+)auoZyp&3No0$XYXNpCzzerH%Y2B^-tv0pCWvtO zyB<wVMy8v7ubO4ZpC#U74ry%a=oT z0rBM$h{3bTOOxz@4{pWdf&3Y7`3AIr5keq;f7{B17%K^Yn=fffisR_Yt|9yUy`SN+ zjFce^k+U84A_eH5cQVItaAp^EIp`?8Wgr{Tg3Jdts)Dx!s5U3ej|r2qEDL}`ElN%t z5+&i=;@qq3>XreHp?+l2^B*ja4oudY!-R%ot}BjB>~xHK$8|qjBs|XM9|m`1>lq|` z=~OtO`9fMpU13?IHO?Wb@<|>vcR+h~L&H2{yp&^)x!t`?&zU?3%Hk~af&qs6Ynn?(_53Pes+=?<4M|CGOA|2K!Q^iHx37PXbOFTMX8z(~ zQF_+nO(t?G2LtcjG*MAa4uOkaTXvlMyzHgvZdV)sQF?A`<+X;NJtd8?n-n*qf8%9t z{Oa%0CjpLf25zkvhV*vE#S`xaM~fnvFgEAvBdhubg1plMImqXp!y%r$;#2Y_X*Uhb z$G&yJ%oK2T{8}NzC{B9bGTrTQJezP!EQ%q8i8nf0bQA)$xf7B>*UP%rj+aem#5hPSn#C#)>JleNRV_lumiDu zaTx{G9^#y;)Jy~8`+YU;)@C1k@Xx(}@hSV};Rgr*vQQ&0dCI*M)7?(W<4+|n-?DXe zO2D4g7r)=N_36)t&XjEEIP++_#&nG)i;HHnKRy2G;t@yQKQj8ZshfL%bjQALzyA96 zydD>|DNEFX4VqGm4@4I9HV>@(^Kxw435U9uz)W~J2D=t>GzTuRoQdG!q;cyq zK8E!tEVz&qiMj^EWT7abQzfNAhf z$%T5)^)U;8v%=?KcT#L8ewX41j-SB8c*ddsOvOLgamEqF$#0L@b2k{Y4nOXgYmHC@ zA@*&#BEdrvPe2v&Fh zzGcmUYHA;#iRlhKnQV&!?QF~O(hiTcNxQ5%q9vn~WV?eMO^-k5%h;&D@uccj zui9VbrBD66q^j@xKpUrd2kN6MA+(LCbiF({)!(MbWlH&;{-pY@aaqQ#sZsg)ef6{a zY>P?*o_E^FUly-CEae}%qH=J4Xm5|pi{zU4Nz%F1a>>(u1NI;2eX%(`qD=S;_BRf$ zX)fREeVu=`IW8|>+HUsn9r^Qr^}Mjy#CtY3-B`Q#z=0{TYZ7{kKToPF=&sAGUMwdo z?XojzM`Urm+q2KR%J-Dqd@!bTdx>Ixpze2HT+!RtH(K;KA$ezO${5>>(a9mP=N?xl z6o(z2>?0Xm3kjc84XzW|y;##27>@w$Rnyhrrd#bI)=OT9; ze%gHb{&7)J^%Ua>Hw|0&4PDo+mDx2(6@~0*2ym_$_oOO*MzU4HzNBeBmHjYh8jJ^* zk+aYsz3;$;l)?<#m2YRDd12WXjFS*|pGAj<2M5Rns)SlL$Z2}LH|b=%zixhhNBV?7 z-{^FC_nxfjqJHy5mh_S&mmRZDt0 z!aGFo`OnaFsQl7j_^Dj&slkV0JdglAesQ%-@r-{KLb-(?U!R^1?cdWal>wdk}h7C6jhkoc_ntxb;d~(jD!}rx>>UD3jD?<0+>vepC^tvaz8+ za;tB$TW>fPu~JEM$`gG*mzw3uE}kP!T`fsy{W?U|qG4(K>KiAG_Lj_Zva2sw{;FZ= zmPq61i_THvs)F{r@!j?A@=3GA@dcmH>-FtQ>+hMAS@$h=0&bvrw$=`Xx{H@Z<)(=; zy9PQ=$s8VC7Me83)h*s?t1CCy)veo{(E6q51FLn}<8HWnnMYq$sEJNfP4BxdD!cN+ z&onB1?jeUm^?eETyK>A!=T&RuSeiyAUr~5#NyZ21q2n#Yw~X|tjmmchz^( zBFROG;>H-8x?c>Vv-C5koRqz#?q3~nz`^0)S2VgF90+ykZ1#?8%368Bp=FAuGW9mNUgVff=lkEc7NwRd47kbgRciqD6Mxn+TU^CxBYID zcdU4H^1?)^n1MY>ZQt*8a@Vfe5PTiqthQV-*zcHgcOJH>pA0vIq*V97528L3+s@!U zHv6m$yOuQ-hd&9DS~MX*RouRAywbef#`NQPk{{RvM+GL&)i+#)Zz5YOnP}pBJ#)(G zqc+KM>OBwUi=IZASVb8;=(D}GQ0#3|;b2_lDo%Z|WT!9xXXVuV^}Gg?Um9Az8`-uy zO5WAFd$L3RE`!92hEbw6yA1~G3zxWgk5czm58AiOt2W1ca_~IQrJwm$IxQbv?wT%R zP~R)9Ul?VqRureB-QT|5DP;TV!S;%xJXhT?72>ec?CvS~jWw59sn*`$1G>9A$mG_mFWG{>8V z{Cc}yqyUIE+S@%(^vkL8kTs$CYjQUktoO_7b5%-Iw{@SP6|cTL=++@NRJgonpCNSF^Y5*DKfxd1V-v0BV`zv`S0@% zO~`)xU;p*bji;UQ6D+_#D zpLE}g-|>C?ZQwkWFT?Ah5K=DHfvKpjWYR3<%DsBzaiZ8{iE=YH}zHE_Ry|AVH~RjI|;hs6WcZF9nHBtM8)nLbYb zT&bPykcGn|9ie*z%h5GltQ))8SnQR+^WEoEAlRE)?%p4%_2zfol=}SAx!i&!<&yX< z+~2AdZ}79UcO4$)%6oqnv(V|g_u1AK@Atk~F36FZNrp;z$;H;DX&NmL67GqEJ5pPN zGh0$G+>VVaxneWDoGU2X+jiNi6EXN$jI!mg7k3MPZ`vKGzz*-;*T(Z$GOa6BFCkl6 zHYW{z6jpa@aP*mJQG<3f79|^bBvdR(grq;SAtc~Pr?4t7cIAUU^-bmt$NS@W-nl0d zx@zjGJ#!C6u~=TUyN#QL(e+B#zT&0U*m$x!oSs#yzUi(0cKNJtJJKBt)tesIsr-I* z;jzItp=+BfH}XxYY;0H@+2gAHKd2%I#Q8D$Bah2fy|q1bV9?GlEwLhP8G1G9eFoA{ zTI_zkY8y7B4Y1H&X*tOf&bbr*rYlZq&%LBATu(=9nPYU=&*^Y(si#?OJ56h=p^EW(8c(SH~7n-?;_tr$U=f(7`ew~LT zKm28Nt+iTSv{`#qx;pPn?#6f>HoH}{FzJEAywsOp%^ME68_Kcpx#KClg@Gn@gWcYu zfO2o0@?4E|uOy;=D}USK#e0%V2WLFC@#ri3i<)_TT@}(_T}ks5FQMO=>)&x#xl9iV z7gI~d0u<`#Se{YBNR;r zZEWJp>{3P9w{G8Faq8DV=k!&n27z;UdaLZ}ulLd>@-_N_;Il}VDt%HBz$?S4z{G)A zax|ciMwx;PRHf2Sqm)qiQ)39evqqpIlY|8P<(5N+qcs8@s_(v{buLi_kzXV%6AP^F z|9UF(b(Njd%hlCNDLxH9{Kep?dinA0AY=K7V_t9x4FqJL9vLrM5PR{v^)MJYo@5nE=|vH}ze^%1y&W@vcb zmAvOR_)j0#ic6)sZmrMNjV~E9d)+i6VS|3)ZAT-c;eS*o0_GR(WsA%#PcR+!wf`W7X#*LWoHh3u9(JC=J3xlsq zeh3)yY=)}2bf|52aX-&b$HC8u1E{VQ6^;*x;*6g>Ou~CGpy6hEy6cTNA;vi_C3!cA zGSL)||E3JY?={50qvDvU#!>X=AxRc~@L zlnezZI+dJS(sMtD^&*G&sJJqEh$o4P+N6{1aM#|iFRf~is%bAzfz6V%vQ6{0ba{1L zInnV=WOWSZ0%yB>LaA`>ho|b9>@Rt<%eJ+nPnpbf z&2DKZkk>EY>}t|cT@xc;zT0*1pC6w3r||MWuly_>sHa1z&HAvlCU3LOW!=OrVhLAJ`#XPTOKGt*uX`IMX2@n!HF!M88hjhudC7dS^uf_oAHjDSf}isqnqkJ_d(MLgc!PUV zc4;W1^!!Xt|6gBzN3naKOPf*3t7Rv5R#=tBJ-xdV+iC7jW0TN=D9+{$^0IfgbKy_ATala=UkbP4+WXnlo7QdYk}U1x;lFe_N3-AX!?^Sl zXVlpS9Ia%3lXapkV)L1fpp&i*OXk)&ZKreiW`FYyoP}B5XO5~J6Q-_G5}Rk>JXYxo zEl@p?ffT|B6)x+%*Q<}jHuY&)t9N-;^>Vfbq-FDW^X6SZiSzRY4cDR>C(|FZcv?3y zZ^pM{h0)tbXdZRfaJg0H*p=&&*^}CAlG>a7`bx~=a#{#w8a@B+NPn2#`s}tdEdn}i z)KShjzp<}w$yGnkJZ@ih40#Wbs<>*eUHq&MPaVYoLj6FpvJ1CQ*M|isY2>|x;k*(A zMdI+|@66$#DRPPI&-4RHLypd(ejvtM-27&_f<6geFgZpC2soktpoY^}!T4@3`Lyd< ziQb)dD`tI2l*u3k@S=}k#ixSd%FZYIs ziAdI~TlO3}zah{vlrK3zq5*(m0xPi2O9@p4RajZSou88GY#vA+A5i=|V2%Oz3+|bI zvcJfvA=Bc$B~M|HGRyBF=qiCy@q{4%WTT%?q65Ypg$7MpyU~^s`9e9lJE45V+z9VH zX=%iX#+R8^zdfXKf1A&tBa7YJltsO-dF(h7vuK^w)d88R1s&q(7pc#6FI}3=vMsv) zadzW5t-iXQ`pG4d0FMEAcJTpzL>NM}7CX1;W=XiNF5CNMXa{@ncxX>c>ZK@0t52WX zTpQ}YqQ_@DNbMzqL#q0LEFr&{N*qr;vnbU(NvD_K>_@w5Jrt&O=IAxpdnwNx8csCm zkXC&1>KP&#odhi@W;M?*swRl6%5+$w41Lq3sm^x`;Sa8JTV~4@JMlgVXnAy| ztE~A!`L^n^{VKhktuK0N-U|uq-D8Ad!J>pYl!oIeq-%&(yx;=MZv&3#!&0c zZyO^$d)Vwvec%Vuu*=lJI?8XDnX>4YlP3px5JBZJbkK!FMKtH<(W6H|#P3#$##gy- zRVhiei58(UdF-i9;fJ{O+nZAf zZ}DM?dz=0LWN@PGb3Fn!`-?Y?~~Pl6Fd?U zQq^@kuKKMha^r~WBVgFFx(fIGBNeZKZpP<}nCQq#3Bt!kkP-q8u@xZt$eNEds0`%T z^XI`AAvGsLk?ql=+wcfTx=&*U{Nmxh-Oh*jnao*J_6gIh^<4mC}1SkSC{4)8$RhI0$8Mjv&AD5i0LYiva-B2`~ z)iN@gBj8IxW0V#3!^`f%0fwldM4fB-_a}yjeKH!rjw2xf2_}FwQ`^ESN_@2rEek|M z5!e9X&>y;onm|VItSu7+r_3$Gh*!kPS)E?<1#Dq>f!Ebd?L6rNqVW{gpUf;df}{l; zsSjGy1BnYw?$DqBG)itHBy{mqq($p{vW8WD=?8}^W@quD@#d$m@niaA)Lx;v)o6fa zz8YT;%vaIdTsn&)N4~jhF7CfUr}C^1Z;j99RG?Gjx@fNe8imDcAiHKS}GqtD-%5^Ke8oCA3s4F?ap=TLIUVWW7HFU zdhbyGfqT))gr7%B@{KhXCqY=vtUTvewYS!JYamJ3F^vjy;$D4=L4cz#EMX+^`oRNY z_9S?0j>#a;f5got^~GHHO_Sz~u`vO$Bqh^3+Pja)CQjJ2HdsJpx}}2q&&=RP<5Gpc zA9Cd&1<=dwqY}{!AV(0|X3b@yr=sAPF1RafySt}^apNLuKGSpL$>ogGj9BS2wYvXN zwa>Yf<|<2_T8!`aLv!ObVXPfDuE^vSQ1SRK=+Pk(_{&F*6%qjv?AhQJ)8(^z6A(8x?& z0L)(*__G}Yk<1-VytFn2M~z^eTBYw@sqe@g6-*L;gXD--$J~kgPmiI6@SVn-w0uxws%MiJr`&opuNJXg0l({XDIsnH$e)YVPfcs#5B#(>;pyQA#3M((1ue()?gLS?gey z<@3K6py8uSeLm{X#KS0-!bVHSq5{N^T?H_$BAVQ@{|S zWD0Oma{_@^i6$|TVDk?yb$s*4CB@#lbElXl)03K-(hf{#3qg;N83&J>SGBgn2bF=9!1`|33Y- z@k+*6tMSk=viyhSh};9eZHGKh1sVkM1C`&YGXBPUNC|I+$hpc5_G}Yh7PG%$8lur( zWqUcaJL&lvZXee(E{6=tA2@8In@P2cufp?*!y`Cm`WL}$i8Tk5+@A!R9T1gCe8Xk8P z_NFw;6ta@?W;l(T-?k&Y^{Ibe5ml4WhEOM@nKu$Pb73>Q0@jL0cXrZfxRKdkW#jMf zn~cL|E(L!}1cv341Jmf8U@q%U;1d5$0HNQ0OR8>?Mv^)hCN0rcC zWEwh02;R)07jV+AfO!Ia3WR$jXY(uHJSO4E!Mm3s7zOeCxSq2)GJ2dZB>EujJ_{nt zz30S*Mm~Yqdt@*%Q~T{V{+PcLclXhJ($A1~)GA@vwwK(z$PWZA2(?2;$vul^n1ID# z5I9>W2u5YPlrfWtZfOGMB1Xd6LBUr1LaDRVj+{3>;O7iD zHcV(F-|+)gNs$mt?3JPki5&B6_Wb3$u}~ei=B80}6cs!qQHGE<@j3|IK>I)~A$ujp zco%^if!djl<)Pk0b}1sOGXgoEZpbcE`%5(KzEqftpF*4tXWFcACPBEdaU$UtNw)D% z0xdDyfOIxgnUQ$~jdBgI-WG^mqzn#H31+9#gy{9J}AP+`?u~TVIc%ok|<(?o|SuO1xR}lIdKgGTkg5zq5^rzW>QcEuGi?M2n zc`))Dy{nocd_-&1?O!iytv?iWX`=vRFBs`5GMN3g&OSACuTjf#9=|tJ>&aEza>sI_ zq!X!CUj;rCR5m!~_U>Yq7g>GX^QZP}sE!#%ClOB{DGn8RuaY(ePB^(+HSG2DWPG zKf{A3N*YZ&d38?J>EZ0%mPp{q3xhmI@Jn0&*}*!LkYrW64Fiewdteyff?0{B(6XjK zPt%R3U_yrtc>xC3NE0IpG2bQ#TUbG#th(W{lkQ#xH?vT6XKS$9@@_h0OGetNzUums*zN+1= zekIacBG|%A5HX4@n8=3?odPq ziomG(__SrpP!%urzjN!>;dOc_S+IAX+)UFwpI&p&kJdcR?yE9q4=<(ljP-P5`@D$l zqJ41Cqdi25WD>8)dv$*qNMGPEE=Jyr_?l^TL-P4cQgPrO4SH7<`8I@GOCt^U9jr%O zA$w7HbYg1Q1|F#8H0P51n@Eb^GAN7Y2<7Sbg16pi5#v%(C?CAhIiUg!C_u3gGThH& z-;m_(8ogz*-z|D~P2d~Bm2Qy}g$E=^j43yMyh0%*IHVV)*zAfyU}Obqdi3rVux0~c zVzY)gV2k0L#SFT~ARM6=mZ&#T#~7d5w@)_H^p}mzhf&Z1cB3K*+p`Gi8Dpb%Ir{LY~k6fgBVO2wNwoUtBArc?6t#h@%n`N;c2dCKg~`P(EtbH zgVN(C{V@@;sWw#w0zw!E9fHm%Clwi2>s1N&nECYdiHP5I*%2OQjGaG5bTr{n8qxSl zAQ3lO1_Go50Y`D9P?}AM3FCK!@S0ZVX>uV=cREcnAUpChGFza}Nh%?-1A?t~nuhiG zO&zi$O&aX`FKRw=YDZ3kJ%?X+Hoz~dl#DoJs}L4CIwM;Z$0ZHDL7}`FZ8gWm*j7Qf zX~-{H>~4RzH*WgaJ@aLAkXEiC)P=}tPI{ASkX@gj0{nB+>5S}O_|6RfZ*bE0#?>^j z8$};>#wE=nmGe0coR44UdiU{KpF8R42a??j7?^M!{2Cq|2m8sr2hprzpE(YBq!zf) zIo03Ze(uEsQ2gC@-(5Vud+c)M?&Oi<9pirTbj#dJns7Io_)2QKh4N)I##mH-iw};> z6B$fWWf*`r+3~YR_V$PKuobRR6@V~+isqsMr4$73$*w|{jH7OT>nzfuJ;gD+dQ(X)l8AiaCBHySTdt*L@_<{6r@jQAmDt z{Ow0?Fq}xaRPoUG4+1WNr#z1jW5=pVIbZa&Zqv{yRh)CX?B>go0@)3KbMFt&deN^v0LO-2|_ny^lMN9_%?l*2jcubU+RMWiiM( zvR9*dC5}ww+W580j*J%&YVgj?RqRFiiga)dNsf_`28)DzwE$c>CC9P@PdI$l4l5-E zC#Ls8(+QVwm0W2t2+Gs}<|#-4oC+pyr!OZwl1=xj;-e0-= zBNj0BBclspySY>YKwGo_B%mSg>VyYk0UzxNI~A!uj23i8w<)ftc_d#XLqagke|eaL zz9$waIP#_aehH9B89+>@>%V$@Y2NV-!e}rO+R(_RsW;=m_{~VlT0ZMTEV-3-r*X29 zFAJ8xU$615T|}O?`uZ=?hO{3pZN)Ex_;3t%z+W3Zs>E2qR5nn32ScLzgAEhI$HOj9 z`1VbHP#2#f_eJ8@Z;4I-$Rx|%U^FrDWifmF{Fl3f&QnYC=&TAF4?TKRpka`Zx`9$a zAX|4te5yLg$s8kRiC1wceMWcTH~;-H+d7z%5h_8HNWHPZzJ<5?!MinH7*a;Q#dx|p z6L0OR7m)P+OwtJ&_X1}7zOGFZuO8Ls%7n4gR&Li)y@kjBMV7@hFO1Aj$-|vg9>o;y zzO5e3nlEW6CbeN!Ak7beol?z_Qh<4MpJlt^oyy@4R)SxBKMGFR&b3Solosktu>-vX zS=voKGUneJ3sHL_v1!Q@f|46lwQzP0VXQC%X;clF%gncnyAX*9O;krw_TO^cCW>WE z6Ru!T(E^yT6y#ZCCTCy36B-d)zV(FV#ivbY-aqH zBJ(PGf5Fk8i?(u%$EyH|F{Ck6DLd8L#!OwDVci+H>-5Us+BYm<>mm*@3VbXtLZ|;j zQ90)o=~T%Q3Q1il4BAM8pioF-@{oaUAU|0$B0YNd;hfcv@FT4tbd={xbV`vdfiG~C zkMZ+tU1U5C5)oQ}_Qw-wI!<7!NZTD4VKOjiOSBla2hzA8s{5S;^9D{#+_>8h9Xf=> zVkAZ~HIgn!EAzAmrH2Gv*E(0Wdp>3F?lVm8`Eb?!LoL@?2d@6}gIwcRvuB%{owfPy zY(eaI(~MUwPW^}9^1lWj&)I8d)m`<`zz@dPw^m-$d-Htm|Jpffx$jWAaU;rE+v&q! zFDk6H`FWAsXO9hClT*6nZ8|o5{J-ZuP5w;eB@qqxG_j&Y!<}gb62(<^<{>DHHQ}qp zd)W{h`|YePMac`Fx26HUA|TT9;J;*d8~=6Rn*}eL9-uSYQh=x#XsNl?93T5*<_q84 z-(Dw;9BlawH@TfN21((BlSDdHE{#z3difEx(@2;~;~zy&&gi_o%>U}EuUzjPvb0pd zq1W0krk<5E6g(ZFU%Fo;yp8|{XQWdt!1KLIw2j{OnggX>W7X{~r)5ldv9a-u*x1Of z(1?hVnwmYe>Dw#T+j2L$?2oYxd+rj6fNg`c=>;;`#%&qg?IyvuV^?n3ab2nS%Sf|T zXTOLvv@tq2p2r%^qou&?D_{|&7_hRTV{$Y%vpi8VlFC?^uU)t9!qcZuX|j+#w>hes8Vad$-+iDjQ zhEg4_shy!|Cbi8T^zIG}$x(1*6`S_NJ9@98`zIul$p_jq8+WfmWqr{qG+8MH{!fuz z3*_aEMn3nZThq*do97oy69c}A1e~*0_Oat*k33N}O;@^htzrIH8j{~|0GeSI zu#gBmeGkXA?>^cju4wg$>OW~3VQVbR0|_C50V%R*{v@@rIL{YNTX^grR5`+yNu6x# zgm8(mftN1}hH6pQpKAqkhPj+l^Pz|4O&bzf+Xxvg4z7 zuY-W@1yIcy{kx1WU0wcdaPu#QiI6udp-o=%$&#_OC_k|&QPP&!L)9rc$~^0IJ+o*+ z2ZL@xP4S7rVIOwQ=dwG}$Um>0v_>%e+fz}Bn%C0ekfBEo*=}$xWZa5ThIOWEejk%a z_IEV)6<6hY(fswVW%k?|NA_2fMlju>USm^5 zr|ZsOE5K1ZW(BnQUHy8;tkx46n|TdzlJuZKyd zQ?p_Jwr$(4+jFr!>Ctum(tu0|cY!EZ>FDV`$i<#se)ghO=4SI*Tc9tDLfIks>2Kq2 z|Itwh>=Qlf+n=?b=*cYiUbAG$k_V%Gb=iZ0FVl^$&Wu$#a#2U9v_X_Jt~Bh&*jJb$ z9sQatE z8ThH|09(n}zVmsu1)CDbU;#3@yR3JA3tO3X(^j%-wPU1|&3;%=5^$vCrcgL|dH&!^<%8 z+;sG)2tPe#&rEygGTQ(1o&R`{0B0J`4g-d82>z#+z4geQwdF#x(lo5SMT2IE8H!(x zRh1TV8IVXY+#qOvsO)o`e8~<>t}FZgcJ0CFW(auB`nwDqgq=~$yIZ3z%aFpU>o@IL)RPH=M}!qp-jl=i4r*2=H)(N(#>T!s zd}2Qo>o~&te!Dz&hs1GW0Y{fCE1l7vXfiM#{Prt7?|)5d;V0P)@J1YBw3*3i7bS1oF>6IJob;v-UR|CH<;l04Ix{RudL{R9rS~h{vf%ic z{Ct~*Djm!7b&#aM=JPw_-h1Ll1qC~+U6_z~a&NUup159MO^E{p*faWrX;*$rA$k7W z3KwYpG0*T(koFg&&piK$Jugq&5pyD)(QW5*c@ozsVFdrY+!E>3R=LJepyhfeZ|n zm~KBUEuozzk&_8IsmOumbslpZTa>MXaW>kkKzQOseLCik+!&&=VZ$ZqfV}h&O%!K# z5ux={ANqkv9}Z96bp-fvSCYRsI52CP)~c9@?kflM{`BctZnfl)&cH*prU>1fWyYc* z1Pu4BpCVxzIeNS3{KGnIfziqQ4uNYnHp|FT?7ihf9>aLp{~I%wHS{e-s>-BF)N5hJ zBA(rybFk*Z=xUJt?(1z@kA!ykK+MSh7xbLW&b!2s^vLt$s=e2gn|b_(McJ`~E8dye zSRwt~Z_eV&73MC@_@-9;xqtxNKG|l`Jz`&rtTF||MVPQNlBmbVlH&pZ8s{H(j%`-Y zlR)QkTDLngeF`s}(4|23)jGa@_u}MSux$FzjET_@i;xxnjPZ^hWMn6^l-{Ia_K3XQp5ExJuhId7)1I`6V| zkZpMW7S<~@Uo)(%*z9I@Y^&sfLHT0Wg}&%^>`(Ud9GiXd3Ja@KNmJ^!c`i@ zPFtL%JlDI=c*V?33hbV?J7~o}MtJT1XyP-TIf%S<6|6iKc0^-t7dh)912Z;ePUDk% zjg4Vp9gITbbHlN6xnm9LO4h?wW*2Ctsc5j86GfoNl1TfL{9j-;~USvW@_hBFx3p(_ogi(I@>T|M;f z-Mi!EK*JUDKgg$76gzzrQ;oYCQ!(#%OWFEDTz1St`rm_X`~{isQ!CO&r$Ri*Y}hyE zdKQu;@dHe{XI|ND!P4GJuRcM!flH%Mn01I3^1H9iOwGUNCt5nS|4S0h&QswH#ROP2 zf2r48%5k%`E{)La*dwQP>io#|4$n%MHhdx%Z6_iZ-IpK}A>tZyVmp0v2geOv&+FH( z$K#K0ZZVN$hF;1`4wwx-3u&PQ18v^5Q}(##PB*4>Ss}aH#*n+#!!vu#cX8C(eR>`& z?5$I4;&Hm4cc{@V{7bh%Xl>qVsfV~%)aJIP@IknIi6FPBWMOt&Y3m8=k2UAZd44~s z-m2)Ojx%`A(`=AtGWCk={$jDVgd7{ayZLKiR=%pIFN32^$|$lfKj-g1WAfpc|LV5p zun$MKVVr!4y~ixIr;^p|7#)7fdFH3C|B~xl7ZemUZ@~hC@y!3r z_;wAN>xb-TnoU-{1M($W(!cNU#tFp$1mmG0|JXJ|LmHsNus}JOCszWq|E?*AQqAml zS9H`Z`<+3eYR$Y0?A+nOA#Rw!%BlSU)@}Dajn<}WNqr(;>Rxr6_2#9b_0wP9JG1Bm zxy98JD>S2ObOlvGzs$E_GbqN2vj@-YHLm={T$X>H-ZYlbb(n3hV8&|DP-U`@XO-HS zsZLoO*|G1&*si2p-Am$vYD=%3;b+uzyZvU$b$qF+mmR8`5pwX2^RvhejyUu!GQuuj zo=`RcL_rBJPKJBU{ZOPUsILe`s=K0m_KV^W<#J5OI5XkW!UWy|Pa5s23MvUR*8uKZ z^l9IDHHPeXXW`-xYqIU9lx+0iz>h7(l-T!a{f&mo%4=1lKh9!L0?3^?o%W8!f}t`2 z4#Rf8L|gIk&GRD7Rq-qa1-e0=l0y23GM5* z3vc;=Yw`kjm}4n8V2B1RItFV1E*;&_gjB?BQoKE87FW4dOXS?sYKBW5*)KN)#_;poZb zIuSOGDbQ2ybCTwi`|KV&WhI-Ua=OX$R|B+$slS^h)OiR6G;JJ{m(-dHM=zjeHZw4R z8f&`4twut)`>w>epI@ik=MF=c7~SEY#H0UEF8`BcG_kO@MiYAN*J#+iTmI7HjZPr9 zSX!{-M{1H|d%sxJI8FC5fKg>-R-pmSL){3RLUYnA;{2{%leZD@N|X^<3Cvl(2vF~T zu50me(Scs~+wIY-?$e>owjw4X&=L9%7A#03`*Zl(^YC(28vRSM-+dJ~zmsy%cO@C4 z+lk5nz4-0nn1FyWLlKkGoHhHyKt-J~_MClV0?@=-Mr>C~im1z>?A>ZGHE0xmH~G{0 z?$4NVo8wG^kRUU$YP_QBH7WPlMVz(q+q`xk?K&C&Mnp_U?{-rfR%r#Y!j#3;ZF%RN za|<6fze{cWKG$Dy3|mI`4#L3oH9Q8}8v$9`b_~NMjkuZP@0=tii3c;-ohI@GMGsl} zYqZ^(60&M`wi$AGf|;7*F=g$-SFc`;!HEHT!#4tYBHt`5<=EIURE4I#f_c2~_wQtn zOHMAErcg8U?r3}xoo|1cyYFYP9H%a-sHwL(CSgLchhT|yOJf8ep%{xAKp(VY&9hF} zVhq=&-)`504|NG74%8}K=vs5&fq$|dS!Pl_B`kIHQHA5@{83oVH|CNLC%PPx18RAt zSls^si2BfWf3R{76pR&RvQP5q>30(}d{--XyP=`=(W6QTX;e^A#^nu^1S1xRi9EgR z1OvK_99-1?xVjvu;^|E<8V;Q}u|8bQu?*=~kWYD+M^(Z-^e>#z2PJ!X?`P4ydyp?| zbf~-RkddudZkUZM=h^!0)X-G)8o^5P^I9kf(;N;8RiYqWQIJ>Td-9LL-#fkNqtOQ- z``u#Clt-H6NR{d+7Pa^-xpme+FB3Du3mD9vn$()x%y3LIynQZ zX`b%r{vb#a7ju<>s&elxXX?IRuW0>v6hzM7NhJ`WYfJ+euHXA`NxmleSDh57VWXVV=18B>W+>yM+ycxMLkE6Pgr0~ybL zu=LSjssO}HZlwU)&CDQlu?8Rt6x#~J3mmnscrI?e;E85Pe-j$73x|fu$5hEASz)H` z&@sI48eosucj%NH?v79h2p90F$;txFGG}w2qLWQbMWOj{rFnC;PiJ*cRDX_Qq@g12 z4;ye375C(tNIY2;C@pAwUM4sVK?=YiX<4GAGJ_fe)-tE?5$Jph>^L#ZFV}fmy+J?f z%{d!_ZfSzwVqyDeTTbeV-dYn7bB8sYp&sG_P~W5Hhq*ZxHFw9KA@fz#-^U>!e4~+H z`u|V2O>_^{c~8;qJQc>uR2WumSr(zLPt$+-XfS%~NJZuR8_M3cq6G?GuE*c7uzR~T8-JQFV z`1v3zW*7Hs1?zRaNII~221a}lJCjz3PVa4_W-zs1HL9bFM;n&f-qpEXF0>$3RaAOD z5-vqR`wm4y2wG{!&U|e2wv2{E^>I692b>$_0yvf<73=warq^d^s+L3E6l&z%wv$F3 z3!zh6%Q!_KIz*s9P9vnX-CJ~r9_XU|K+c|ofGO{jvW(ukM5g26qdfvcMx8RZk<>mv z@3w6ikqkt?&dvLoM%!evNW2=MaUw#Ez)&6aEAK| z_8F;c64QeCfRmulgbD~c%FyUcs;D06Mp&4qAXz3E06EtS&)H}#p&^527$81#N-DN< z$8eL+AUT`MUitsq>ye922L|{$#dt1TwrnC=#rqHKFm)uz1P9<=M;+_Jp=cN*yxh+D zI)l6DEzRV{`UKZ0^MUuUk1p|@Ntj^X%G_U4Qc>ErbJiBp^2P1B`}?}`?d2J(M1g2A zDNq*|Q+`PGJFq)Xcp>q{+iDB^!I{K@$B(}T;mx(i^YQ0rn!p1uq($HbQC1m?9~nZA zQFDJZvWaUdI#H3ii}i{6*z(KC8H1-rm2(}dh`>YE)aXBvwggc(XOX0StYVej65mBG zgV{Yly%@bka&qD%R8r^8pT9AoRS58#a#qv{Csk#=7)os3+{#;i7I79g}CY) zQgUF=X){ioKlJw~iY@d#ViXKjIS%h4Nj6!RQztJFM_&`4H(vu$mfnur*@C{_02Y| zMP{2KYU31Hti~(X#1Sk^4#`y_mss`Ow^teYLm;W->4(s`?-*{U zH3%x2Lszd;r-Y{CL4%Tl{$*r>QFQ&icEI)k4sK;a@2Oc&>FijW9ryxGTBPs>Zwreg z4!S5x#k02D-5ejglDdN=vuPqJE{-T2IA1p*;n*y}tc`LOUy~O~Soku%pTRrj&EVFX$JcPjD%s{9YbeH46X}6m@sHiC zZU=RRNz2_{`(1rZL)ozeKR4_hNI&`_kgk=f?}9UOtdbg9Pb6zL6b)u`#Mzl|pBXqq z2LY}@^bG9Io~v_nm$Rk)>}d3WW{xFsi!+c^6K{-#G$~wx!jyB-iWov7HXBar9CxRF z>ozDZQuG>YbjxXNpV}t>KQNcRR3Z~m{za*|*KoUeIYRLJ>}p(iHm_*VvTkHy=I=D% z@XC3^^}J@?;TY*f`e*FH7lTWYZNDeV_LE1u#X06vvE^Jd+%7g$n~{nZo?RmY~gr}LN&N;Y#mXdQ46tG zqcL`bKU2~;b82bgi1k4{m=$9WLC(F6Xh)+27U2INStX;HJjNdZ5(q364TCip00WA~ z7-Zxdb2WOXNih>P=EA!H-bz&62`O!&(Ut@|bQ~Uk8|Ev|@F|rYI7D4*PETO}DnRIP@WifBwv1&?HDyQ|g(R7lCON2CxgJ%C1 z(%{J@;%I z!BN0cJ~Y-o(ArQ3={_AJJt$Q-kzy%Y(i+_YzZFl9+=i()zWonw{Gy3n!~fhFM(Cy< z%P5TIt5_ZY8}NPb49bMtK?)&DaVZjZUzc`KLUP$Bl8nHu-|Bz%=GfDS`k)Vw&brk7 z!?$gIrCXjK`=I{ys`>M>Y%e-oy!pLa{4ZbkztudF_)u>8jNjL;zZL&r%f*_j3ZJD` z{&n4Q|BJ6yKi!oau8^em{l7na`FE%I{(#Vk(DifPKeh0$(dB#NcqvhX+T|jN>mG$! z&(-CN=m^#iTIPb@(z`F|&Po(rD$hD6kYu zDz}pfveD^Lmhl2lUto~Hh z`slLW?WM)$>AS7Bi8(4MT3;l#>M8(}>vUZ&=UylRyc+DcCTlrK#!1Z#SgZwuMGVZ% z%`+zNm8AGs;%r^#P6(5YH!MMGCe{x6(M+^7Hg>6U*>3}0BMW0tHEh7>XM*&$?0Ul; zvm&!x66+me@baUcbbeX$?p1lw;T&=6kkiBdl;YoZnbk|hp^~$qp(?fk=j7Gya^J`e zY}n}d;-X@-$NHH%$?FZ|KP?)bxw`QAezOZ1i{Iwu^#0Osvrq7E2faW0Mm8*RtGi&Z zCR2fOUjmnDKs=KoKnLVH_F#!!a|>cozss2~mq-gVj!UN~0gg zr#6ej(ap`x-OsQ9%mx;lnDQTKDnEY0sf!ry)6jDCe6WI5dTz7I&4M!<-pi?p^Et6) z&Tvz)sBdOs+4Dlrrh2_0ml^KOad=q1k!6UQq(a^YF~Yq0^NVN-A_Yz)y8AplJhCR* zTF{E}wb|7R>f*T*6F^eAZY~imCq4_)b~LoHmeNnqLITIaH9PX^at)XE28^s#wJN%} zhUvQ33xhnT2~UOVUc8;1^M!!bZf+y(iLXcZ+1aA>)hc1HrgF(lAD^8KsXS?rt`26f z`7h#i?vd-h+K(1E9|AcqCJ82}hH@mj@1kLzbl72Xytfb=Yva6JQa{>hrVpdV#$ffI zK?u6RFq?1Mg37qDohW*!5F%BpEaz{s&>ez!0TZl{%vDsZ@j$MMssub z9W%5W|6Ri3vbPCpjx*POw9xw_p-3ckJgePTYAYBLcc|EAIOzS4@7xDHR2K-09336!63@oBQ+QsmFT!!S|Blnp-}ue;@5P)zR$G3}x;HoT zce@y52n}9M0eNACpO{y5evKQvZvFa;RDzj{igqU>)oY=$hd|d|cPgh`=1^a3)CIg8 zMwmIwWtuG{YzH@$A%Phi8<{5V%TzH>VJggWSGep)CNP1~?0U@qY zuQ-zS%pn66e@w7dW~musi;~kdg*TUxrvP%4cKlBL1Tp zGBpJHhD5!5`I1Ri;2~y{n+Df~Tr%s?9F{HHPFK(Hy}?#CG{_uAp6PzXXzD(g%qqSa zA>~Ov%QlLPstAxC_4xh0h(DPf@$nL5I5k&Gwb-JD_GCxt{dy?sl>Z9ZG-dW=uo#n= zsH_<6R?BlfF5&ESDDK)B-|69b`I6WT#XZ%6?4`_^vQX~z zS%M=-zHWo+7zm2)V+aEW2_d20cm)LXo$jNzbL4j|&L6DV0ehMXD5HI%^UCy54N-$r z=N*w!!)9;%uG&u5vsYg~PgaUfN9vki)?OI1xRmGB_v6AhgSv&s&-mQq9+!K4^-Q%= zG0*4a<(&Rb>AEwEy9L=G^}61|V^WJ2*YSI1O1o#m(N<3dZ3psG17Ele$K$&%*NE5* z?gtaT=QEd7NDPnSz4zX`)<>sCY%H@5G(hkDc>45a_|KGMO5XTFz%GM2qs+rD64F9A zcxEqo1jMaT-L?PsL@P^6XMeAXY1xaKml7@V1sWGY3MiZUonYgssE-dFOhariFoouo zJ}>=I^OAZ0K5aYqEN%0ROQiiif}#xez{7q6dJ9 z$wZ8L0X^oDVs@)*1iwAb1`b2k=x@x2}<|t4sY#Z5Aa29p75eQF4xF<11b@< zs!EA5PKh@a81P{6S}O3U&VI&ikNwzS z3C$0s#ef-WI{&J<-7>j zT3eEQO%0KAe_U5T%KD}c(0!1M6mg@!|NeWD2~oC9P0a-k_rSDVO*1D`0PH}fvxIOn zCpfn@|M1b8$0V{0wgNLA)D@%_{H8?$cfE%0(`uH`G8e_I_9Cm845Dko{DegQ7>Riq{yUQDzU^>3 z(AL%_eXyn{qiLw92#Sh|f*qRUC~dbFeI(7ykkZ=wiRjL^gs*&gSu~?%|0Y+I(>Honn{I2!Sf0#GuGRSBXtN?Lp7{PZZz`iUBH-zC1qi?r?&@w&m1k>RrMcqO$p8M#^(8DmN z)|*X)@YLG&?(SncZ?DX32K&UACKiz*mxg4fi=ql0J*9`m6rqu~IYDjjX7&m&XzP%7 zCYa6kX8qSdYE;#!?hJhiZ=_NTz-uE{K`WCM%%d(xMeFk_aV94`>aAsB-}feOp8W2h z_a|TeZ}L%BORbShhV$Wy? zgGsvG(PJmMG~op5w`E0l4qxkxh7%CE5w|qc%*sG7xSSdWGWJj2{q|Dzo^9nWp4J1@ z8m2}TnYOlNm65j@rkIk^rSv@K=1`YeL#^f=SmL;TEH@CZ4UnE_-A=##O^?9RNZoK; z7N_Xy7C#l6vIywg6S(7AsL@3<|J_BTZ2SoE zfdXf;^Mz7`N}{k0c3IkJH2q_Dys320GQ*lQ?mAZwYJZXe>@t0Fs?X`LQZ9y+bvRDY z+S;mb5=>*e0u^`zkJO^77#xmfsey7Hq<}`Vp|LTEFg53uVah1#BU)TWnrui6t=|0p z5I>+00W_TS!q~Hi1Dl8wN)Ec_;pja(6jMiBp^#1>>KwfQ0^%$Y@uj=^{Wli$ZGs9X zMJf?H?sg0$sb45c_lBO}j3(#?%R#pi0s{4+b>M-wYet~8#RSz5^g1|&cQ@%5}#$nUH3*=gRd%J;2@QUJ|dE(P&&Vbj=fEbbBbyH^(HC)r(0!jZFx4zz91c^~7 zLlc!XoD_-xB1H)(Y`NYmHQi{lt-Qvepr$n*fTq3*JRoGV@OJ0?KAY>}if$egRNUgE9J@TIi*~0P=r0Iu_QEtAWLCi23BhN#i=zue zZK6UUSM{btoOvchRlK-jXOF*I&MVv8^0)gkY)+Hi5OrYlAVA`yXxke2wy&>+Don)d zZqsHPaqru6rNOJivtZ7dUW^k3S06&wLqu}y39HUoMqMpxxUsXPb(0zga;B3W1SeY- z+CTpI<8!sDqlIYBcq0&u`gwz5vF1Fo zc?2G~hB8FGPSjNeWa>rtooiXIQOwzZl0l&mrhFG@c057|-`Po!h^juNK9~E7o`kA> zskr@wXH|T^5$wGJkRb@(4*&Qxsu`zi#Ib+Ub{`tz>y|@oeMO;=*vfBvd$r^HL!;XJ z%DU-rl=dPG83G-llt>R0(`f-wlNKksi)PH9Bk?vxt6_&`u{Ob)v}~f~Z33aEKrW zF@?e>Pre~B@K9^C#FmuRIagy9`a|8s`B4?gGB8hNC)i*fbj=#`ULGXRKFqYom(461PQ|H z=swAdYYLL#q*907M!G7ep*ID(cV6gu24Cwmy1e#^a3R>=@|a8t-*$7)epPMCq^QqK zlt$PRo>t5GoPJ&)c^8zzZ!fAc0@dLw3f}W`q$Y48IhIZ|t3fBIa3733rbt z?K0(sRMk`W*uR!ZvXM@psAlR@=+m+i5CAFeLE*}W3o@^zfhmPXO4WEzG8aM2b7e%8 z9dhK*0KdvWI_@Za?5Rxj*+A)*GeXwzqZC-mdr5kfr7FA4y^cu@bh^bLX&W^G&nad)lBf{-oyb;0cj%0CZ5t=iA8s}z zj3zP?b$+S(5F)jrVWowF6M{q`Vfhq{R5oq8Oy>i+WR}UB*Nr z(i1Dcl0zRD>h09=3($A@jSeGf}%@65?~ ~WtTG&!7+Uo-Ak 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 Nmpgot{`. - -## I18N -- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`. - -## Version -Current API version: {EVIBES_VERSION} -""" # noqa: E501, F405 - -SPECTACULAR_PLATFORM_DESCRIPTION = f""" -Welcome to the { - CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] -} Platform API documentation. - -The { - CONSTANCE_CONFIG.get("PROJECT_NAME")[0] # type: ignore [index] -} API is the central hub for managing product listings, monitoring orders, and accessing analytics for your electronics store. It provides RESTful endpoints for managing your store’s backend operations and includes both REST and GraphQL options. - -## Key Features -- **Product Catalog:** Manage product details, pricing, and availability. -- **Order Management:** Access detailed order information and process customer requests efficiently. -- **User Roles & Permissions:** Set user roles and permissions for internal management. -- **Custom Integrations:** Connect your system with external platforms through powerful APIs. -- **Detailed Reporting:** Generate comprehensive reports on orders, sales performance, and product data. -- **Real-Time Data:** Get live updates on inventory, pricing, and order statuses. +## Available APIs +- **REST API:** Full RESTful interface (this documentation) +- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries ## Authentication - Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `. @@ -97,20 +76,32 @@ The { - Refresh token lifetime is { SIMPLE_JWT.get("REFRESH_TOKEN_LIFETIME").total_seconds() // 3600 # type: ignore [union-attr] } hours. -- Refresh tokens are automatically invalidated after usage. +- Refresh tokens are automatically rotated and invalidated after usage for enhanced security. -## I18N -- Apply an `Accept-Language` header to use non-default language. A list of all languages is available at `/app/languages/`. +## Internationalization (i18n) +- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`). +- Available languages can be retrieved from the `/app/languages/` endpoint. +- All user-facing content supports multiple languages out of the box. + +## Response Formats +The API supports multiple response formats: +- **JSON** (default, camelCase formatted) +- **XML** (add `?format=xml` or set `Accept: application/xml`) +- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`) + +## Health & Monitoring +- Health checks: `/health/` +- Prometheus metrics (basic-auth protected): `/prometheus/` ## Version Current API version: {EVIBES_VERSION} -""" # noqa: E501, F405 +""") # noqa: E501, F405 -SPECTACULAR_PLATFORM_SETTINGS = { +SPECTACULAR_SETTINGS = { "TITLE": f"{CONSTANCE_CONFIG.get('PROJECT_NAME')[0]} API", # type: ignore [index] - "DESCRIPTION": SPECTACULAR_PLATFORM_DESCRIPTION, + "DESCRIPTION": SPECTACULAR_DESCRIPTION, "VERSION": EVIBES_VERSION, # noqa: F405 - "TOS": "https://wiseless.xyz/evibes/terms-of-service", + "TOS": "https://evibes.wiseless.xyz/terms-of-service", "SWAGGER_UI_DIST": "SIDECAR", "CAMELIZE_NAMES": True, "POSTPROCESSING_HOOKS": [ @@ -156,58 +147,3 @@ SPECTACULAR_PLATFORM_SETTINGS = { "URL": "https://t.me/fureunoir", }, } - -# noinspection Mypy -SPECTACULAR_B2B_SETTINGS = { - "TITLE": f"{CONSTANCE_CONFIG.get('PROJECT_NAME')[0]} API", # type: ignore [index] - "DESCRIPTION": SPECTACULAR_B2B_DESCRIPTION, - "VERSION": EVIBES_VERSION, # noqa: F405 - "TOS": "https://wiseless.xyz/evibes/terms-of-service", - "SWAGGER_UI_DIST": "SIDECAR", - "CAMELIZE_NAMES": True, - "POSTPROCESSING_HOOKS": [ - "drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields", - "drf_spectacular.hooks.postprocess_schema_enums", - ], - "REDOC_DIST": "SIDECAR", - "ENABLE_DJANGO_DEPLOY_CHECK": not DEBUG, # noqa: F405 - "SWAGGER_UI_FAVICON_HREF": r"/static/favicon.png", - "SWAGGER_UI_SETTINGS": { - "requestInterceptor": """ - function(request) { - const fmt = new URL(request.url).searchParams.get('format'); - if (fmt) { - switch (fmt) { - case 'xml': - request.headers['Accept'] = 'application/xml'; - break; - case 'yaml': - request.headers['Accept'] = 'application/x-yaml'; - break; - case 'yml': - request.headers['Accept'] = 'application/x-yaml'; - break; - default: - request.headers['Accept'] = 'application/json'; - } - } - return request; - } - """, - }, - "SERVERS": [ - { - "url": f"https://b2b.{CONSTANCE_CONFIG.get('BASE_DOMAIN')[0]}/", # type: ignore [index] - "description": "Production Server", - }, - { - "url": f"https://beta.b2b.{CONSTANCE_CONFIG.get('BASE_DOMAIN')[0]}/", # type: ignore [index] - "description": "Beta Solutions Server", - }, - ], - "CONTACT": { - "name": f"{CONSTANCE_CONFIG.get('COMPANY_NAME')[0]}", # type: ignore [index] - "email": f"{CONSTANCE_CONFIG.get('EMAIL_HOST_USER')[0]}", # type: ignore [index] - "URL": f"https://www.{CONSTANCE_CONFIG.get('BASE_DOMAIN')[0]}/help", # type: ignore [index] - }, -} diff --git a/evibes/settings/elasticsearch.py b/evibes/settings/elasticsearch.py index 257262a3..dd2e0ebb 100644 --- a/evibes/settings/elasticsearch.py +++ b/evibes/settings/elasticsearch.py @@ -1,6 +1,6 @@ from os import getenv -from evibes.settings import DEBUG +from evibes.settings.base import DEBUG ELASTICSEARCH_DSL = { "default": { diff --git a/evibes/settings/emailing.py b/evibes/settings/emailing.py index 82dbcd65..e709ffdc 100644 --- a/evibes/settings/emailing.py +++ b/evibes/settings/emailing.py @@ -1,4 +1,4 @@ -from evibes.settings import CONSTANCE_CONFIG +from evibes.settings.constance import CONSTANCE_CONFIG EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = CONSTANCE_CONFIG.get("EMAIL_HOST")[0] # type: ignore [index] diff --git a/evibes/settings/jazzmin.py b/evibes/settings/jazzmin.py index a15ceb1e..34ce825b 100644 --- a/evibes/settings/jazzmin.py +++ b/evibes/settings/jazzmin.py @@ -32,7 +32,7 @@ JAZZMIN_SETTINGS = { }, { "name": _("B2B REST Docs"), - "url": f"https://b2b.{CONSTANCE_CONFIG.get('BASE_DOMAIN')[0]}/docs/swagger", # type: ignore [index] + "url": f"https://api.{CONSTANCE_CONFIG.get('BASE_DOMAIN')[0]}/b2b/docs/swagger", # type: ignore [index] "new_window": True, }, {"name": _("Support"), "url": "https://t.me/fureunoir", "new_window": True}, @@ -42,11 +42,11 @@ JAZZMIN_SETTINGS = { "navigation_expanded": True, "hide_apps": ["django_celery_results", ""], "hide_models": [], - "order_with_respect_to": ["vibes_auth", "core", "payments", "blog"], + "order_with_respect_to": ["authv", "core", "payments", "blog"], "icons": { - "auth": "fas fa-users-cog", - "auth.user": "fas fa-user", - "auth.Group": "fas fa-users", + "authv": "fas fa-users-cog", + "authv.user": "fas fa-user", + "authv.Group": "fas fa-users", }, "default_icon_parents": "fas fa-chevron-circle-right", "default_icon_children": "fas fa-circle", diff --git a/evibes/settings/logconfig.py b/evibes/settings/logconfig.py index ae41e378..1814beca 100644 --- a/evibes/settings/logconfig.py +++ b/evibes/settings/logconfig.py @@ -128,7 +128,7 @@ LOGGING = { "level": "DEBUG" if DEBUG else "INFO", "propagate": True, }, - "vibes_auth": { + "authv": { "handlers": ["console"], "level": "DEBUG" if DEBUG else "INFO", "propagate": True, diff --git a/evibes/urls.py b/evibes/urls.py index ab9747c7..d6003e66 100644 --- a/evibes/urls.py +++ b/evibes/urls.py @@ -1,5 +1,95 @@ -from django.urls import URLResolver, include, path +from django.conf import settings +from django.conf.urls.i18n import i18n_patterns +from django.contrib import admin +from django.urls import include, path +from django.views.decorators.csrf import csrf_exempt +from drf_spectacular.views import SpectacularAPIView -urlpatterns: list[URLResolver] = [ - path(r"i18n/", include("django.conf.urls.i18n"), name="i18n"), +from engine.core.graphene.schema import schema +from engine.core.views import ( + CustomGraphQLView, + CustomRedocView, + CustomSwaggerView, + favicon_view, + index, +) + +urlpatterns = [ + ### COMMON URLS ### + path( + r"", + index, + ), + path( + r"health/", + include( + "health_check.urls", + ), + ), + path( + r"prometheus/", + include( + "django_prometheus.urls", + ), + ), + path( + "summernote/", + include("django_summernote.urls"), + ), + path( + r"i18n/", + include("django.conf.urls.i18n"), + ), + path( + r"favicon.ico", + favicon_view, + ), + path( + r"graphql/", + csrf_exempt(CustomGraphQLView.as_view(graphiql=True, schema=schema)), + name="graphql-platform", + ), + ### DOCUMENTATION URLS ### + path( + r"docs/", + SpectacularAPIView.as_view(urlconf="evibes.urls", custom_settings=settings.SPECTACULAR_SETTINGS), + name="schema-platform", + ), + path( + r"docs/swagger/", + CustomSwaggerView.as_view(url_name="schema-platform"), + name="swagger-ui-platform", + ), + path( + r"docs/redoc/", + CustomRedocView.as_view(url_name="schema-platform"), + name="redoc-ui-platform", + ), + ### ENGINE APPS URLS ### + path( + r"b2b/", + include("engine.core.b2b_urls", namespace="core_b2b"), + ), + path( + r"", + include("engine.core.urls", namespace="core"), + ), + path( + r"authv/", + include("engine.authv.urls", namespace="authv"), + ), + path( + r"payments/", + include("engine.payments.urls", namespace="payments"), + ), + path( + r"blog/", + include("engine.blog.urls", namespace="blog"), + ), + ### ADMIN URLS ### + path( + "admin/doc/", + include("django.contrib.admindocs.urls"), + ), + *i18n_patterns(path("admin/", admin.site.urls)), ] diff --git a/nginx.conf b/nginx.conf index 464aa503..f5937cdd 100644 --- a/nginx.conf +++ b/nginx.conf @@ -12,7 +12,7 @@ upstream storefront_frontend { server { listen 443 ssl http2; - server_name api.evibes.com b2b.evibes.com; + server_name api.evibes.com; ssl_certificate /etc/letsencrypt/live/evibes.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/evibes.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; @@ -48,16 +48,6 @@ server { default_type text/plain; } - location /media/ { - add_header Access-Control-Allow-Origin "*"; - root /var/jenkins/workspace/evibes; - } - - location /static/ { - add_header Access-Control-Allow-Origin "*"; - root /var/jenkins/workspace/evibes; - } - error_page 500 502 503 504 /maintenance.html; location = /maintenance.html { add_header Access-Control-Allow-Origin "*"; @@ -162,6 +152,6 @@ server { server { listen 80; - server_name api.evibes.com b2b.evibes.com www.evibes.com evibes.com prometheus.evibes.com; + server_name api.evibes.com www.evibes.com evibes.com prometheus.evibes.com; return 301 https://$host$request_uri; } diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.mo b/payments/locale/ar_AR/LC_MESSAGES/django.mo deleted file mode 100644 index f197aa384a3a59d12e0a0e51199c84b454f52819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5255 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 diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.mo b/payments/locale/cs_CZ/LC_MESSAGES/django.mo deleted file mode 100644 index a6552177d818cb79d07ed0183eea5d48fa09b6c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4618 zcmbVO+izS)86Th*FqBKn{nlwA$(nfAPNG8P#8GXtNnPTL?2X$r4`%k9+1>G;b7nI$ zXWiX2JRl)~goRoOMC2Ftp%0O;$_s*4Btkk~i3h|JQY9*o`T|1y3q0`q&N*uzI~Syk zy#AfJf8X!B%|D)e7B=B+I zJn&P%?*TswybAml&CxN8TMIg!ZG7x{PmE$!a$Ebs{+sAA6oj{!?SI)4c`1H1~X0B-_m-JkOL zzX0dae;-KtJpIXReiBGLJqIK`UI88lwt;m2o51V9Ujx4YEMYV8{sM3U=mUwbH-KLU z{vyZU0zZTPUx67F+qeebUjeH3rv8SnnMm|dXlI@5;(33WbIcgL$pU025Ap65? zX`Dgr)IJoBnP}P-H}E(r6bFA#9d4Bnh}u| z9*yx(`!cBTT1#2(1;Se1F}kaKX}KsIq9P|vLwGX1CGF7xxM)kc7I%dcec?ofFE}1s z9CGBoHEEOxR9~9(Ae(pTAV|(}ZDEA=W~bHgl}RTf8=Lf8;h+!n6R~S)gCl*q(bx&T z)zUnaV8nK$ry9!RpdeJ%5(yLB6A>4lC!s6dP>|hLm>B7AxYN9eLqHzxYZx7JaAf4Q zSQ+Uv5d_?*X3NnS?(Jf%E&>sGa)eN)qpfnIzGZc3aiDApU| zkqG5Dq>>_JBxPNaNN02Z+4-}5k4erIp$jDQW&&HjOHZ)o9K`lty#L_L% zo8Z_U2Yz${9-_c;ZePQ%kG^iOgM*ka6i5wJ2)VOw8;4n+t}L>3f{Reck+T&(1;XJ} zJkq1BvLWKYjYRCR5f?dft3wIzizLL=e8k*nwlI|I!O7{GnJ4p(fYU+8NW;j|v6c)1 z4I;?_HX6#<5tkE8HF!_Q2#l_Ti}m=m7&gcpp&?}e!%Fyo=AMomT$=0HjL77|jqwMx zW2Jo4h77^lINYZwWLLn~>w&Zw?ZWB(yHuDa+e4Lc%Tkk)PZbH~rTs7-XMt{N7K+zY z2zwM(|5qAy=cs>l?Af_GMmOeyKWN+gO@i ztlr?Sk78;+3$0{Xro7;n*O4a?1Jk^^zA#r^<7X;Um8r2+q$}gfi?*r!@?6}s<(i)6 zV=K$$RoPXvq5NGWm1%x@>hyEvsZ-@MQ+(>o^y%-MoI)GBB&;jfs1gLiX@kQrF0XR@ z<}NQSuk&;B%S*M{`PvH?F0WQGvanj2UtTvbTrldrkSP9RitmU}H>kTzy6*DjQwKUhbi zH>4?7BTxJAx@rD=UAeK9AT}Z>U(hDB(>&^=T|0C7EYCh?N)dl%hMyWgJH|$}7%t8G z9V0y5O$Jf2n^j>C9~~X{B?S)O+lF`;i9}X~oD2L2_$?x1FT3QM!ZSkK;|6HhbI3L6+jC3VR7DVR%#4L0+;;G808~g$y8z_UR;( z+`>~Jz=i!}*S2xJ75#dTtq%v%Yk~Jv48glSklL4#U~?*~;I9tfwobSfo=)5 zo(x(&wuZa<2)wQgvl5=%4)3br>=GF{(mx8WVhz_fKd!Ilt~z5t0RaaO`zz{(MYi?y6?p>i7$w|N~ebWnI>cwU@d zV4W;ljOsW^3IPT%XEN|flI)BwiL1e5ss_kt2f}CTfgav*5NdB{Q?!#?cxmBU=nis| zclWkYo708dM?B=5#tb#XiBUDgn=)0u$D=$PFxe$z%(nFAy^H#aZpS_hKfu-Ly=@)9 z!?hEAJa{4rtF`1NCfiii+o@kbq~Sp2{Kq7q@ag6DkR?71D~e;{J4$Y`NFuv9V(y4~ zg(|<6IYKw}ze1?+(p_m`oL$;4`0zh6Cb@)lZLz;mW<~!2(|bEM+08`F%m`@@k36hD zK+(SJvgP`wgqIAu5UY(iE9SfoY%V~GM|Nezj;xa&skz0`fgW4I3PflAE)Z-*`$pFz zjrSTqoKD%R6wg^^P4B;Tz{x$iOv{o$W@URnJxU@46`lzYtSi&dg0CXahLW6pzqmf^ zi=n~}?p{KwNe06~9vXbp;tia8!vR7lO_d#sw<6sB;HiMTgFSHLIJ5KvJr+gc a&@*8Tsk4RL;_mxS$a5VsL6>4WX8!|jTdy<# diff --git a/payments/locale/da_DK/LC_MESSAGES/django.mo b/payments/locale/da_DK/LC_MESSAGES/django.mo deleted file mode 100644 index 3c9ce481b99182f56475ab8eb6448beae8ecb8c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4599 zcmbuC-)~$;6~_l!S}?!c^0NgdKoUFgZk$Aj%K4$%&L(ja+mXF?srq2e?w#Ge*}L~{ zX6{{g+oo?wydWMBq7p*zl026OL@MmQ?;Elfl9{8O5BfEB*An3@m-#c^f zoH^%v&YUy;;Hk%drf4VW&(YJ5DRmBf@8kT??mec|b>`jyXBj{738kI}Pk~Q@E8yqB zYv3orSHKfs0Dc<$33w6w1$YE}ADjXIUA}+v38fYpKMj5XTn9z&F8B?w3qA$@5d04K z7Wj4WU2p*Y1^g1&V9~e1S3ue4P4IE>*PwiVr^MfbpJn_v@I3fWP`*2c^3Q@NL9yow zDEhnv@~3(w-U3CR*T6aO$Dr8xJFo@rgP#G9eM+e}z_TDz>TU2i_zu{H&%c9xu)*Sa z=6}N?;r{~=mDImL+5a(=#YFWCSO=d4g})cUE8sTxUGSHn?DGfkbKoDrCGh=n{2Y@a z_avynv!L+S1ZDr5;8($)gJbaR^8E?O5MEyZPl0Vv`1&a*`o0AUzrO{)2>uzo1pWh* z?~Y@H_-!5(dv5R}-x*Ns@E}yEH^DE1KLSOcUxC8wdteXzD~Ks-iNz7P0g9Y=`I!a( z1VU%7tMDaF=8w>YA8CYe?gM!~N+$%>SLkB5v}fpIi!@FDCS7!#qo1T#4QlcxdP|dd zsG7vAG>IkA?^`mU3D;kv=z%3pTt%pG@w^Ih_h2wvBQ9 z9Eu<`*K9jABWnw3O`ZzvZ0s|a%QY$XV4um-Ug8iL$d1m>>%Cs02Np*B(6+-)*w#=m z2)!2)=5^b|+O*piTV;nS-F;n|%6_NQM0XJadFdBaNR7e)dKb?=8x&*Na+9cv>TYl(qGx05&}q;-17RFrfRH88J+1N<@dRp|sZ2;+yo z!nWRhuR?l0`oH`tA*vD=aDX9=2+Gfq>5v}qN*Ji284qlnR^fMe?5hbLT*$di$2{ax zBnbpIg-NfRO4d3ppXk?dSSRe(Z!EpM)>v=u zURi23URrv2cWrfjb!~g?cI}}bEd3z=V0sI$_G}SXKFiZdCyOAtO?C+7AQE;?5{(>@ zB26BhEe;HkQoJqB-J_$dJQ@=2M`z1{gqkGYz?nUDU+2w@7aJ?h-Swrl#%=vZb*AoT zp&Lb(sjUXJ9r7e+U{N=AR+k%F`fPonzA&>%x^ii4&3D6~ww!f+t(h$9nHw9mO*;x@ zLG2PrWl^75IP<;Q!s*)C1-)=~@yz#6F3@JK8=uyiQVAlHCJy0OHa0bVd3$|hN1tEW zSZ^+^G+(&9z1d)9b+f**v38MVaW^wvTWgZ`7WMMxYIAk#s&1@bxi0wMmMu~uYC(Ty zZFQ|NvFkMEtPtl!Vy!tIqH}6rO-~IY6UOIsyJs9}_S{Cjn8n zsGo0z>CBBNb0(@?PTasR>UfwB{e?5i&+(=gJ#{X22MxyXxK zNBh1DN0tiEAE$(eofKv{I{SCZGu_XVQ(l%M8`t$E8^>1nr8HaJMS{~dJ|v9O=JxN# z-gY8`VA;GV(YY{Eb8tX-QBx7DTQ2J&Fn3yUA=sJ}Xc0q^C8bKq22fc}==4M(>RPTH zT7`XQ-Mp;oXB63tFvu68RI!zvM}Wih&Nz~XvO@R!xz?h6g!p;gr}}l^!~|W!Be$qH z+_^>8#kQ_42^B6EoL?reCkt9*5sLz{nhb+9QoK=15jljcl2WoEKfivoY%f6zua?WY zy=9^xp+>gILUM~zJNtLLsa0zbII?jRc6E>JWaFZC6R+G44wvt`x+bMtnDweJl{+uo z(3esheF}@>L@Gj-8nIQh$zpzex_^(*;O5m~QruqEaCI${VJJLF5$9e|S~@A>b+uE9 zq;7Xb*D@%oA^EwewCD@ z1F7s1M*H_%*AMpZMDrqq>5+|ue1w*9+?N91hyGC_7s&F$Bz`m`5fF zQEmfr_$et`f>8cB35e;*UEmUL;%u~km)m?`9~qAM36c;$a2IHj{`+i@XUZ1E^r4r6 I2U6UB0HHZq)&Kwi diff --git a/payments/locale/de_DE/LC_MESSAGES/django.mo b/payments/locale/de_DE/LC_MESSAGES/django.mo deleted file mode 100644 index d9e91ef92923bb77de898ce64a80e16f9fd93fa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4778 zcmb`KO>87b6~_w*2^a_=Awc-70GrrZkK^nrO61K(*t@e{v;J7@+1-2`teWYXnZn)G zldftzb`m6zI7XZhNI`(ma^Qf(g^-{Pke@G)>36n}pJUI2dy&V&B~h1U~z);JG-gZ>#% z{CIgh{$o)1`33kH@b_Q~{2M4d-OZ*EY=N@R&%g)3*Ff3lub}XC7mJEs?gj4yPk}Oj z72E{7pv?Opd4vOLn&*o=V%rSQNuEiA zs;Y_o(nJrFCYqHdTEay2CF#(F8{tW`A-q6i)r3Q75Al48N3?<@D_74Ei zUC_PMgrG-7zUvYjv}r8je6&U1^lY_D)sqF-XwSu=j*S%)6V04niMk9d@|OL!Y~f7m z4s1~^6vkay2+K9wHb&&zdbJL3wRP5qvZ&TI5r6Q{lyR6BESboTMVQrl!(3+;M#9MU zT;KIH6l5+0Az@bcjMt{uv-m1IG;9xZ%1rz(bjnt*pU%q5}i7h$@{uj7KQaahkcqR)=ocn$FR9~&RAL;YrY^(o`aP6c-Ipz!Y(1z=mX|(;IXw^Ih)Vl>@~Q2c zGK~`x_tk`pG3toQqfeCU_E^l#xp9-2f513^Dg5&8necS zpfcxg`4hekk4_cRtKNG$SCOd7i-Z7%G!#_Dk?E5jI2D(uk=f6zj}!U5wI3z}ycCYO zjr+V*t4I<^Y=p_63L6V&<;ZkkJiRGQZ=$8aglfExSQx7SwISJtkqz0|tpgvF<-3C%5n+OxH;LRqDgewjjYkL=(i5RqLW ziAF-CPLn65>wrNi^{;i@y}QcBp&@cVF+J{x)FkmHh1pX_Hg9fxy?w5;y}r2Ceo4PL ziK(M3bh*wlt(By8l{`rdEa>*tm8JHUK0P--H$SyWx+-F8Eeu@JS}F&j)yWt1)a8xV zrrmY&LF+t8WkH{sKlNy9{*l({c|Cu6;nZU%=V?=`Cd5`pZi3XrykPO=jZMw7bY*?x zs(#|!#(HP*T<2>Su57j$S=pRBx3TslpZP&)2Da59?Jek~&6Uo|)IBW#ZL`S|cCHO`;Wy`d>c8)vU{F0>v$o+qaFZP9A` zUY?-31^sx}#i`3_S(vnSAuqD9p#7-ohO?*6==$~SwAc5a)sM`anNml0@!^d^C(i1N zTx&zqEz$Na*X?>)v{tz;S{svF*>V|`eVoX~_wr7aovM48i}^gs-RetnGh5wtHgY3b z=dBLCVPRc&V0k&b5f7r(TfL!oF@{JskVx&%hk>e>?KA@ zzKqld{LYthVY)1<#tYjUMmJzn?4uevyn&m3wx*A{mGo*qnQ%}J;HS^q z&f%-xV~P?lyVf7R$||x1GDQLolup1TIRQt{vG<>K(h;ZJZt>HxTSTOCjZgt}zBZ=B7Z zCHH!@BNYMF3D-ZTt5+!qFdEiHWEdZi({fz^a6+7ah_y((zIJ$hC@06xYT|sO7SKC+ zwWP;NvbgPIG1iXvJ^omA*gw>DLOi@asJse#tISCM)$p+bmoStmwS_kwlT;2}o7hrx zy~By%ic}t3k+`8s+8Z0I+Rh)CVT#?2*UH;vnWmo0(gp_PCGY1~#>Ws4j9J-=eCx2JcnWT&T4{h>H}f0IGiwl@qX$bD@$e zJ(USGZq;R4eJ1~FanZDTQe1d-#Se%Ck#wP(GsLe(fl-O}ChjG0r0l?~>9=K*8MS&; zZcJAY2pX>0roC5DNWBJ@Vr7DS>yu31Slik6@c_8h0eB1iZ8do5Zh$t~fo8aqq2a`NXQvehfx zB$>X%b(u@H%TvjmP7)B6vs^|1;RJwn*xuIv1W0Nw{1m(y+KLFW}??9gSXOMNh0J0ws z+?wm^fvnRDU<8IB>v|4kU4I05ovkp6^?C~A?<)o8K};z+AnW=X$lsj-S=X~5e#AHU z#rFIFvR}Uz+=5QF=QeN_$VO|czy6DsS$XCNyJTCE;Y2{nzSwv2;N z$1So-2A+w-E}4$9GSMb>WMWF%iW*kNPWs$OkqJ~dOpUg7R7X)1La8eOrqmN z*{1YWwo2CG39!(rPTG|8%oxZ-4pS|m)M1i~);prCmZ3hbY&MZAnmiFKCoJ33!(;Q= z8hFaBQ?W~JHm^+J5B!s9(l!=T2E3wmL$um96e%d;I?C5g?Gq%3v~w)N5cx7D>H7-4 z@(Mk+yI~^f``j%xVV_%hoJ00V6 zQnsB~Rt^)Ymb8Hz+P7@?vjP1Bko;xkCrh!6)F7-eUlmQIvUC&l_iB9I!Q zhB|`X`Lj!-yvq;$$gl}k{^n6upf{1i{$ye~Ly|$|mJ!}1~edQ1p z#s)aR5DgKOog>-A^?+T`f#}F?q~fFuzl+0EImqyp65apic%bvrcPLULnp9dP2C!v9Y0#HPB)egjW?=`<42e3wdq=Y zzJAiXu#2Khi zb)hyXxK5AY7)QmN4Hk=;*uBctA) z5gOT3+5Pm+5tP0u=@PHOnIM#jv6%eO%p9Rk%umlO(7wr;>BjhEiaP)Zl$uNyaukl3Qf$_8nq*bsXBdViuqT={xG7iUaMEvJsgE&lZbf4q}S+nV11%q zNp^KYspGxmx244eGB)2h=smOk9Xruf)~m+82@ro3dS+QCeY0U|W#}C=HgXk;J6Y3> z?cPiI(Br8u8S-Bt`D6(?Vc4Ff4v-0HC z%F1H$-;k6`DGFX9DVJ{{eR2PY%Sp7)B6vquM6vFpc`6}=Vq)kX>o3=v0wy8+Mwq3|3QL;^_I0R?LyK6Kv-r6$> z+YfF%A`lW15*)a2h655HI3RIFz^xKU2qYxng5Zic@PG5sE`^ke7O6;BaeiaZ*naQt zXTRj@n>W5HP)1O{k0J1$xAbv!r z;1Q7RISLMgFM{mnd*BNA33x5I?P?*8gS$a=iFd&5;0K@&J--E6*BS;7q5l;OVqHH3 zVUqY9WIIlQa8Y~@vaUaYyxyH~VjLU<*nD_aWk-fl)^pLm~GOO6M)DYl_rj>>xQ8OX|_R%;6?p_Z}Kk#P{} zxJ_2cz%y~!Bhyt@CfdY~OiW2fQPaxUNuT>DGJy&!)a+y8ZBsxx% zZAo8ct7I*n01K_@q(e#HjDbvKh3W~V4wIa<-h#4PhWe1m@QT)r(ptw*q@alFDqpv>Pmmze&anuit^KWN(x(JPm_*J0e6w<6?g;9V?$sh%*z3Kx&8@ z>Iin{&n}JfHZR$))^?JSN#n#-XbgfQs3TY^*{I81hY=Af(BpwiJ_OGC=1jgG0rjWfeiSVT4b=k*gB1z7i^j-c0O2BS?eF|D~G5s zHoyUfXo#Tf9LW~02keRtL|67A6(?o*o!xe22Og}(xlMX_$Y$Y7AW#XEbi%5{YQ2_sq;&7uj(_B6<(X1^^9A0kJXX=eZ zjT7FwA51)*ebB#z6Kg7uE0<>1Nh=K@vX9$A^Fc(|S-xoah~(Gg;81>G5GncF{M?;8 z%8H}G;XXK2G&t1w;ti}^6Q^ySpMA16)m)yLXw**7@$yWazJ=!UTgIyg-XiWvoPjFU z7VDF>1=?L1tBeiI0*LV)6sC^MpEiXl8bi_D;>tG$*E-kMBP;UqerQzA`o2 z*oR?pJC$waHF51#X>z{atS=m-+RTAz=HCsgl8U|54K(VF+8Mug!ksC^IU><(_PVe+ zQO_qkx}ntZ9`ZZV;@TKL)ZFhqdgePey``*Ii+vLy>Z~)NA$?gAC zb#=Y>{`J20kIy{$eZ@G+^E^-S9;Hr!Z@riQ7{7QzsYTY_1Sgq4^**JZ1&@ITz$z+ZtW_3Y-37!XUg45v7K-u>f@M-Yx;8pM)P|jIn z5s}J*8uXy7e-D)VejWTY_$Tl+@L%=(JCHHO{4UrAe+!B|?|@$bpFkPG7eJQOJa`RU z2e}&clluKV@MFw>SL0tnvGbpx==C4)Iq(3Rj)TvG!s9YH1h0dbqTT{a@NH1+UBw9T zw`(ADRz4tdWlZuM1~hpB`$&i?nAvS!1N4OQc#8!zjXiw(GQ#ASV*TNAf@mTYT3w7Dsq&w}=uE(TV2bCU%V$(l}mY?HR`4qVVt zVnWcv+;6$q25rU;aam#Wo{4NFrJBhB2)gBpfiA{Qj7?$MdZEx|;E)I8t=rt0#ND=e zbx^3MauAwp#Ez}Vx1-a#{2FOzvry*Mxu(D#>@#IC@Ht1uA~6rs`qsef)WS#@+Q{`> zq@f^nAqWZ6Ix?9yQDm`IB#h}E+R8Nc=eqE^&moY9yk7284M(}XS-RZD$|Q--U4Kx> z8gjQ-+cb&EBHJM541I7#GY@Lh1`f1+lgDBD^k#lm6gV^qt<9j+P^W0{UL%&cChd!5=o7dUMMZ9N0wIF-(P^QrBbGASAr zw^hSMjXL<$;(eJ#U9TJFnzv(1wH;cVu0Qf*Jv2BSHfEknwuKtlB=Ha_4zSU4d1$zt zR<5VFeMw+!SzK&e-z>RZHfu~h;eAL{%FIdur`JJ zj4Qci@b%5a23EIl`gorSvvT*CG8I&HrQ%cL1nbG&FrHG0?|YS+mtD$zjP0r~L8UHx z*H_p!*u7OquV#;Rui~Q0=P>~cX?Rc-N2W)5;8t9$hGsjpS<$%PgY(cV@FRD`ZL!Ud z>J&)=u`OUSsN5F0vvOrRu%6r(ruWe@#)KOCU9+Ool2GZnLb&((6)vpj`t8-ZmzFxq z-HnTL-Okmymo}CbmKT;TFWqUq>xQ{&)rN5qLEW+=zY1lQPI_em$r0JXNg(2Oxg;71 zkx`mFG&u?wJZ1ED6nBsIvN|-x-49LH6LB?3ym4-Bsa>7dR=(bu?`|y5Ep_hbSDTpH z%|ffAEYn(uTUW@F#K5fXTv<5RS=T4qGwqp)HPTgHw3b5O#jSH?KeW1jR!^+1wASpF zlMh{v1mfk>PjU@OyP45zqqoddCpy4Ub&)A z&#x?Z=jOX#yKs4}!^*;1dwyl&=hhaw3+tD3XZhly;Q#t;R@>0B zVPa`vsk3L-am<;=&+)`ocYBD=g?+g=HcX7mPU&c1a?-|`%iRmD7x(sw>OGscI$7jn zylz&%xao?C)uhZ#(z@XDG|cL3SWUy36Q}g(=b6b&A3URvPo0`jO)Zv8ty7cP8zvuB z;0XH2)3McI=N`!_A>nhbwwWdiRb|+ZSLU|vgu+x+&q|zeHFAW}B~Mj=d*=53<0`?` zYm!-sa6Dco9>Ls6B|b4t_K4ihy{xS-7mkW-#)Yr%mFen0(rQ(xGvg~c#Nh| z*)u|TZL4*wGfOgZkXB~G*p{_1EfM`qCBtvx4U)Fdp=W~XdJ$6TZ*v68liS2ht7T6CgrL~tNm7n-?g%aR>>n%h z^@%Fkd4nTquAJP*-c;mL{OC2RHvlWx=u$}xBk$c$J;gt`ekP4pm92Gsyprl(8y4Fh z{ys*iP%FI=+7fCur_2ziOy#E3EO@vD+RHVWkj|kf(MVb&;+PN#f zPqrt@Vxum3zJ6$jua1Cvez695h291<$rsbfxL>MtT#1<}1ehSM3SJg7;Oxg*w zCnUBU0V=wfKz}BEnMC*h+d=Gh4G&tW9%?!&ZtdKqxiDkR#3J$`w(#OK`z}mR-j{)< z)FPclfzPV?o^`r&mo}rar7o!z&tvc3px4;{zVRy>075-^m}Awisw;bZ&&qtdnOn6& zA3`rLsQ`b*V!6I8dmC5i%bho2BGOnQtecf8$Ye>aj@GMQBsMW_SI~x4zFtKUDaETb z8yL$ihQ%cSA{4Dq}a1E4wx4|!hJ@6Uud*BP;kHOD@ z?|=jFkKiZ4HjADIFN1QX+ao_%;|~&%c6ifo&F_XZ~+2 z`V@Es;SfnJf+EMOpsfE6_%$#D#r{75x4>V3N5LmPQhs+Fl=mmWRdBs}ehZX+?|@>b zw?WbGFQEAQAE5YunnQmCo&!Gvz6%OB{t2D{Utp2g>k=q-{%(bDg8Zpl{Cfqw140?~ zFHrpUA5ipr{^Lr08vHtl3DmbLybQ{F1HK5}0L8Aq0Lb0Iy5fGY?^qTCOYdI-El$UgHY!5AdO5st2=$`br=WU z>!C|WHZooZjZJKl8P^R$Q=C#f$p##B)noVS zeDx?BA-U$*#*C~jck6IhN@o(EyJFuULm%`D@~odawv6ON=V$cQeyRrsi};}lZP$hx z6AY~PVuTqT28j;B(4ecF(2(8Fs-V{2=`7VfHo%fs6disU3Gl1UNK>$zL~Nww(k6GmTUx7$}i) z$B0Ui3e&+L(B2FK5hl{HWt+6C!`wNOgckXHJ{+b_UheFo7LxY(^lGp>qgkHEQ8Ecb zEH+~D--A#3{k%|I~QDZwm?(*K}gYsF9Y+7ql2ZJrNm?&8-5`&% zTEtyd+oD44(}96~i9y^{*Osf_Hl`{)w2-b>GFcA;NQaI|ijz&I`X-K33@HTI?po(- zTh1uk)w^jV&j<|LHg)E73RhFs50$U;ZosL)4+OaKa8hUoc2;R2(H-y{%CwvIYA9< z^3Yf4*5CIkMlYTo%dbLFmAZ%k#%M68h@+rOdcZ3-Qo~?(V3Mq+-@VVip5Vq=;x^mm zrr1T2Kx8s3>6J5?vqoH|J@fHhVS1NY8kSIv`^qYMkP|9hn~CjH{RR%}+TQHO!fUJT zwa)hWg--j@!fV^B%WKQ47gle!9{Rz;w~G&&M|gGBl)UnJkxsgKjFCgKgOxypc1{wF zgh-ht4^5Q;15?VkW!ycQWmRYh-49Jw4?;Cbypap8s(qO^*I#Wfb+*?QR@*oAjXI|G zv(QGFWm?No>mqrQ7?{`Xi_44cEq!8kZgy^BlXT^>)~fH>sI{2)e5;er>xqr^)}|R* zSa-TI_Fw1AABdGca3YclQ4~7 z-MoHz$7T~7aqfb+buM)SKd+Nv@#s$5(mvRGOOD$hv%6k74h<}Heu_aY!^Fww2?Yay494(XuQ{) z5ryl6?h&8L7bF?-lZFfJeIZtPD%{E)eMb&^EE`g*DYiPYo-!&q1)&?2obo>2llm?x zeTFyrNIoLs#(R>Vg8W)jK|*FZ)>446fMl(JIxbsQ`#T*?=1FB>k7r0|;>C0a7GXna zi84}p*Q-vNqoGT!6o2HT`tx5cR^`7!eYPt9)w5Tt#$w~5fAK+_XC)zKv~&XT%l2;uv~;KNTwBlCBpn(`E^*( zYDmjx9Ocu@sO156_Lh<*X31QNK?`P~Fmww>zb@Q_7315^DA-j^ zU&+(VM%E-yR-}^p0|`nI8!5YJBfRY;xRk`7hr;o44^v&T1g9TMg(K!t>Q-8{)^c``8bOco2P%?2kVKUyUI}6!^9&q0(I++y8Fd;0bfwF2b zO+?cNw;NklkAxjW-1S1+M!%6v_Mr)ux?b!zzEw9J$WA9yvp! zwIaGq;?n1Kgz?P(+nDS(Bljq*9&Cn$p9V$GVsxWPSwWi*o_TY*Lrl4)!Lc>Vq}jJ-a(-c4jj( zYu8D`3j*;{k;Lny+icv#O=CN}Ab5aCeW=6}0-ksniAtb8@`A)ONbvj4%&yl-91xR? z|L6K${@?$coxeQ#(6Zv$%liax`~js7f`9lRe|UcLA*D_*b_eXIzvIJ7JqA7lJ`9e5 zp8~%Negu3Od>Sl)9|L~|9s#d{JHbDLec->c`GW!LNWn%KC4C{q%ncO1|%b;_n~eKCr+h@%s}{=9j=z;07pl{WmDQ zKS6TB_a5-`;2by%o&|;PpM$gD@3Q^?BpjfB9DEi$2TDG_0>1{nli~ZI*xT`lQZD!; zD7^j@6m7i*@?YKIkLc(3AR(#0f)e-NL5cgH;5WcWAX)r85BlKuKw0-Lcn16ziaeV4NnY_Wz$-pFkHjqx zCA1HrbRXeR9?=r1*cwV-a(kRtau8mi*FI7kd7kF|9IxbzB&|k;Cumi>dF41F6?+B% zrB1tMVaCL|9E7^+_$ANvD>^hzDHr(Oq7LdNbYeH~BOUlUt{Pnk9Y1o4GNx-m$#_G$ zP<10+^qeTt^)Q%sOD57zj}h08O;~n{#(J?mF@U25H?Hcq$70EeogqCQ>qdl;yZp_V z&~-fbtO>25DC>$LBG8IirIwF0d)I^#!;(Asrk@*zK`5m$o{lO^#OMuU2x8t9sV zk*IEpZrLqrD5$wnBqR*#qT_3)STy7+9(rPrhLqFEKh$xcD;R-1{FTF?rr{_wXBuv3 zO3Lv(9lDijEMxecXKc>#9KUEfNILZ(a^p@vQgbH4ps6@vDH=R97aoxScJ)K~4@@zh z^_`j-AS&b3ltejaB&Cun2DO@_BU5)In3DEf%mig!Y=oili!Sj+je0!@WpZwjw1~9A z(gkO6P_w<^mHa&@#D(LmzM($XX`NS_hE&OMA=Pth#GSUIMlJ1&%U-tjXr~r5{5TrY z!w`$Y~nzGaI;!cQ*s>4NwItpqA_4$Ty1KnY+Gutzi<)KA%l~l>P?jSmH^aF}) zVpTPs7eJ&4V7BarQHRSx<(Bng(BNRq8zi=<&orn(Dul8z9)&e%Akf9YkCC(v8exY_ z?Zkch0ne`fY}2f%!P)@w=?!w;LF;p#i5Q(n^rd@J7?IkO%0Q%SNkvn=1nd6pF&K*_`~8L803p=+dMI%3@0a!j|-(!+%6X=kkHT7#of zc4Of_(B~*v*{uwn9DQjbKUtVPK3d4XIQr7;#Q5a+#Hoq%xosDWe%~(WbrGorljeTq+}a|M32==Z5#?4h-wz10(yN-8;+g*9aXicPt2N(TMizwi_MZe^95* z!~MSAd06ioIM~q#rQnJg!5om`}`Dox(o8dyu#nZ1xSWvq%>?*QSIg9yXY_e+e)xZu;Rcv-v|#cwI*~*taBJHDNB{@3vT8CgK*IWeK)t zd?QV^8$)u9gq!&5rn~|zLgW<*cmop{*bJ&A83=3Z%+VQ4lUQbKN%}%+(@tJs5sV3S zlD&k(0P6*>k^#)NlS`7WG*bHQrXdA8lF3H8-3GA27(1Yi1m8>xKp{1~RhFg>t|_rB zAzh}ioVt`O(unb|XkK7e>=3T9ajjVbv7eTB%luu-FOuInwwv}_!d5|c-Tgr!8FT|} zN{;y5P?ne$O{kTSZZfbWPDQR#$TbN{0=7x4P>749XX9#OQmkA}m#oSXsXWEr5DG-B z%|Qi~sHn&LiVc#n3*xA03$oVxC4$Ya8=>bCKHCzZ6l#UPkk-7dTOv$Qi_y6L-G6b|l zux&Z~8w}W+2f5P{kqYrQWcnt>u?210a<)WFvZF2Ia^&yxjRPwpA*#B0v0Q>Ld##Ap zvSd1!PIt~`t)Y~AAZhh{{1DHrJtT7`J zZzrwo7s=h&UDP8v33Q2Ew}=i^bVb%(U@7ZNpi*((lYo35KTv<0MiJsha!sUinXs>? zQduPgk9)AvCPlmy1q*AtY|9BqxI%>CfYq&oL(CTr4MVZ2LjRw)7Uk IQ074W2O{+X_W%F@ diff --git a/payments/locale/hi_IN/LC_MESSAGES/django.mo b/payments/locale/hi_IN/LC_MESSAGES/django.mo deleted file mode 100644 index 692bae973dd4d2378be0bc2925675f8907af7490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmaiv&rX9t5XNit#L=^dJ$SQ&OHCWP{)s>-At}%xa9_)cYw9jpwniVs*YjB%F81h` z{4&YRH~1XO~*GqMTtqz;n!Uq2?x z(kwpy;^7OCR#qsC@zrBaD?aUYzvoijlHDsegRu8?wFdv_8{@tR1F_oaR;rE>|5;jR F@(W9IUxNSu diff --git a/payments/locale/id_ID/LC_MESSAGES/django.mo b/payments/locale/id_ID/LC_MESSAGES/django.mo deleted file mode 100644 index e2a2bb86f02adb7387f97cf31538ee15a10c2479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4622 zcmbVOO>87b6)qq@V15D#{{(meylZFO6Ymm>@3RnuM5Q#<`L zTUBjmHoJ&RloLW6h>*A-Ax@E^2q8fv4oF-8apQnQq(}$}g(C-U9Qa;!_sn?z5GlF+ zO;vYQz4yJZ-m7<>eB?(0?F62u@woR1aR&IO_v0VhuRkEf2FBh3E};L|qe46dd=B_H za1Hnb@G9_wz!!nf0wdsufj34DheOIpBY)_m4j&L=*j|fFB2L0(sqi;1_{0 z@JZk+z^?*-4E#LsH^3D57vQIWElm0f@I@f+^IhO0z@Gy7`=3|%Ti{30e;arf_)j2z zcMQgV0eAw){#*jGJ=cNw6N3tG0@-voXZ_(veN5`PDN3-~V}e|G|#%mbH!yxv}g8pt}h4P?7t1+tw#1oHPktH%ET z?4$qZs^7#%uc5yVWIx{q^7rooL8s>klJJfFVl8~F>c*Po##(|&;>+AYV~sLjY%}u$dVJ$E$BjAuG#=Ip zB2a|XA?F+6-6S!Wyr-}baR+*OYHxuJo~qC{sg86~42&yq3aBW0x1d1fik$PE;A zjm)eJd5qFLQb~il18pfxq_s3M`GJmxtSFs>12c2 zjtYxK?%Hox87&iiOBuhAt-8DrEGKL`Gs1Jr)w=jqTBkBw7{9J`@CW|M!VPkRB_rO^ z*d;m~JYzVZ$;w%dk~wf}}(PB9h%dDyRS@|3`l zQ8x>1R3v1QkkRqL@fh|!z*tWvG7D9WaA%ZT?drZ2J!P?=ilvF{(%GIl&j!pdfbttE zbo-f1)gr7?G8JrPPq9mp2=g?RWYtKrF%cyi%jA6u3u9CkYS?Fs(I_|kvNwiXur$V} zhjP3`m|i4Nb{q=P;JAvfp_l7lcf@od5lIbF6P?2D^0zJ0vd>%2vUQwfnirX~4O#}_ z5EW&4JyrE(k+|B#v8cJIkZhhRs4r76H>aAp`t8h6pk`Nty%yI--IWbU4 zl7mPVzO z^#FbtjdSb9_~BRKBoHYFCao~a8Lc>EWHFu`Ii^QwnPEcA{H|D`w7^m6YscK@^fCh0 z*KuQe^@UDrv%7z3wcEPB`oeyvz1i+u>)Z(*_`&M8{RgvKSaGOIUD?8?lYWtabVi|32Ls}Pfxe_GOFIZDdS98Km4$f( z)ivpKPrJG8q%blGF6Jh+P0B{TYtNlJL*>tN3mH9gj!rI~nG}QQmp#sel zdvb7C*^By{`E6+oK2X-op=V~P?57I876VQCmc|W5p^SmP>SZL6A(@OA9&+LLR}FSc ztZUTu#9N6CJXw@TY=PZtH!?q;?E!qjcx5;>jTQ_RJ>w?EPq>!_)HSVEW}sbDrdC6SJb zA*`T0QG+^ndKpx&N7~8(yHSOBn5S|HmPGJmLJ@r9PbOr{RQSn$xQsX`3@1R#tm@n- z(nQv`IMz}5mdiR~C5_YYjdxBV|=+39d7Ko^u#t?S*K1Y}&%3QH%v z4i#BX?G1_3Ro6)vQWyVnd(Nv)j(Fx}`JjS-1?r!0I;C$lBG;UkJ$ zU0h5>5)X==*8qpGj0AWb$`qQ{|L+~3toyiHRF?s(#occCpq4)Qo59RQV7=6b^*Wu1 zoff86gY#NGq0U4}(^^ zVwwt$vQy?Ya3QYTN7n`0XbU+>mXq@Np6>+H4X?6dN&;|j2FRI-PhCTQC*ZS*teTbT vtPb+*oxrD;@~xG~dI;M?#pln=(eL?)GXF=e3g8XL9f?94{lM$O(H!?*`V&jf diff --git a/payments/locale/it_IT/LC_MESSAGES/django.mo b/payments/locale/it_IT/LC_MESSAGES/django.mo deleted file mode 100644 index 213b45c6f12d37ce5468f48228a8ad439755e75d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4737 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 diff --git a/payments/locale/ja_JP/LC_MESSAGES/django.mo b/payments/locale/ja_JP/LC_MESSAGES/django.mo deleted file mode 100644 index eb0a331374ee6e7052e53f1f0dba032cfb841330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4941 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 DX1LgC diff --git a/payments/locale/kk_KZ/LC_MESSAGES/django.mo b/payments/locale/kk_KZ/LC_MESSAGES/django.mo deleted file mode 100644 index 692bae973dd4d2378be0bc2925675f8907af7490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmaiv&rX9t5XNit#L=^dJ$SQ&OHCWP{)s>-At}%xa9_)cYw9jpwniVs*YjB%F81h` z{4&YRH~1XO~*GqMTtqz;n!Uq2?x z(kwpy;^7OCR#qsC@zrBaD?aUYzvoijlHDsegRu8?wFdv_8{@tR1F_oaR;rE>|5;jR F@(W9IUxNSu diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.mo b/payments/locale/ko_KR/LC_MESSAGES/django.mo deleted file mode 100644 index d02f195f56b1aaf5ee6b3a2ef282377a62538f6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4746 zcmbtWTWlOx89qQSU|KG1xs(7sEhMptck3iVt(=Q++)XgVcI0f*h6-8Z-LvayXJUt4KLHzn|Ms6h`UqpKm_G^p60i$M zc6))}0w#e^07rq}0p@|<0ImU3z>k1m0YY zUVr{O;Camd=+A$OVr<1c4g{U92527*;)}FEdC`D`-Q4M(_CSK{Yq-9Siw5~8tZVxsu(;fY@RSo-mmC!P1Td!6iPf~=-LoB(!x}1)zB?&=-loX zJZdVsrNn5Br;NDJ!aUlqT0EvHmc`SiF`&kU#g#fEs%{H2p~Qsi#hsA>I2u&#es0%U zj4QSh<{dWASTM55-%(+zil)9POxKX*PstD>=WtuMLVG=HQQUda3Ej$=u3g1OKFCkW z*!_kHlX3EBTFrd0-{2_$My#}msR=d4K|xBjEFz(q#}u6_v6w)vpq<*$jD-K#4p(S)dkl42BPpP-cDEM}xq3b#aBpsrVKw?AuWCk_x zgpd$ILtzCpVDOls+mJLjGG;&~SL_Di2zw-1=)(1?leW|EeoV zlo@6m4GhwtAh(Z{1daz(MUAtxGL#a!9msF<+zJ+OW2)#|dk8nK6*>gs!UmHTGlgxc zf=b3MtZN(EbOSAQOt89ppB0|Upj8s8P23y&Efg%FCc{VCPIN}PqP>UOqLG)|PV{zm zbaiwd>pT^@?+b0OxG&VZu-KsRbY*4S<0O&MKynPHgG!AE*_m|EP>XoST8R+--#B=@b2{)D7P2XEX|23alUp6(w-+M~T)ZJm)*{OzEpYNyZ<@01C3#6!n% zPND}|dE|J(Sp%%Sh4I-lzs^`#WqYBKh)jBaUD3;)qR}rZSU@iwzWrp zaPU}91S=gq;r8y%{n(}_GfGl~qB!jakFr`JcE;$rokDejamayk9J3>NC$tki#A9IgG_y9Q1# zBKJD;_ekrGEarG+bpkZF?5r-x%Qs=4k`9(vklh$9NY|j8pLDKIY@h_3bD6s=vt?vf z%@w&E%e$K{W}VA(d_4pvXQnFUF>>XUW(hz*rF@Qxv$Rqv4dY!DY^rVtRrMD|3I=uK z&hm;Z6q%f#fki_U7+nIsXd@XFEzReQWFXWygJ`SQ9xEN3TuqN-HkymaPtN9#vuFuO= zl(4jk`%NslHggLg?=Bd1!^mEN)SSt@ypEW1;}T{A4#G_4#+=a{xq^gdrtbY|QCS@U z3DmH%I7y{}EM;NMS-{;d%V;L(gsh{5kujI=uF10#R8TBZu_lH|r_N#-MATe`|JP3r zVhfo$%fk>kSjam!J|M05>t4pSa@2it_(I-zl$-{+D~%gYiY7*sEkoqD3eLnZ-%x*A zL{^&@XQ!OytY7qd2qt*^Nd*Jaooi6!QVDGH>g@V)ik5$O4b%qDHtFHP%QzKEGFy~m z1zE^4?}X-1g0l*#Ks3uM%sG$dLrc`3_m!n#dFI?^@;tgWlQ8_rzeQZ}K>j$Oa@3r` zsqMRBmD|IlDl}+iIg7CA{q-*puLo}8NRY)5QZ4DSIO1HpOFc0?w%!c9n$ODl#Ruxr dJO8NB>%LKHqC-C|6{|B7_x)7ywg>0te*i^TFWCS9 diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.mo b/payments/locale/nl_NL/LC_MESSAGES/django.mo deleted file mode 100644 index 5ad211ccfc5ba17db72934108e53de01d1a240dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4630 zcmbW3O^h5z6~`+fIAQsA_$EL(V0$;-*{p3LqVPaaZgh56Iq2f$5Gzw|2_B;_;v7e;9o#op&nxsqSaI28h98K zdv-yQ(*-{R-U2@eeiszIehiAAehUWhAK-_;udrEz9$Wyw1B$ z`FHRb_)idb790>i$e8Cj!Xy5X0fh@&<^3p+`1zweqQ4BWS9~Bt^N8M}qu70dryjVb z7;?T0(YqePSsB75R4RNebK$7?OSmC^!A-@Gn3M4w&qsKKD^RlFsQ44J3;QG-#eRu_ zV(i9tykj%n^{MU~7bUUl>C~F2;azf|{m`Z+i@gilJDv5dZl%Tr(~&hj@R3cHbgLf+ z-APOcdYJlA9ND1FjF8x6Htm{@Elw$BB7lR&an{$_jKs)fW=XGSIu8iB=e!-8#wLkx z+q4iAs;LM-!Xuk(`)@MLq6&J+OEr3~eXw z#vP3d25|`DghkykPMc20Vym1mqkC9VrnW!Tnb$pp;5^RjrhcIDQEG4HacU!Fl0>I* zub;^p=Z;uwo5Z+|tr2sEKEzo)52|eg0&UNvQCK|NPS1-1N9S?*P20)#oEg{!w6bQP zM9a1nlOomegMrb(4vi=i=_E#s@9IvTrq*?0^b7fL=u`QzeSleL+T+u)Iat(e&y&a< zhaoXOuI@M0uhnmN)Krj)OpH^Lc!1vJd&mdnT#lUe)^TkHK6hDI(#tp;QfcSwt+s3O zB&$_CP_-{A)WHud>~j`%y{UuRGplP+I#ut(~b&Hm4slj?Pz`_Ur(! zEkK`HB}WFXw-Xy!9YOl&J`+~t?lEN{sNzb6Q?m}%^OG=MP>Jt(H88Kn1MXwytLhTe zAa)P@3ETRUTgBYWm$f5A^~sX-wQ^ z2fP$gBnd<|!;?X!HcMkGSEd8&$z5T3ms@5$p=RDIujoNesC45@eDC#ZTv#{mEnQoE zd84`6+Pk#cYTj6Vd2eHVbA99b#+}9kKUjUK_+a*kpvJc3Rmh8U(#;c`+#x%}5{S?) zl|&;UQl`nH^JT!ml=9ay?jFvvDl~-dN9U`FP)!nVl$x=c=)Ar4rRG{|Z*z5{c}Krq z$J8VXT`RLpV?Ao@k|&9Q72VujztG&#r)TCM*0-0|wl>bQ&GmBAvyB#MZ$)3&UT>}MT-MFaOIHQ|-?kO) zl7>s>Hr6+qQ@c)L&Kf+2iH+955S=soYWDmvF|j+NJAIRqHqKpdU2MEC{Z3Tx+O*Mh z9UsBE75zdx&gQNqd1{izMV}4=rwxl~ICtudE?>{hJALGwKDlsaPSv$|Jxo_h zvQ4bhBdI${Vy$Z=_BIPuWhQ(3Ve#>VzqTsNFY=wqk<>#CC0+Dw zyNya2WdK1_V+oHY>ve(C)b5OIEDk8HAw$PBzS(0+SdB1^imFz*9IA7t4{bQhr)}H! zd1Rg1F&td}*E^^#osYU!KrVp-eJji2tYS+fG^y)kCDfx2bFW%Y@kj+JV(1=v{jC1si85t;d8*5yN_ZHjON(tCP+EF3vDOceN($Rgwy)E-w8=Q_AX4axNWs>>MyDv5(p}EUD?K zfy_~7u6#_w!81bhvWpMeGS1_`2X+lb Ks?(uPa{mRdbW`#G diff --git a/payments/locale/no_NO/LC_MESSAGES/django.mo b/payments/locale/no_NO/LC_MESSAGES/django.mo deleted file mode 100644 index 31a4d3e31857c4f7e2c6be2a7b265f5a7fe6039e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4565 zcmbuCO>A6O6~`}a=!YpSv_SdhHju<_JQF7oYURXHZD*30#CBv)T&hY~cjn!hd71Yy zx%a(sCv8|Db&1%3Kw<$4jKrp@x*G0R2Ty??f^GQx8~8o2 z!D8Y5S1gkK{|Mre`Um(d_)k#$dmN|h;8URR_X@ZKE`h?!yP)jz8<2nM1O6<4AAu6j zzd`x^S&W_lUj!wN1#lX?2?|dma0mP`D7-$yV&U~Tcm`~M;!h5WUhaaj?x&#e^#S-A zxChF6$C#A3p9bakv;6rixCBZZO%N*7Huyy_1ci?ufWqs0U>E!yC~+NUaRSbPxTt;s zo&?_mp|kK6Nfblk5-ohId{jud@I@Yl10<+kKpRF5H7#O#c>wAKu=XZ21m)v<*UKd|kv z6Sg%J#G&^>!mMtaM4NWo607Vm;k&OZGmhWsEY)3%Kpy*bTpDXQa`sLhIvXexMcRek zUM6$wJ7lh9B9pZ37zt;P`Y;?F|nP&D{EpU zUbd`+6sUF@$3}ZQFyc(0qYyJ`N4In5Y|;+#&*y_d>g31Ph_LXq%d0zPG^<&jM?rE5 zg@kZiov+hxkMHiO14Ak>A*4oOjNj$G&*So0wwz?^ls0jiCz-G7IS5BoI!VV%ZO7zM zHg<8O##~gWeHvTTmss3Q^_aQwuM<;M99l%zEtRYX2GJ2?l5)s4Q#~6+DMX3@wmYHo zV=iY^*wLdjCozT=iH-D~oHHne(6Kh+U@aO*bvsQmB(2ljjmgv|o6-*%C#I`K+ct)^ z8RRqR=@SNMJ}qK}8;!4&{MU2?I4Squ3_dSbj&J{dj^K7m~Nx zh?~NS6oJ5IFzJ=EnG3BPnfA;_htl*AEfY+riTjEb9p|J)c(vE1BVTU>42)9;LP zYQGBIEUQdyC8%vtC&__%-Pl@LYHaHB^||`o)CT3sWwlk`4TIWJ-u1O+Ik#Xs)GOYwKJ3 z;_~`hb8)%(+Lc=y4Q5t0>dWh^mspl`bJMl8CS`A4FKw(eS2nNd#@f{zg8ysTJVl_E zq*JRatBr%W&JxZtI!B4M=4gP=nSCoeGl)!>T+r>Fag>dPTg@xAR}bD3*E`nL8c911 zP~E(KwH0PlH>2E{sCFfFv1hkI@#q)MUC`z2!gQivTF_@_E=;LIy?Ado3CN40xec}N zyKrdf0R2&hJZ#yR{cTDhsk66R<#bsA zx=i4hAJXt}KH`Qm3-<0i@srgQB-x9iZq#B#)i`85buHUVqaagD(x|;vnTEwV}3sZl4pA8pp^y7Xyb(W}0+>7q*$E`5*)b&89c>Yqas zjfIa0pY7d80DNB!;ZhE_>TqnNt{7@X*zeoP;0X1gSJ&0p8tu6&PL?M>exjqw0WhuoIwnbS3%cAnz4YrGFB)Zst zy*M>5tg0%iTGbK@S+`8WmKZ2P`$(7dlvc61=!8}0_2vyb<7qgk=Q?9fI+ zITkCW_N9mSVSOkM%w;r*L7e0^MxKnv|6a^4|G@^+%e&gWKiE7-n3jXnV`bg5w zs2gQd@B1(|d@X(axQ?{-$&*xYkyt+W_a$&J@rWu&%rH^wE+BCWsrF5TSc?BtNXj8w zC*q+RBwaPW@zqHmOh_9sk#%aRdY9X(+w-wT5}W8YmPm%mcp*h~O}-mMA4%Uv*#sB= zg}Aa}6?CYHdtZv2M1>1JNGO_xc*Fm{_17o&A)u|WkR|0v+C2#`>PvB-)=`wW$!>p{ nxnys5xc6(ybYLH<$0B`1;)mLO(^)ACD7|I+_JK|RNJaY(xKd1& diff --git a/payments/locale/pl_PL/LC_MESSAGES/django.mo b/payments/locale/pl_PL/LC_MESSAGES/django.mo deleted file mode 100644 index 1eb71d668d44bffcc1b9644d9404a6c581c01f98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4663 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 YSkD8~;)BfI-Sb{io_3JK=UR&Y0#KQV*Z=?k diff --git a/payments/locale/pt_BR/LC_MESSAGES/django.mo b/payments/locale/pt_BR/LC_MESSAGES/django.mo deleted file mode 100644 index bd53f1fa830d3b72120a7b2d8e136f29a9aa39df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4700 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 diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.mo b/payments/locale/ru_RU/LC_MESSAGES/django.mo deleted file mode 100644 index 1c89cbd059b535c0aa7e806cf89d26eb45fa1fc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5756 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 diff --git a/payments/locale/th_TH/LC_MESSAGES/django.mo b/payments/locale/th_TH/LC_MESSAGES/django.mo deleted file mode 100644 index 802ef98f063bb3f9837794bf81a6151baa65f67c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6780 zcmb`LTWlOx8OIN$wA9>NXt@o|#k;#?pxPU<$cQ)iP<`e2QBXV-&vXPlW? zJ8l~wO-kA{5f3D7Lx9$)qDY`hX`0Kdgai_=yd!~xCK5tI;)N$(D#Y(QXJ)-?uZ>6< zdG|l(_FewpWoG@C`|m!lxHj*D;_!)4RLyv&ZfTHII;N9SxpzOb#;qSnYG5#~S9sD~e`_^In7r+gm z__G%jdk%yAsp$-lfMU|rE6hCi)Q{eBxkAmy&Q|fteE69|(3a$s6Ub>D=VrlgfeT;_ybU5kjp5WOunfxhAK;_# zch~3eo$)$?`y@C3GHr5zlrUE>-)s1YA96vriGkd&F3~R+)U__jS-B*apj>@f23%r0CL2y9--JWCq~_!j4xq;53MpxFRO*ay zs&#y%93{`B2F!KHbLS4Yv91K6o_73l&GV}|be(b`@N4rrm~lfV_5wfBfv@9fR~JLa zkDQXs>3UFhYyG-7?M1p&bD~Jkgu$#=b|dYy3Gw{c4J%H`HCoI_1fXcni>GzmCb8_q zPQMs&u-ghs9t;}8Bhjd(f; z5m^?EVYE@tO$WN}!bmjZmb{8r(oj(MqDV;Cs7sEool?ogSJBXBd(^L--2YI=fvzG1 z^3YcagSv*J&^^-dLbt4(T1|&ubvl+g^v*Ij<V)NJ zud7s|iymf}g@sk?nx*>kSk+G4{ zgQLd^D{k2JU9+KGMWp6jn^#f8w3AAs2FWG5gC~VZ+J(|+q(p3+T-$34hD@=mw(eHX zvaB>D-PiVJ14%V$yyeiDQ!Se(#-A7-Do&2=8XZ2SpU-Qm)rI!kE>jpO7Y@-UsewT~ zd}w6%@BzKGf1rP$XM%PW#)Z+S>Xi$-8`Y>#3^?X)en@X08Xqg}8Y+H!&%udd zW=1CZhsH;Da?GzboT^(W()I@R?un7&$brZ8@Yvpcg8%KS+W{2L~x2;Fz&*C)sRhqn;CcjRTx6qN}FeltT)o+ zmGn+*TA3Fy^t{n~-srNFS?*rQ?O8~Zrm^|;G)WAb@B+pBEokE_1V9NsoaRisy9XBE zJyr{kICaseIF%;L^a>Rh(d%FgEOO$ti5A;lN}B}uoSA9KL?EWa-B}ZO7&p;f%&B+G{tFoQ zN}Aj>iqSz#5Mgh~J?tQoWCwXcD6Z#ufo?2g!&T0+!*1o9!><}umQrS5>86p`C6q10 zRhp3OwkBG<+bprn7(zN2u(?b2pb`U#icz1DcFQ=#*>*x;+xo}OlR4E(C145;nP6nW zM>;vXln1*HyGQ_NzO0PfoMSu8|H9aVRh(2!wZn>-UXZ9H;X zn|OfXl%jRY<{2I^bH)(C!Ivpn5|TMU zpJRapBzEmZ(LE*F-+)axy0{2sI6_Co7n6v>1Kcxgv4qLYTv%l*2E&d$!*0BQ4#Y8; z9nK;yp|ffTF-x>>s9^HCp{z@#@ao;kOkP%te4q{oy1RkVE5ue5<06%fLDpi58!tO7 z%CZ?Td0w|K%RSL(1(Cj*=Z6GcIC(!OTP`lPIm+1fFF4C9S*)PA#ClUCDy2r_QMVRi|^xDg466I2plB9ODYXYF`6{t24dSoU|4OlcXdH6 z8i^drmL4_%%bvJ~A+ZUGSY$oG1X2JS^OF)-%#pUw{7PFnzp&Do#Uxq6fIP`@7EM^q zH-8K7zrUPrH2{pI3}69L@fla~j+YGjgGmf=t-W2~<_d4a@+{!xiW)?M4LByF$x?i^ zqe)3l6L(Zxu}RFhqsooHHubuTxZ`6&ULla9-#?o2H%Tqwk zSQkkFn#m<|zNO06FYlp^m5T*+H7Kqf6usha9mAuKbV1)=eTN ztWt7|?IEjVOe05{CrtYDUdvhBIrV?|72nlg8)U=r;`78-ZBDHusO|pnay`!?QjmMw zKrFL_k5Ed~Oj5#N-j-X>0TG2ROD>!FWo4Tq9Sn6@zM2@c-g`U9qmAePP0%I<2q&*l zh|TR0UABqXYOyVY?7%QY@kg;+JLxaWER^GN1VycXJE;7}&4m^J?XZF^`RhS9qtt%@ Dz+{T@ diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.mo b/payments/locale/tr_TR/LC_MESSAGES/django.mo deleted file mode 100644 index ffd19d027c5d010e07140681a3508e8052c78a76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4632 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 diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.mo b/payments/locale/zh_Hans/LC_MESSAGES/django.mo deleted file mode 100644 index e24ba8c2a050fac5e8dbaef37e7de22eac51bd8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4246 zcmbtVTWlOx89qR1sJWGv`>m&d6PtKlCl*kgi|Uw-F~oLoHYrsltnu#I-GSMe&CG0E z=Ylpjd!5)>Cyi^zcG@_N(=<(Ow~4U5wqsNzo_K->BtQt%nb}D-_(|Xofgb_B2>d260{kd23)~JI2R;q_1F!=44}X5$ql`5`eiHaNunkChJAq#T z#(+-%PXfOV90h(6xCBf9e-Hc&Fo;cG1HK5PbAAqd1b7KZ>!*DDCGg{r{|MX)ECOlW zdKmvD;6@<%(+nhgo(JN`;y&&Nl0653)xbd@`8fyd0{#m4G2r^g7&{EC2V#iL0yh8` zfCBOSEAXF?o3WYB4Pq1Nm4I-GnLyHW$d@y~Z$r-dE>^ir!rCoX)01T;|C%>jK^qJx6$bLbQgYM(|Yu2AFXWCwAz8lCE+)Zm)i z$Zl$sw^E}RQlprD3jHY(&?p99K&KcG-(bGmsOG3q&3qP}xB^PL9HlxV4z5S1awMLS zuWs8Xi|#$bCRvKr&MkRkz1ReHFV6uM-}nrd)O}*q z<)OH2@US8o22bkR0XZTJE|n>fRa59uDJ;XwIVy)aLXeORgMv`Q!;;FSa9F@sI-$&Vqn1e}|8;I^JO(8Q9?pyET7n}+ zy4atRbrE5bqHtY~#Z4N+xd$-TB`J~`7A1r`NzIVWl5DUpVL+jXNqWSn+1jOVCj%<0 z5b~dju-U0f2~iEJgp^=pWtSkAA}p*W5)wB=QX*p_T#=zhi}G+v*M%CEVV{voCN-TV zyL#XjERA7lx71U^u|1_k)D2*Wj2Qd*)%l^)*AaGC5sOGNf~v>~*zJ8Ase~ufk>%0a zz@>ziQca_l*CF5_6<4*=RuPp_idizThm~UCBR8~!0Q*z{b2VOyTxqs!$oGR2>0%y} zc~S!D;G?P`$--oDp(q*xNd)MO%DPdCWet;~yhlr+Fb)V%tcUMUAqO52qCzN0tN;fz z9@bP7l;&DWF9nlJW(9vptE}=jb&3R{Rt@@;8+kwi*Si#9VDtb;ANe;I8YuU0rP^R_ zN{LhD0p?Y!Wn9e^EvB)A^pc!FKFU`4NniYry;~;G5((_XJ&77<;K6+@ zJA!+7eQjNBT}213E8PsV8ZkK%*pZ4Efsod~D|WXBI>Z5)HUz$hOQnHtuG{>rK;5Q5 zeI2i>Z`k~ujdf@hyClO5gy@0# z+NSo_?bxQqQc_F=Lb&!C_>PX2P|Ke0^I%)^F2et`t$`nm2k`6}6|F6;!MmPqf zT~Y!&H9cW8a5d?Q#6PLL3?%2E zhZQH%g{wzBN9^HV@1t;QA%CWiL3e)mg43UddZ@88Z!&w~W?^!YS<4rSmoM6Hk2*JQ zGyBS$7-ogOTh`)~1AQ}N&cGN>$3b@b!kwi7dN}WWG&}9_%f->xn4O)$HZLp;U&Zu@ zot?8Yy~VNf&_RJ-K5L)6>71W&29DCmtvBrXqX^lpAg5=IQ=|yiEQK{q5oxhTEMlShVii@L#=_|f6-*0O^ zw;BigxJpt`Q>RWykt);-{%$VB**Nl z$DCIuoMYDzers{jS{_C~i~ltn^U;=TAGYEZ9rg!qM~jn~P57 zthIQ9oO8ow<#P7f(f{^sbcSz%Qg(K<*q3E%JQ%s;3}@~vjjg_h#M8cW3eRfNU+Ja@=&da^?Xkn(!y?n;d&+(0+Ra|8Q}l`Wq)u%~YoTab8;OxpzS(`_yap#H>Bri&v)fN_7^dXF)}9#x0bq qD0}QCaeUhDAH?88IpEP5ye@mUKt=4.3.0", "colorlog==6.10.1", - "coverage==7.11.0", + "coverage==7.11.1", "click==8.3.0", "cryptography==46.0.3", - "django==5.2.7", + "django==5.2.8", "django-cacheops==7.2", - "django-constance==4.3.2", + "django-constance==4.3.3", "django-cors-headers==4.9.0", - "django-dbbackup==5.0.0", + "django-dbbackup==5.0.1", "django-elasticsearch-dsl==8.2", "django-extensions==4.1", "django-filter==25.2", "django-health-check==3.20.0", - "django-hosts==7.0.0", "django-jazzmin==3.0.1", "django-json-widget==2.1.0", "django-mailbox==4.10.1", @@ -45,8 +44,7 @@ dependencies = [ "djangorestframework-stubs==3.16.5", "djangorestframework-xml==2.0.0", "djangorestframework-yaml==2.0.0", - "docutils==0.21.2", - "drf-spectacular[sidecar]==0.28.0", + "drf-spectacular[sidecar]==0.29.0", "elasticsearch-dsl==8.18.0", "filelock==3.20.0", "filetype==1.2.0", @@ -60,20 +58,21 @@ dependencies = [ "polib==1.2.0", "PyJWT==2.10.1", "python-slugify==8.0.4", - "psutil==7.1.2", + "psutil==7.1.3", "psycopg2==2.9.11", "pymdown-extensions==10.16.1", - "redis==7.0.0", + "redis==7.0.1", "requests==2.32.5", - "sentry-sdk[django,celery,opentelemetry]==2.42.1", + "sentry-sdk[django,celery,opentelemetry]==2.43.0", "six==1.17.0", "swapper==1.4.0", "uvicorn==0.38.0", "zeep==4.3.2", + "whitenoise>=6.11.0", ] [project.optional-dependencies] -testing = ["pytest==8.4.2", "pytest-django==4.11.1", "coverage==7.11.0"] +testing = ["pytest==8.4.2", "pytest-django==4.11.1", "coverage==7.11.1"] graph = ["pygraphviz==1.14; sys_platform != 'win32'"] worker = [ "celery==5.5.3", @@ -86,14 +85,14 @@ jupyter = ["jupyter==1.1.1"] docs = ["sphinx==8.2.3", "sphinx-rtd-theme==3.0.2", "m2r2==0.3.4"] [dependency-groups] -testing = ["pytest==8.4.2", "pytest-django==4.11.1", "coverage==7.11.0"] +testing = ["pytest==8.4.2", "pytest-django==4.11.1", "coverage==7.11.1"] linting = [ "isort==7.0.0", "bandit==1.8.6", "pre-commit==4.3.0", "mypy==1.18.2", "mypy-extensions==1.1.0", - "ruff==0.14.2", + "ruff==0.14.4", "celery-stubs==0.1.3", ] dev = [{ include-group = "testing" }, { include-group = "linting" }] diff --git a/scripts/Unix/generate-environment-file.sh b/scripts/Unix/generate-environment-file.sh index 7c57d637..cdf9e9fa 100755 --- a/scripts/Unix/generate-environment-file.sh +++ b/scripts/Unix/generate-environment-file.sh @@ -43,8 +43,8 @@ TIME_ZONE=$(prompt_default TIME_ZONE "Europe/London") SECRET_KEY=$(prompt_autogen SECRET_KEY 32) JWT_SIGNING_KEY=$(prompt_autogen JWT_SIGNING_KEY 64) -ALLOWED_HOSTS=$(prompt_default ALLOWED_HOSTS "evibes.com api.evibes.com b2b.evibes.com") -CSRF_TRUSTED_ORIGINS=$(prompt_default CSRF_TRUSTED_ORIGINS "https://evibes.com https://api.evibes.com https://www.evibes.com https://b2b.evibes.com") +ALLOWED_HOSTS=$(prompt_default ALLOWED_HOSTS "evibes.com api.evibes.com") +CSRF_TRUSTED_ORIGINS=$(prompt_default CSRF_TRUSTED_ORIGINS "https://evibes.com https://api.evibes.com https://www.evibes.com") CORS_ALLOWED_ORIGINS=$(prompt_default CORS_ALLOWED_ORIGINS "$CSRF_TRUSTED_ORIGINS") POSTGRES_DB=$(prompt_default POSTGRES_DB evibes) diff --git a/scripts/Unix/reboot.sh b/scripts/Unix/reboot.sh index 183c8588..2499628f 100755 --- a/scripts/Unix/reboot.sh +++ b/scripts/Unix/reboot.sh @@ -11,21 +11,13 @@ echo "Spinning services up..." docker compose up -d --build --wait echo "Services are up and healthy!" -echo "Applying migrations..." +echo "Completing pre-run tasks..." docker compose exec app uv run python manage.py migrate --no-input --verbosity 0 -echo "Migrations applied successfully!" - -echo "Collecting static files..." -docker compose exec app uv run python manage.py collectstatic --clear --no-input --verbosity 0 -echo "Static files collected successfully!" - -echo "Setting default caches..." +docker compose exec app uv run python manage.py initialize docker compose exec app uv run python manage.py set_default_caches -echo "Default caches set successfully!" - -echo "Building search Index..." docker compose exec app uv run python manage.py search_index --rebuild -f -echo "Search Index built successfully!" +docker compose exec app uv run python manage.py collectstatic --clear --no-input --verbosity 0 +echo "Pre-run tasks completed successfully!" echo "Cleaning up unused Docker data..." docker system prune -f diff --git a/scripts/Unix/run.sh b/scripts/Unix/run.sh index 6fcaa8df..ce6d5af4 100755 --- a/scripts/Unix/run.sh +++ b/scripts/Unix/run.sh @@ -23,17 +23,13 @@ echo "Spinning services up..." docker compose up --no-build --detach --wait echo "Services are up and healthy!" -echo "Applying migrations..." +echo "Completing pre-run tasks..." docker compose exec app uv run python manage.py migrate --no-input --verbosity 0 -echo "Migrations applied successfully!" - -echo "Collecting static files..." -docker compose exec app uv run python manage.py collectstatic --clear --no-input --verbosity 0 -echo "Static files collected successfully!" - -echo "Setting default caches..." +docker compose exec app uv run python manage.py initialize docker compose exec app uv run python manage.py set_default_caches -echo "Default caches set successfully!" +docker compose exec app uv run python manage.py search_index --rebuild -f +docker compose exec app uv run python manage.py collectstatic --clear --no-input --verbosity 0 +echo "Pre-run tasks completed successfully!" echo "Cleaning unused Docker data..." docker system prune -f diff --git a/scripts/Windows/generate-environment-file.ps1 b/scripts/Windows/generate-environment-file.ps1 index 7499cffd..a364fc96 100644 --- a/scripts/Windows/generate-environment-file.ps1 +++ b/scripts/Windows/generate-environment-file.ps1 @@ -59,8 +59,8 @@ $TIME_ZONE = Prompt-Default 'TIME_ZONE' 'Europe/London' $SECRET_KEY = Prompt-AutoGen 'SECRET_KEY' 32 $JWT_SIGNING_KEY = Prompt-AutoGen 'JWT_SIGNING_KEY' 64 -$ALLOWED_HOSTS = Prompt-Default 'ALLOWED_HOSTS' 'evibes.com api.evibes.com b2b.evibes.com' -$CSRF_TRUSTED_ORIGINS = Prompt-Default 'CSRF_TRUSTED_ORIGINS' 'https://evibes.com https://api.evibes.com https://www.evibes.com https://b2b.evibes.com' +$ALLOWED_HOSTS = Prompt-Default 'ALLOWED_HOSTS' 'evibes.com api.evibes.com' +$CSRF_TRUSTED_ORIGINS = Prompt-Default 'CSRF_TRUSTED_ORIGINS' 'https://evibes.com https://api.evibes.com https://www.evibes.com' $CORS_ALLOWED_ORIGINS = Prompt-Default 'CORS_ALLOWED_ORIGINS' $CSRF_TRUSTED_ORIGINS $POSTGRES_DB = Prompt-Default 'POSTGRES_DB' 'evibes' diff --git a/scripts/Windows/reboot.ps1 b/scripts/Windows/reboot.ps1 index 4208ca02..43d37708 100644 --- a/scripts/Windows/reboot.ps1 +++ b/scripts/Windows/reboot.ps1 @@ -21,33 +21,28 @@ if ($LASTEXITCODE -ne 0) { } Write-Host "Services are up and healthy!" -ForegroundColor Green -Write-Host "Applying migrations..." -ForegroundColor Magenta -docker compose exec app uv run python manage.py migrate --no-input --verbosity 0 +Write-Host "Completing pre-run tasks..." -ForegroundColor Magenta +docker compose exec app uv run python manage.py migrate --no-input if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Migrations applied successfully!" -ForegroundColor Green - -Write-Host "Collecting static files..." -ForegroundColor Magenta -docker compose exec app uv run python manage.py collectstatic --clear --no-input --verbosity 0 +docker compose exec app uv run python manage.py initialize if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Static files collected successfully!" -ForegroundColor Green - -Write-Host "Setting default caches..." -ForegroundColor Magenta docker compose exec app uv run python manage.py set_default_caches if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Default caches set successfully!" -ForegroundColor Green - -Write-Host "Building search Index..." -ForegroundColor Magenta docker compose exec app uv run python manage.py search_index --rebuild -f if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Search Index built successfully!" -ForegroundColor Green +docker compose exec app uv run python manage.py collectstatic --clear --no-input +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} +Write-Host "Pre-run tasks completed successfully!" -ForegroundColor Green Write-Host "Cleaning up unused Docker data..." -ForegroundColor Magenta docker system prune -f diff --git a/scripts/Windows/run.ps1 b/scripts/Windows/run.ps1 index c401978e..1834df01 100644 --- a/scripts/Windows/run.ps1 +++ b/scripts/Windows/run.ps1 @@ -37,26 +37,28 @@ if ($LASTEXITCODE -ne 0) { } Write-Host "Services are up and healthy!" -ForegroundColor Green -Write-Host "Applying migrations..." -ForegroundColor Magenta +Write-Host "Completing pre-run tasks..." -ForegroundColor Magenta docker compose exec app uv run python manage.py migrate --no-input if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Migrations applied successfully!" -ForegroundColor Green - -Write-Host "Collecting static files..." -ForegroundColor Magenta -docker compose exec app uv run python manage.py collectstatic --clear --no-input +docker compose exec app uv run python manage.py initialize if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Static files collected successfully!" -ForegroundColor Green - -Write-Host "Setting default caches..." -ForegroundColor Magenta docker compose exec app uv run python manage.py set_default_caches if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } -Write-Host "Default caches set successfully!" -ForegroundColor Green +docker compose exec app uv run python manage.py search_index --rebuild -f +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} +docker compose exec app uv run python manage.py collectstatic --clear --no-input +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} +Write-Host "Pre-run tasks completed successfully!" -ForegroundColor Green Write-Host "Cleaning unused Docker data..." -ForegroundColor Magenta docker system prune -f diff --git a/uv.lock b/uv.lock index fe1df429..b3dc9bd4 100644 --- a/uv.lock +++ b/uv.lock @@ -359,14 +359,14 @@ wheels = [ [[package]] name = "bleach" -version = "6.2.0" +version = "6.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, ] [[package]] @@ -614,50 +614,50 @@ wheels = [ [[package]] name = "coverage" -version = "7.11.0" +version = "7.11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/38/ee22495420457259d2f3390309505ea98f98a5eed40901cf62196abad006/coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050", size = 811905, upload-time = "2025-10-15T15:15:08.542Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/12/3e2d2ec71796e0913178478e693a06af6a3bc9f7f9cb899bf85a426d8370/coverage-7.11.1.tar.gz", hash = "sha256:b4b3a072559578129a9e863082a2972a2abd8975bc0e2ec57da96afcd6580a8a", size = 814037, upload-time = "2025-11-07T10:52:41.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/db/86f6906a7c7edc1a52b2c6682d6dd9be775d73c0dfe2b84f8923dfea5784/coverage-7.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9c49e77811cf9d024b95faf86c3f059b11c0c9be0b0d61bc598f453703bd6fd1", size = 216098, upload-time = "2025-10-15T15:13:02.916Z" }, - { url = "https://files.pythonhosted.org/packages/21/54/e7b26157048c7ba555596aad8569ff903d6cd67867d41b75287323678ede/coverage-7.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a61e37a403a778e2cda2a6a39abcc895f1d984071942a41074b5c7ee31642007", size = 216331, upload-time = "2025-10-15T15:13:04.403Z" }, - { url = "https://files.pythonhosted.org/packages/b9/19/1ce6bf444f858b83a733171306134a0544eaddf1ca8851ede6540a55b2ad/coverage-7.11.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c79cae102bb3b1801e2ef1511fb50e91ec83a1ce466b2c7c25010d884336de46", size = 247825, upload-time = "2025-10-15T15:13:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/71/0b/d3bcbbc259fcced5fb67c5d78f6e7ee965f49760c14afd931e9e663a83b2/coverage-7.11.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16ce17ceb5d211f320b62df002fa7016b7442ea0fd260c11cec8ce7730954893", size = 250573, upload-time = "2025-10-15T15:13:07.471Z" }, - { url = "https://files.pythonhosted.org/packages/58/8d/b0ff3641a320abb047258d36ed1c21d16be33beed4152628331a1baf3365/coverage-7.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80027673e9d0bd6aef86134b0771845e2da85755cf686e7c7c59566cf5a89115", size = 251706, upload-time = "2025-10-15T15:13:09.4Z" }, - { url = "https://files.pythonhosted.org/packages/59/c8/5a586fe8c7b0458053d9c687f5cff515a74b66c85931f7fe17a1c958b4ac/coverage-7.11.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d3ffa07a08657306cd2215b0da53761c4d73cb54d9143b9303a6481ec0cd415", size = 248221, upload-time = "2025-10-15T15:13:10.964Z" }, - { url = "https://files.pythonhosted.org/packages/d0/ff/3a25e3132804ba44cfa9a778cdf2b73dbbe63ef4b0945e39602fc896ba52/coverage-7.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a3b6a5f8b2524fd6c1066bc85bfd97e78709bb5e37b5b94911a6506b65f47186", size = 249624, upload-time = "2025-10-15T15:13:12.5Z" }, - { url = "https://files.pythonhosted.org/packages/c5/12/ff10c8ce3895e1b17a73485ea79ebc1896a9e466a9d0f4aef63e0d17b718/coverage-7.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fcc0a4aa589de34bc56e1a80a740ee0f8c47611bdfb28cd1849de60660f3799d", size = 247744, upload-time = "2025-10-15T15:13:14.554Z" }, - { url = "https://files.pythonhosted.org/packages/16/02/d500b91f5471b2975947e0629b8980e5e90786fe316b6d7299852c1d793d/coverage-7.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dba82204769d78c3fd31b35c3d5f46e06511936c5019c39f98320e05b08f794d", size = 247325, upload-time = "2025-10-15T15:13:16.438Z" }, - { url = "https://files.pythonhosted.org/packages/77/11/dee0284fbbd9cd64cfce806b827452c6df3f100d9e66188e82dfe771d4af/coverage-7.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81b335f03ba67309a95210caf3eb43bd6fe75a4e22ba653ef97b4696c56c7ec2", size = 249180, upload-time = "2025-10-15T15:13:17.959Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/cdf1def928f0a150a057cab03286774e73e29c2395f0d30ce3d9e9f8e697/coverage-7.11.0-cp312-cp312-win32.whl", hash = "sha256:037b2d064c2f8cc8716fe4d39cb705779af3fbf1ba318dc96a1af858888c7bb5", size = 218479, upload-time = "2025-10-15T15:13:19.608Z" }, - { url = "https://files.pythonhosted.org/packages/ff/55/e5884d55e031da9c15b94b90a23beccc9d6beee65e9835cd6da0a79e4f3a/coverage-7.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d66c0104aec3b75e5fd897e7940188ea1892ca1d0235316bf89286d6a22568c0", size = 219290, upload-time = "2025-10-15T15:13:21.593Z" }, - { url = "https://files.pythonhosted.org/packages/23/a8/faa930cfc71c1d16bc78f9a19bb73700464f9c331d9e547bfbc1dbd3a108/coverage-7.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:d91ebeac603812a09cf6a886ba6e464f3bbb367411904ae3790dfe28311b15ad", size = 217924, upload-time = "2025-10-15T15:13:23.39Z" }, - { url = "https://files.pythonhosted.org/packages/60/7f/85e4dfe65e400645464b25c036a26ac226cf3a69d4a50c3934c532491cdd/coverage-7.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc3f49e65ea6e0d5d9bd60368684fe52a704d46f9e7fc413918f18d046ec40e1", size = 216129, upload-time = "2025-10-15T15:13:25.371Z" }, - { url = "https://files.pythonhosted.org/packages/96/5d/dc5fa98fea3c175caf9d360649cb1aa3715e391ab00dc78c4c66fabd7356/coverage-7.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f39ae2f63f37472c17b4990f794035c9890418b1b8cca75c01193f3c8d3e01be", size = 216380, upload-time = "2025-10-15T15:13:26.976Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f5/3da9cc9596708273385189289c0e4d8197d37a386bdf17619013554b3447/coverage-7.11.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7db53b5cdd2917b6eaadd0b1251cf4e7d96f4a8d24e174bdbdf2f65b5ea7994d", size = 247375, upload-time = "2025-10-15T15:13:28.923Z" }, - { url = "https://files.pythonhosted.org/packages/65/6c/f7f59c342359a235559d2bc76b0c73cfc4bac7d61bb0df210965cb1ecffd/coverage-7.11.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10ad04ac3a122048688387828b4537bc9cf60c0bf4869c1e9989c46e45690b82", size = 249978, upload-time = "2025-10-15T15:13:30.525Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8c/042dede2e23525e863bf1ccd2b92689692a148d8b5fd37c37899ba882645/coverage-7.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4036cc9c7983a2b1f2556d574d2eb2154ac6ed55114761685657e38782b23f52", size = 251253, upload-time = "2025-10-15T15:13:32.174Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a9/3c58df67bfa809a7bddd786356d9c5283e45d693edb5f3f55d0986dd905a/coverage-7.11.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ab934dd13b1c5e94b692b1e01bd87e4488cb746e3a50f798cb9464fd128374b", size = 247591, upload-time = "2025-10-15T15:13:34.147Z" }, - { url = "https://files.pythonhosted.org/packages/26/5b/c7f32efd862ee0477a18c41e4761305de6ddd2d49cdeda0c1116227570fd/coverage-7.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59a6e5a265f7cfc05f76e3bb53eca2e0dfe90f05e07e849930fecd6abb8f40b4", size = 249411, upload-time = "2025-10-15T15:13:38.425Z" }, - { url = "https://files.pythonhosted.org/packages/76/b5/78cb4f1e86c1611431c990423ec0768122905b03837e1b4c6a6f388a858b/coverage-7.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df01d6c4c81e15a7c88337b795bb7595a8596e92310266b5072c7e301168efbd", size = 247303, upload-time = "2025-10-15T15:13:40.464Z" }, - { url = "https://files.pythonhosted.org/packages/87/c9/23c753a8641a330f45f221286e707c427e46d0ffd1719b080cedc984ec40/coverage-7.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c934bd088eed6174210942761e38ee81d28c46de0132ebb1801dbe36a390dcc", size = 247157, upload-time = "2025-10-15T15:13:42.087Z" }, - { url = "https://files.pythonhosted.org/packages/c5/42/6e0cc71dc8a464486e944a4fa0d85bdec031cc2969e98ed41532a98336b9/coverage-7.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a03eaf7ec24078ad64a07f02e30060aaf22b91dedf31a6b24d0d98d2bba7f48", size = 248921, upload-time = "2025-10-15T15:13:43.715Z" }, - { url = "https://files.pythonhosted.org/packages/e8/1c/743c2ef665e6858cccb0f84377dfe3a4c25add51e8c7ef19249be92465b6/coverage-7.11.0-cp313-cp313-win32.whl", hash = "sha256:695340f698a5f56f795b2836abe6fb576e7c53d48cd155ad2f80fd24bc63a040", size = 218526, upload-time = "2025-10-15T15:13:45.336Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d5/226daadfd1bf8ddbccefbd3aa3547d7b960fb48e1bdac124e2dd13a2b71a/coverage-7.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2727d47fce3ee2bac648528e41455d1b0c46395a087a229deac75e9f88ba5a05", size = 219317, upload-time = "2025-10-15T15:13:47.401Z" }, - { url = "https://files.pythonhosted.org/packages/97/54/47db81dcbe571a48a298f206183ba8a7ba79200a37cd0d9f4788fcd2af4a/coverage-7.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:0efa742f431529699712b92ecdf22de8ff198df41e43aeaaadf69973eb93f17a", size = 217948, upload-time = "2025-10-15T15:13:49.096Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8b/cb68425420154e7e2a82fd779a8cc01549b6fa83c2ad3679cd6c088ebd07/coverage-7.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:587c38849b853b157706407e9ebdca8fd12f45869edb56defbef2daa5fb0812b", size = 216837, upload-time = "2025-10-15T15:13:51.09Z" }, - { url = "https://files.pythonhosted.org/packages/33/55/9d61b5765a025685e14659c8d07037247de6383c0385757544ffe4606475/coverage-7.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b971bdefdd75096163dd4261c74be813c4508477e39ff7b92191dea19f24cd37", size = 217061, upload-time = "2025-10-15T15:13:52.747Z" }, - { url = "https://files.pythonhosted.org/packages/52/85/292459c9186d70dcec6538f06ea251bc968046922497377bf4a1dc9a71de/coverage-7.11.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:269bfe913b7d5be12ab13a95f3a76da23cf147be7fa043933320ba5625f0a8de", size = 258398, upload-time = "2025-10-15T15:13:54.45Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e2/46edd73fb8bf51446c41148d81944c54ed224854812b6ca549be25113ee0/coverage-7.11.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dadbcce51a10c07b7c72b0ce4a25e4b6dcb0c0372846afb8e5b6307a121eb99f", size = 260574, upload-time = "2025-10-15T15:13:56.145Z" }, - { url = "https://files.pythonhosted.org/packages/07/5e/1df469a19007ff82e2ca8fe509822820a31e251f80ee7344c34f6cd2ec43/coverage-7.11.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ed43fa22c6436f7957df036331f8fe4efa7af132054e1844918866cd228af6c", size = 262797, upload-time = "2025-10-15T15:13:58.635Z" }, - { url = "https://files.pythonhosted.org/packages/f9/50/de216b31a1434b94d9b34a964c09943c6be45069ec704bfc379d8d89a649/coverage-7.11.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9516add7256b6713ec08359b7b05aeff8850c98d357784c7205b2e60aa2513fa", size = 257361, upload-time = "2025-10-15T15:14:00.409Z" }, - { url = "https://files.pythonhosted.org/packages/82/1e/3f9f8344a48111e152e0fd495b6fff13cc743e771a6050abf1627a7ba918/coverage-7.11.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb92e47c92fcbcdc692f428da67db33337fa213756f7adb6a011f7b5a7a20740", size = 260349, upload-time = "2025-10-15T15:14:02.188Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/3f52741f9e7d82124272f3070bbe316006a7de1bad1093f88d59bfc6c548/coverage-7.11.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d06f4fc7acf3cabd6d74941d53329e06bab00a8fe10e4df2714f0b134bfc64ef", size = 258114, upload-time = "2025-10-15T15:14:03.907Z" }, - { url = "https://files.pythonhosted.org/packages/0b/8b/918f0e15f0365d50d3986bbd3338ca01178717ac5678301f3f547b6619e6/coverage-7.11.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:6fbcee1a8f056af07ecd344482f711f563a9eb1c2cad192e87df00338ec3cdb0", size = 256723, upload-time = "2025-10-15T15:14:06.324Z" }, - { url = "https://files.pythonhosted.org/packages/44/9e/7776829f82d3cf630878a7965a7d70cc6ca94f22c7d20ec4944f7148cb46/coverage-7.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbbf012be5f32533a490709ad597ad8a8ff80c582a95adc8d62af664e532f9ca", size = 259238, upload-time = "2025-10-15T15:14:08.002Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b8/49cf253e1e7a3bedb85199b201862dd7ca4859f75b6cf25ffa7298aa0760/coverage-7.11.0-cp313-cp313t-win32.whl", hash = "sha256:cee6291bb4fed184f1c2b663606a115c743df98a537c969c3c64b49989da96c2", size = 219180, upload-time = "2025-10-15T15:14:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e1/1a541703826be7ae2125a0fb7f821af5729d56bb71e946e7b933cc7a89a4/coverage-7.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a386c1061bf98e7ea4758e4313c0ab5ecf57af341ef0f43a0bf26c2477b5c268", size = 220241, upload-time = "2025-10-15T15:14:11.471Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d1/5ee0e0a08621140fd418ec4020f595b4d52d7eb429ae6a0c6542b4ba6f14/coverage-7.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f9ea02ef40bb83823b2b04964459d281688fe173e20643870bb5d2edf68bc836", size = 218510, upload-time = "2025-10-15T15:14:13.46Z" }, - { url = "https://files.pythonhosted.org/packages/5f/04/642c1d8a448ae5ea1369eac8495740a79eb4e581a9fb0cbdce56bbf56da1/coverage-7.11.0-py3-none-any.whl", hash = "sha256:4b7589765348d78fb4e5fb6ea35d07564e387da2fc5efff62e0222971f155f68", size = 207761, upload-time = "2025-10-15T15:15:06.439Z" }, + { url = "https://files.pythonhosted.org/packages/0f/31/04af7e42fdb3681e4d73d37bf3f375f0488aa38d1001ee746c7dbfe09643/coverage-7.11.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:421e2d237dcecdefa9b77cae1aa0dfff5c495f29e053e776172457e289976311", size = 216896, upload-time = "2025-11-07T10:50:31.429Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e9/1c3628a1225bdea66295a117cd2bb1d324d9c433c40078b24d50f55448a7/coverage-7.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:08ef89c812072ecd52a862b46e131f75596475d23cc7f5a75410394341d4332f", size = 217261, upload-time = "2025-11-07T10:50:33.008Z" }, + { url = "https://files.pythonhosted.org/packages/2b/80/4d4f943da23c432b2bba8664f4eada9b19911081852e8cc89776c61d0b94/coverage-7.11.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bc6e0b2d6ed317810b4e435ffabc31b2d517d6ceb4183dfd6af4748c52d170eb", size = 248742, upload-time = "2025-11-07T10:50:34.634Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e1/c4b42f02fbb6ce08e05d7a2b26bcf5df11d3e67a3806e40415f7ab9511e7/coverage-7.11.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b59736704df8b1f8b1dafb36b16f2ef8a952e4410465634442459426bd2319ae", size = 251503, upload-time = "2025-11-07T10:50:36.501Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/3df60e88f1dabccae4994c6df4a2f23d4cd0eee27fc3ae8f0bb2e78cb538/coverage-7.11.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:843816452d8bfc4c2be72546b3b382850cb91150feaa963ec7d2b665ec9d4768", size = 252590, upload-time = "2025-11-07T10:50:38.059Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/2b9fae11361b0348c2d3612a8179d2cc8b6b245e8b14d5479c75b9f18613/coverage-7.11.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:19363046125d4a423c25d3d7c90bab3a0230932c16014198f87a6b3960c1b187", size = 249133, upload-time = "2025-11-07T10:50:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/b8/2b/e33712a8eede02762a536bdc2f89e736e0ad87bd13b35d724306585aeb54/coverage-7.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e37486aed7045c280ebdc207026bdef9267730177d929a5e25250e1f33cc125", size = 250524, upload-time = "2025-11-07T10:50:41.59Z" }, + { url = "https://files.pythonhosted.org/packages/84/c9/6181877977a0f6e46b9c93a8382b8c671769fb12df8a15be8d6091541b77/coverage-7.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7c68180e67b4843674bfb1d3ec928ffcfc94081b5da959e616405eca51c23356", size = 248673, upload-time = "2025-11-07T10:50:43.153Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d6/ff26c2eb57d4dcd46c6ed136d6b04aceb7f58f48dcc500c77f7194711a6f/coverage-7.11.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:cf825b60f94d1706c22d4887310db26cc3117d545ac6ad4229b4a0d718afcf9a", size = 248251, upload-time = "2025-11-07T10:50:45.069Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ff/411803f1fcb9efe00afbc96442564cc691f537541a8bde377cf1ac04e695/coverage-7.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:437149272ff0440df66044bd6ee87cbc252463754ca43cafa496cfb2f57f56dd", size = 250111, upload-time = "2025-11-07T10:50:46.701Z" }, + { url = "https://files.pythonhosted.org/packages/c1/9f/781c045e1e5f8930f8266f224318040413b60837749d2ed11883b7478c81/coverage-7.11.1-cp312-cp312-win32.whl", hash = "sha256:98ea0b8d1addfc333494c2248af367e8ecb27724a99804a18376b801f876da58", size = 219407, upload-time = "2025-11-07T10:50:48.862Z" }, + { url = "https://files.pythonhosted.org/packages/26/59/813d8eedc96a781e8a6f9c37f6ecb4326ebbffdafe2e1154ed2def468b76/coverage-7.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:7d49a473799e55a465bcadd19525977ab80031b8b86baaa622241808df4585cd", size = 220220, upload-time = "2025-11-07T10:50:51.576Z" }, + { url = "https://files.pythonhosted.org/packages/63/5f/c0905d9159d38194943a21d7d013f1c2f0c43e7d63f680ed56269728418a/coverage-7.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:0c77e5951ab176a6ccb70c6f688fca2a7ac834753ba82ee4eb741be655f30b43", size = 218856, upload-time = "2025-11-07T10:50:53.591Z" }, + { url = "https://files.pythonhosted.org/packages/f4/01/0c50c318f5e8f1a482da05d788d0ff06137803ed8fface4a1ba51e04b3ad/coverage-7.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:da9930594ca99d66eb6f613d7beba850db2f8dfa86810ee35ae24e4d5f2bb97d", size = 216920, upload-time = "2025-11-07T10:50:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/20/11/9f038e6c2baea968c377ab355b0d1d0a46b5f38985691bf51164e1b78c1f/coverage-7.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc47a280dc014220b0fc6e5f55082a3f51854faf08fd9635b8a4f341c46c77d3", size = 217301, upload-time = "2025-11-07T10:50:57.609Z" }, + { url = "https://files.pythonhosted.org/packages/68/cd/9dcf93d81d0cddaa0bba90c3b4580e6f1ddf833918b816930d250cc553a4/coverage-7.11.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:74003324321bbf130939146886eddf92e48e616b5910215e79dea6edeb8ee7c8", size = 248277, upload-time = "2025-11-07T10:50:59.442Z" }, + { url = "https://files.pythonhosted.org/packages/11/f5/b2c7c494046c9c783d3cac4c812fc24d6104dd36a7a598e7dd6fea3e7927/coverage-7.11.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:211f7996265daab60a8249af4ca6641b3080769cbedcffc42cc4841118f3a305", size = 250871, upload-time = "2025-11-07T10:51:01.094Z" }, + { url = "https://files.pythonhosted.org/packages/a5/5a/b359649566954498aa17d7c98093182576d9e435ceb4ea917b3b48d56f86/coverage-7.11.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70619d194d8fea0cb028cb6bb9c85b519c7509c1d1feef1eea635183bc8ecd27", size = 252115, upload-time = "2025-11-07T10:51:03.087Z" }, + { url = "https://files.pythonhosted.org/packages/f3/17/3cef1ede3739622950f0737605353b797ec564e70c9d254521b10f4b03ba/coverage-7.11.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e0208bb59d441cfa3321569040f8e455f9261256e0df776c5462a1e5a9b31e13", size = 248442, upload-time = "2025-11-07T10:51:04.888Z" }, + { url = "https://files.pythonhosted.org/packages/5f/63/d5854c47ae42d9d18855329db6bc528f5b7f4f874257edb00cf8b483f9f8/coverage-7.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:545714d8765bda1c51f8b1c96e0b497886a054471c68211e76ef49dd1468587d", size = 250253, upload-time = "2025-11-07T10:51:06.515Z" }, + { url = "https://files.pythonhosted.org/packages/48/e8/c7706f8a5358a59c18b489e7e19e83d6161b7c8bc60771f95920570c94a8/coverage-7.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d0a2b02c1e20158dd405054bcca87f91fd5b7605626aee87150819ea616edd67", size = 248217, upload-time = "2025-11-07T10:51:08.405Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c9/a2136dfb168eb09e2f6d9d6b6c986243fdc0b3866a9376adb263d3c3378b/coverage-7.11.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0f4aa986a4308a458e0fb572faa3eb3db2ea7ce294604064b25ab32b435a468", size = 248040, upload-time = "2025-11-07T10:51:10.626Z" }, + { url = "https://files.pythonhosted.org/packages/18/9a/a63991c0608ddc6adf65e6f43124951aaf36bd79f41937b028120b8268ea/coverage-7.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d51cc6687e8bbfd1e041f52baed0f979cd592242cf50bf18399a7e03afc82d88", size = 249801, upload-time = "2025-11-07T10:51:12.63Z" }, + { url = "https://files.pythonhosted.org/packages/84/19/947acf7c0c6e90e4ec3abf474133ed36d94407d07e36eafdfd3acb59fee9/coverage-7.11.1-cp313-cp313-win32.whl", hash = "sha256:1b3067db3afe6deeca2b2c9f0ec23820d5f1bd152827acfadf24de145dfc5f66", size = 219430, upload-time = "2025-11-07T10:51:14.329Z" }, + { url = "https://files.pythonhosted.org/packages/35/54/36fef7afb3884450c7b6d494fcabe2fab7c669d547c800ca30f41c1dc212/coverage-7.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:39a4c44b0cd40e3c9d89b2b7303ebd6ab9ae8a63f9e9a8c4d65a181a0b33aebe", size = 220239, upload-time = "2025-11-07T10:51:16.418Z" }, + { url = "https://files.pythonhosted.org/packages/d3/dc/7d38bb99e8e69200b7dd5de15507226bd90eac102dfc7cc891b9934cdc76/coverage-7.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:a2e3560bf82fa8169a577e054cbbc29888699526063fee26ea59ea2627fd6e73", size = 218868, upload-time = "2025-11-07T10:51:18.186Z" }, + { url = "https://files.pythonhosted.org/packages/36/c6/d1ff54fbd6bcad42dbcfd13b417e636ef84aae194353b1ef3361700f2525/coverage-7.11.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47a4f362a10285897ab3aa7a4b37d28213a4f2626823923613d6d7a3584dd79a", size = 217615, upload-time = "2025-11-07T10:51:21.065Z" }, + { url = "https://files.pythonhosted.org/packages/73/f9/6ed59e7cf1488d6f975e5b14ef836f5e537913523e92175135f8518a83ce/coverage-7.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0df35fa7419ef571db9dacd50b0517bc54dbfe37eb94043b5fc3540bff276acd", size = 217960, upload-time = "2025-11-07T10:51:22.797Z" }, + { url = "https://files.pythonhosted.org/packages/c4/74/2dab1dc2ebe16f074f80ae483b0f45faf278d102be703ac01b32cd85b6c3/coverage-7.11.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e1a2c621d341c9d56f7917e56fbb56be4f73fe0d0e8dae28352fb095060fd467", size = 259262, upload-time = "2025-11-07T10:51:24.467Z" }, + { url = "https://files.pythonhosted.org/packages/15/49/eccfe039663e29a50a54b0c2c8d076acd174d7ac50d018ef8a5b1c37c8dc/coverage-7.11.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c354b111be9b2234d9573d75dd30ca4e414b7659c730e477e89be4f620b3fb5", size = 261326, upload-time = "2025-11-07T10:51:26.232Z" }, + { url = "https://files.pythonhosted.org/packages/f0/bb/2b829aa23fd5ee8318e33cc02a606eb09900921291497963adc3f06af8bb/coverage-7.11.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4589bd44698728f600233fb2881014c9b8ec86637ef454c00939e779661dbe7e", size = 263758, upload-time = "2025-11-07T10:51:27.912Z" }, + { url = "https://files.pythonhosted.org/packages/ac/03/d44c3d70e5da275caf2cad2071da6b425412fbcb1d1d5a81f1f89b45e3f1/coverage-7.11.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c6956fc8754f2309131230272a7213a483a32ecbe29e2b9316d808a28f2f8ea1", size = 258444, upload-time = "2025-11-07T10:51:30.107Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c1/cf61d9f46ae088774c65dd3387a15dfbc72de90c1f6e105025e9eda19b42/coverage-7.11.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63926a97ed89dc6a087369b92dcb8b9a94cead46c08b33a7f1f4818cd8b6a3c3", size = 261335, upload-time = "2025-11-07T10:51:31.814Z" }, + { url = "https://files.pythonhosted.org/packages/95/9a/b3299bb14f11f2364d78a2b9704491b15395e757af6116694731ce4e5834/coverage-7.11.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f5311ba00c53a7fb2b293fdc1f478b7286fe2a845a7ba9cda053f6e98178f0b4", size = 258951, upload-time = "2025-11-07T10:51:33.925Z" }, + { url = "https://files.pythonhosted.org/packages/3f/a3/73cb2763e59f14ba6d8d6444b1f640a9be2242bfb59b7e50581c695db7ff/coverage-7.11.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:31bf5ffad84c974f9e72ac53493350f36b6fa396109159ec704210698f12860b", size = 257840, upload-time = "2025-11-07T10:51:36.092Z" }, + { url = "https://files.pythonhosted.org/packages/85/db/482e72589a952027e238ffa3a15f192c552e0685fd0c5220ad05b5f17d56/coverage-7.11.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:227ee59fbc4a8c57a7383a1d7af6ca94a78ae3beee4045f38684548a8479a65b", size = 260040, upload-time = "2025-11-07T10:51:38.277Z" }, + { url = "https://files.pythonhosted.org/packages/18/a1/b931d3ee099c2dca8e9ea56c07ae84c0f91562f7bbbcccab8c91b3474ef1/coverage-7.11.1-cp313-cp313t-win32.whl", hash = "sha256:a447d97b3ce680bb1da2e6bd822ebb71be6a1fb77ce2c2ad2fe4bd8aacec3058", size = 220102, upload-time = "2025-11-07T10:51:40.017Z" }, + { url = "https://files.pythonhosted.org/packages/9a/53/b553b7bfa6207def4918f0cb72884c844fa4c3f1566e58fbb4f34e54cdc5/coverage-7.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6d11180437c67bde2248563a42b8e5bbf85c8df78fae13bf818ad17bfb15f02", size = 221166, upload-time = "2025-11-07T10:51:41.921Z" }, + { url = "https://files.pythonhosted.org/packages/6b/45/1c1d58b3ed585598764bd2fe41fcf60ccafe15973ad621c322ba52e22d32/coverage-7.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:1e19a4c43d612760c6f7190411fb157e2d8a6dde00c91b941d43203bd3b17f6f", size = 219439, upload-time = "2025-11-07T10:51:43.753Z" }, + { url = "https://files.pythonhosted.org/packages/76/32/bd9f48c28e23b2f08946f8e83983617b00619f5538dbd7e1045fa7e88c00/coverage-7.11.1-py3-none-any.whl", hash = "sha256:0fa848acb5f1da24765cee840e1afe9232ac98a8f9431c6112c15b34e880b9e8", size = 208689, upload-time = "2025-11-07T10:52:38.646Z" }, ] [[package]] @@ -768,16 +768,16 @@ wheels = [ [[package]] name = "django" -version = "5.2.7" +version = "5.2.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/96/bd84e2bb997994de8bcda47ae4560991084e86536541d7214393880f01a8/django-5.2.7.tar.gz", hash = "sha256:e0f6f12e2551b1716a95a63a1366ca91bbcd7be059862c1b18f989b1da356cdd", size = 10865812, upload-time = "2025-10-01T14:22:12.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/a2/933dbbb3dd9990494960f6e64aca2af4c0745b63b7113f59a822df92329e/django-5.2.8.tar.gz", hash = "sha256:23254866a5bb9a2cfa6004e8b809ec6246eba4b58a7589bc2772f1bcc8456c7f", size = 10849032, upload-time = "2025-11-05T14:07:32.778Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/ef/81f3372b5dd35d8d354321155d1a38894b2b766f576d0abffac4d8ae78d9/django-5.2.7-py3-none-any.whl", hash = "sha256:59a13a6515f787dec9d97a0438cd2efac78c8aca1c80025244b0fe507fe0754b", size = 8307145, upload-time = "2025-10-01T14:22:49.476Z" }, + { url = "https://files.pythonhosted.org/packages/5e/3d/a035a4ee9b1d4d4beee2ae6e8e12fe6dee5514b21f62504e22efcbd9fb46/django-5.2.8-py3-none-any.whl", hash = "sha256:37e687f7bd73ddf043e2b6b97cfe02fcbb11f2dbb3adccc6a2b18c6daa054d7f", size = 8289692, upload-time = "2025-11-05T14:07:28.761Z" }, ] [[package]] @@ -826,11 +826,11 @@ wheels = [ [[package]] name = "django-constance" -version = "4.3.2" +version = "4.3.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c1/08/58100c61c15c0d187d257c0f01277e48fdfdbe96bda60e88ffe043412ecc/django_constance-4.3.2.tar.gz", hash = "sha256:d86e6b6a797157a4b49d0c679f1b7b9c70b1b540f36dfcda5346736997ae51bd", size = 174866, upload-time = "2025-02-06T10:29:34.604Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/c2/5a7dbd5554d840415c0f6885534385af217342fef834e6effa6a76fbee22/django_constance-4.3.3.tar.gz", hash = "sha256:6bec5f9b61730abc5b4bdb910849c7625c335e9ddce9898130735d874b63f2cb", size = 175484, upload-time = "2025-11-04T16:46:24.991Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/cd/37312ca0a02905fb3d44649a0bd2ec4ec21b60d967c3ccb9ff9d07db157b/django_constance-4.3.2-py3-none-any.whl", hash = "sha256:cd3e08f4cac457016db550a9244177da39cef8e39f4a56859692306cc8f11dc1", size = 64240, upload-time = "2025-02-06T10:28:53.231Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/6b7ba6c3f90546741ae2f14fe7d7c7ca1d8326db2ebde8206af0136f72ff/django_constance-4.3.3-py3-none-any.whl", hash = "sha256:94f05d04d30926f92e7aaadffe4c6e0a3dccbabc657d66c42499e6141c83c1bc", size = 64425, upload-time = "2025-11-04T16:46:23.515Z" }, ] [[package]] @@ -848,14 +848,14 @@ wheels = [ [[package]] name = "django-dbbackup" -version = "5.0.0" +version = "5.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/88/3b8fe59075369d828b31b77de931511b2479b7bd21489132a0123ce0656b/django_dbbackup-5.0.0.tar.gz", hash = "sha256:aa9cc88e1413adfec0e547dd91e0afed6dbb91a02459697663a9b988dbc71f18", size = 25046, upload-time = "2025-08-30T08:17:31.752Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/c8/e8d0352f3b5f6f3a0b12ea56a47fc9808aa1bb8753f6d362b7acadec72c6/django_dbbackup-5.0.1.tar.gz", hash = "sha256:52e1ed0c8082eb29b2e96231db0101a47a34442176542c27659992918ae9ef2a", size = 25316, upload-time = "2025-11-07T11:05:05.679Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/de/9d7c894b5bdf9825db8e8f3d89d12851a34e32ce43b94f0b88995a9feb1f/django_dbbackup-5.0.0-py3-none-any.whl", hash = "sha256:a0301b14a4bb3c7243a2fde76d09f8f572f16cd7639f75f4cd42d898fc1b82a2", size = 33110, upload-time = "2025-08-30T08:17:30.678Z" }, + { url = "https://files.pythonhosted.org/packages/fb/b1/b0bbab8cf34fb8ca09f19d054b1c44f061b5188f4aa40cc6b274de566ac1/django_dbbackup-5.0.1-py3-none-any.whl", hash = "sha256:5f9f764fcd9be3c7d6acde31ad3a20ec9093fc42014cd3e84e71eae9201d675f", size = 33403, upload-time = "2025-11-07T11:05:04.265Z" }, ] [[package]] @@ -907,15 +907,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl", hash = "sha256:bcb2b8f36f463cead0564a028345c5b17e2a2d18e9cc88ecd611b13a26521926", size = 31788, upload-time = "2025-06-16T09:22:32.069Z" }, ] -[[package]] -name = "django-hosts" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/c0/cf2b37b6ef4dda89d00f040e69b4f8a3f52fa4f74b33141b68983c0fecce/django_hosts-7.0.0.tar.gz", hash = "sha256:08006bc09f5af69638721ced0657f24044835a22a608732ee1004adc9c95fb7c", size = 36858, upload-time = "2025-06-19T07:43:22.746Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/05/8056f3e631b0aee8ac99929a558d132634945d3cb16253fb2a2785b62dcf/django_hosts-7.0.0-py3-none-any.whl", hash = "sha256:93d3c941336463fd0c9377c1773d1c53a49606fa72656ed7ddfa474d2fe1f907", size = 27858, upload-time = "2025-06-19T07:43:33.953Z" }, -] - [[package]] name = "django-jazzmin" version = "3.0.1" @@ -1210,7 +1201,7 @@ wheels = [ [[package]] name = "drf-spectacular" -version = "0.28.0" +version = "0.29.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, @@ -1220,9 +1211,9 @@ dependencies = [ { name = "pyyaml" }, { name = "uritemplate" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/da/b9/741056455aed00fa51a1df41fad5ad27c8e0d433b6bf490d4e60e2808bc6/drf_spectacular-0.28.0.tar.gz", hash = "sha256:2c778a47a40ab2f5078a7c42e82baba07397bb35b074ae4680721b2805943061", size = 237849, upload-time = "2024-11-30T08:49:02.355Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/0e/a4f50d83e76cbe797eda88fc0083c8ca970cfa362b5586359ef06ec6f70a/drf_spectacular-0.29.0.tar.gz", hash = "sha256:0a069339ea390ce7f14a75e8b5af4a0860a46e833fd4af027411a3e94fc1a0cc", size = 241722, upload-time = "2025-11-02T03:40:26.348Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/66/c2929871393b1515c3767a670ff7d980a6882964a31a4ca2680b30d7212a/drf_spectacular-0.28.0-py3-none-any.whl", hash = "sha256:856e7edf1056e49a4245e87a61e8da4baff46c83dbc25be1da2df77f354c7cb4", size = 103928, upload-time = "2024-11-30T08:48:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/32/d9/502c56fc3ca960075d00956283f1c44e8cafe433dada03f9ed2821f3073b/drf_spectacular-0.29.0-py3-none-any.whl", hash = "sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a", size = 105433, upload-time = "2025-11-02T03:40:24.823Z" }, ] [package.optional-dependencies] @@ -1257,16 +1248,16 @@ wheels = [ [[package]] name = "elasticsearch" -version = "8.19.1" +version = "8.19.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "elastic-transport" }, { name = "python-dateutil" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/0d/3ee3cd1122c33499ab55814e298f5d3104b0827e613e4243ae557552269a/elasticsearch-8.19.1.tar.gz", hash = "sha256:7192cd6eff2d6ab48f2858265dea717d15ab42f04cfdc4f571a811bcfcbc7a3a", size = 790617, upload-time = "2025-09-12T12:00:32.846Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/7b/70b9d16069eda6f91d45fadd9e12faed8e4442f242ca8a81de84bc626f1b/elasticsearch-8.19.2.tar.gz", hash = "sha256:622efa6a3e662db45285f16ab57bf198ea73ac9e137e7ed8b1d1d1e47638959d", size = 797401, upload-time = "2025-10-28T16:36:44.953Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/87/f3f34b99c1590492f0050c51b5eedc15be8a9c4cb7ca4f21a71f8533a4fd/elasticsearch-8.19.1-py3-none-any.whl", hash = "sha256:b511dd4cc26aef1fc02c1b5c1eefe9f16d76127d8f133b0f6900fd052c48d2a4", size = 940480, upload-time = "2025-09-12T12:00:29.377Z" }, + { url = "https://files.pythonhosted.org/packages/56/01/6f77d042b83260ef9ed73ea9647dfa0ef8414eba0a3fc57a509a088ad39b/elasticsearch-8.19.2-py3-none-any.whl", hash = "sha256:c16ba20c4c76cf6952e836dae7f4e724e00ba7bf31b94b79472b873683accdd4", size = 949706, upload-time = "2025-10-28T16:36:41.003Z" }, ] [[package]] @@ -1295,7 +1286,7 @@ wheels = [ [[package]] name = "evibes" -version = "3.1.0" +version = "2025.4" source = { virtual = "." } dependencies = [ { name = "aiogram" }, @@ -1315,7 +1306,6 @@ dependencies = [ { name = "django-extensions" }, { name = "django-filter" }, { name = "django-health-check" }, - { name = "django-hosts" }, { name = "django-jazzmin" }, { name = "django-json-widget" }, { name = "django-mailbox" }, @@ -1337,7 +1327,6 @@ dependencies = [ { name = "djangorestframework-stubs" }, { name = "djangorestframework-xml" }, { name = "djangorestframework-yaml" }, - { name = "docutils" }, { name = "drf-spectacular", extra = ["sidecar"] }, { name = "elasticsearch-dsl" }, { name = "filelock" }, @@ -1361,6 +1350,7 @@ dependencies = [ { name = "six" }, { name = "swapper" }, { name = "uvicorn" }, + { name = "whitenoise" }, { name = "zeep" }, ] @@ -1429,21 +1419,20 @@ requires-dist = [ { name = "channels-redis", specifier = ">=4.3.0" }, { name = "click", specifier = "==8.3.0" }, { name = "colorlog", specifier = "==6.10.1" }, - { name = "coverage", specifier = "==7.11.0" }, - { name = "coverage", marker = "extra == 'testing'", specifier = "==7.11.0" }, + { name = "coverage", specifier = "==7.11.1" }, + { name = "coverage", marker = "extra == 'testing'", specifier = "==7.11.1" }, { name = "cryptography", specifier = "==46.0.3" }, - { name = "django", specifier = "==5.2.7" }, + { name = "django", specifier = "==5.2.8" }, { name = "django-cacheops", specifier = "==7.2" }, { name = "django-celery-beat", marker = "extra == 'worker'", specifier = "==2.8.1" }, { name = "django-celery-results", marker = "extra == 'worker'", specifier = "==2.6.0" }, - { name = "django-constance", specifier = "==4.3.2" }, + { name = "django-constance", specifier = "==4.3.3" }, { name = "django-cors-headers", specifier = "==4.9.0" }, - { name = "django-dbbackup", specifier = "==5.0.0" }, + { name = "django-dbbackup", specifier = "==5.0.1" }, { name = "django-elasticsearch-dsl", specifier = "==8.2" }, { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, { name = "django-health-check", specifier = "==3.20.0" }, - { name = "django-hosts", specifier = "==7.0.0" }, { name = "django-jazzmin", specifier = "==3.0.1" }, { name = "django-json-widget", specifier = "==2.1.0" }, { name = "django-mailbox", specifier = "==4.10.1" }, @@ -1465,8 +1454,7 @@ requires-dist = [ { name = "djangorestframework-stubs", specifier = "==3.16.5" }, { name = "djangorestframework-xml", specifier = "==2.0.0" }, { name = "djangorestframework-yaml", specifier = "==2.0.0" }, - { name = "docutils", specifier = "==0.21.2" }, - { name = "drf-spectacular", extras = ["sidecar"], specifier = "==0.28.0" }, + { name = "drf-spectacular", extras = ["sidecar"], specifier = "==0.29.0" }, { name = "elasticsearch-dsl", specifier = "==8.18.0" }, { name = "filelock", specifier = "==3.20.0" }, { name = "filetype", specifier = "==1.2.0" }, @@ -1481,7 +1469,7 @@ requires-dist = [ { name = "pillow", specifier = "==12.0.0" }, { name = "pip", specifier = ">=25.3" }, { name = "polib", specifier = "==1.2.0" }, - { name = "psutil", specifier = "==7.1.2" }, + { name = "psutil", specifier = "==7.1.3" }, { name = "psycopg2", specifier = "==2.9.11" }, { name = "pygraphviz", marker = "sys_platform != 'win32' and extra == 'graph'", specifier = "==1.14" }, { name = "pyjwt", specifier = "==2.10.1" }, @@ -1489,14 +1477,15 @@ requires-dist = [ { name = "pytest", marker = "extra == 'testing'", specifier = "==8.4.2" }, { name = "pytest-django", marker = "extra == 'testing'", specifier = "==4.11.1" }, { name = "python-slugify", specifier = "==8.0.4" }, - { name = "redis", specifier = "==7.0.0" }, + { name = "redis", specifier = "==7.0.1" }, { name = "requests", specifier = "==2.32.5" }, - { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.42.1" }, + { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.43.0" }, { name = "six", specifier = "==1.17.0" }, { name = "sphinx", marker = "extra == 'docs'", specifier = "==8.2.3" }, { name = "sphinx-rtd-theme", marker = "extra == 'docs'", specifier = "==3.0.2" }, { name = "swapper", specifier = "==1.4.0" }, { name = "uvicorn", specifier = "==0.38.0" }, + { name = "whitenoise", specifier = ">=6.11.0" }, { name = "zeep", specifier = "==4.3.2" }, ] provides-extras = ["testing", "graph", "worker", "openai", "jupyter", "docs"] @@ -1505,14 +1494,14 @@ provides-extras = ["testing", "graph", "worker", "openai", "jupyter", "docs"] dev = [ { name = "bandit", specifier = "==1.8.6" }, { name = "celery-stubs", specifier = "==0.1.3" }, - { name = "coverage", specifier = "==7.11.0" }, + { name = "coverage", specifier = "==7.11.1" }, { name = "isort", specifier = "==7.0.0" }, { name = "mypy", specifier = "==1.18.2" }, { name = "mypy-extensions", specifier = "==1.1.0" }, { name = "pre-commit", specifier = "==4.3.0" }, { name = "pytest", specifier = "==8.4.2" }, { name = "pytest-django", specifier = "==4.11.1" }, - { name = "ruff", specifier = "==0.14.2" }, + { name = "ruff", specifier = "==0.14.4" }, ] linting = [ { name = "bandit", specifier = "==1.8.6" }, @@ -1521,10 +1510,10 @@ linting = [ { name = "mypy", specifier = "==1.18.2" }, { name = "mypy-extensions", specifier = "==1.1.0" }, { name = "pre-commit", specifier = "==4.3.0" }, - { name = "ruff", specifier = "==0.14.2" }, + { name = "ruff", specifier = "==0.14.4" }, ] testing = [ - { name = "coverage", specifier = "==7.11.0" }, + { name = "coverage", specifier = "==7.11.1" }, { name = "pytest", specifier = "==8.4.2" }, { name = "pytest-django", specifier = "==4.11.1" }, ] @@ -1686,11 +1675,11 @@ wheels = [ [[package]] name = "graphql-core" -version = "3.2.6" +version = "3.2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/16/7574029da84834349b60ed71614d66ca3afe46e9bf9c7b9562102acb7d4f/graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab", size = 505353, upload-time = "2025-01-26T16:36:27.374Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/9b/037a640a2983b09aed4a823f9cf1729e6d780b0671f854efa4727a7affbe/graphql_core-3.2.7.tar.gz", hash = "sha256:27b6904bdd3b43f2a0556dad5d579bdfdeab1f38e8e8788e555bdcb586a6f62c", size = 513484, upload-time = "2025-11-01T22:30:40.436Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f", size = 203416, upload-time = "2025-01-26T16:36:24.868Z" }, + { url = "https://files.pythonhosted.org/packages/0a/14/933037032608787fb92e365883ad6a741c235e0ff992865ec5d904a38f1e/graphql_core-3.2.7-py3-none-any.whl", hash = "sha256:17fc8f3ca4a42913d8e24d9ac9f08deddf0a0b2483076575757f6c412ead2ec0", size = 207262, upload-time = "2025-11-01T22:30:38.912Z" }, ] [[package]] @@ -1822,7 +1811,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.0.1" +version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -1839,14 +1828,14 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4c/9f0024c8457286c6bfd5405a15d650ec5ea36f420ef9bbc58b301f66cfc5/ipykernel-7.0.1.tar.gz", hash = "sha256:2d3fd7cdef22071c2abbad78f142b743228c5d59cd470d034871ae0ac359533c", size = 171460, upload-time = "2025-10-14T16:17:07.325Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/f7/761037905ffdec673533bfa43af8d4c31c859c778dfc3bbb71899875ec18/ipykernel-7.0.1-py3-none-any.whl", hash = "sha256:87182a8305e28954b6721087dec45b171712610111d494c17bb607befa1c4000", size = 118157, upload-time = "2025-10-14T16:17:05.606Z" }, + { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, ] [[package]] name = "ipython" -version = "9.6.0" +version = "9.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1860,9 +1849,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/34/29b18c62e39ee2f7a6a3bba7efd952729d8aadd45ca17efc34453b717665/ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731", size = 4396932, upload-time = "2025-09-29T10:55:53.948Z" } +sdist = { url = "https://files.pythonhosted.org/packages/29/e6/48c74d54039241a456add616464ea28c6ebf782e4110d419411b83dae06f/ipython-9.7.0.tar.gz", hash = "sha256:5f6de88c905a566c6a9d6c400a8fed54a638e1f7543d17aae2551133216b1e4e", size = 4422115, upload-time = "2025-11-05T12:18:54.646Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/c5/d5e07995077e48220269c28a221e168c91123ad5ceee44d548f54a057fc0/ipython-9.6.0-py3-none-any.whl", hash = "sha256:5f77efafc886d2f023442479b8149e7d86547ad0a979e9da9f045d252f648196", size = 616170, upload-time = "2025-09-29T10:55:47.676Z" }, + { url = "https://files.pythonhosted.org/packages/05/aa/62893d6a591d337aa59dcc4c6f6c842f1fe20cd72c8c5c1f980255243252/ipython-9.7.0-py3-none-any.whl", hash = "sha256:bce8ac85eb9521adc94e1845b4c03d88365fd6ac2f4908ec4ed1eb1b0a065f9f", size = 618911, upload-time = "2025-11-05T12:18:52.484Z" }, ] [[package]] @@ -1879,7 +1868,7 @@ wheels = [ [[package]] name = "ipywidgets" -version = "8.1.7" +version = "8.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "comm" }, @@ -1888,9 +1877,9 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721, upload-time = "2025-05-05T12:42:03.489Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/ae/c5ce1edc1afe042eadb445e95b0671b03cee61895264357956e61c0d2ac0/ipywidgets-8.1.8.tar.gz", hash = "sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668", size = 116739, upload-time = "2025-11-01T21:18:12.393Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806, upload-time = "2025-05-05T12:41:56.833Z" }, + { url = "https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl", hash = "sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e", size = 139808, upload-time = "2025-11-01T21:18:10.956Z" }, ] [[package]] @@ -2239,11 +2228,11 @@ wheels = [ [[package]] name = "jupyterlab-widgets" -version = "3.0.15" +version = "3.0.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149, upload-time = "2025-05-05T12:32:31.004Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423, upload-time = "2025-11-01T21:11:29.724Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, + { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926, upload-time = "2025-11-01T21:11:28.008Z" }, ] [[package]] @@ -2263,11 +2252,11 @@ wheels = [ [[package]] name = "lark" -version = "1.3.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/37/a13baf0135f348af608c667633cbe5d13aa2c5c15a56ae9ad3e6cba45ae3/lark-1.3.0.tar.gz", hash = "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48", size = 259551, upload-time = "2025-09-22T13:45:05.072Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/3e/1c6b43277de64fc3c0333b0e72ab7b52ddaaea205210d60d9b9f83c3d0c7/lark-1.3.0-py3-none-any.whl", hash = "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831", size = 113002, upload-time = "2025-09-22T13:45:03.747Z" }, + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] [[package]] @@ -2338,11 +2327,11 @@ wheels = [ [[package]] name = "markdown" -version = "3.9" +version = "3.10" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/37/02347f6d6d8279247a5837082ebc26fc0d5aaeaf75aa013fcbb433c777ab/markdown-3.9.tar.gz", hash = "sha256:d2900fe1782bd33bdbbd56859defef70c2e78fc46668f8eb9df3128138f2cb6a", size = 364585, upload-time = "2025-09-04T20:25:22.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/7dd27d9d863b3376fcf23a5a13cb5d024aed1db46f963f1b5735ae43b3be/markdown-3.10.tar.gz", hash = "sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e", size = 364931, upload-time = "2025-11-03T19:51:15.007Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/ae/44c4a6a4cbb496d93c6257954260fe3a6e91b7bed2240e5dad2a717f5111/markdown-3.9-py3-none-any.whl", hash = "sha256:9f4d91ed810864ea88a6f32c07ba8bee1346c0cc1f6b1f9f6c822f2a9667d280", size = 107441, upload-time = "2025-09-04T20:25:21.784Z" }, + { url = "https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl", hash = "sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c", size = 107678, upload-time = "2025-11-03T19:51:13.887Z" }, ] [[package]] @@ -2989,22 +2978,22 @@ wheels = [ [[package]] name = "psutil" -version = "7.1.2" +version = "7.1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/ec/7b8e6b9b1d22708138630ef34c53ab2b61032c04f16adfdbb96791c8c70c/psutil-7.1.2.tar.gz", hash = "sha256:aa225cdde1335ff9684708ee8c72650f6598d5ed2114b9a7c5802030b1785018", size = 487424, upload-time = "2025-10-25T10:46:34.931Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/88/bdd0a41e5857d5d703287598cbf08dad90aed56774ea52ae071bae9071b6/psutil-7.1.3.tar.gz", hash = "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74", size = 489059, upload-time = "2025-11-02T12:25:54.619Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/d9/b56cc9f883140ac10021a8c9b0f4e16eed1ba675c22513cdcbce3ba64014/psutil-7.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0cc5c6889b9871f231ed5455a9a02149e388fffcb30b607fb7a8896a6d95f22e", size = 238575, upload-time = "2025-10-25T10:46:38.728Z" }, - { url = "https://files.pythonhosted.org/packages/36/eb/28d22de383888deb252c818622196e709da98816e296ef95afda33f1c0a2/psutil-7.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8e9e77a977208d84aa363a4a12e0f72189d58bbf4e46b49aae29a2c6e93ef206", size = 239297, upload-time = "2025-10-25T10:46:41.347Z" }, - { url = "https://files.pythonhosted.org/packages/89/5d/220039e2f28cc129626e54d63892ab05c0d56a29818bfe7268dcb5008932/psutil-7.1.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d9623a5e4164d2220ecceb071f4b333b3c78866141e8887c072129185f41278", size = 280420, upload-time = "2025-10-25T10:46:44.122Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7a/286f0e1c167445b2ef4a6cbdfc8c59fdb45a5a493788950cf8467201dc73/psutil-7.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:364b1c10fe4ed59c89ec49e5f1a70da353b27986fa8233b4b999df4742a5ee2f", size = 283049, upload-time = "2025-10-25T10:46:47.095Z" }, - { url = "https://files.pythonhosted.org/packages/aa/cc/7eb93260794a42e39b976f3a4dde89725800b9f573b014fac142002a5c98/psutil-7.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f101ef84de7e05d41310e3ccbdd65a6dd1d9eed85e8aaf0758405d022308e204", size = 248713, upload-time = "2025-10-25T10:46:49.573Z" }, - { url = "https://files.pythonhosted.org/packages/ab/1a/0681a92b53366e01f0a099f5237d0c8a2f79d322ac589cccde5e30c8a4e2/psutil-7.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:20c00824048a95de67f00afedc7b08b282aa08638585b0206a9fb51f28f1a165", size = 244644, upload-time = "2025-10-25T10:46:51.924Z" }, - { url = "https://files.pythonhosted.org/packages/ae/89/b9f8d47ddbc52d7301fc868e8224e5f44ed3c7f55e6d0f54ecaf5dd9ff5e/psutil-7.1.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c9ba5c19f2d46203ee8c152c7b01df6eec87d883cfd8ee1af2ef2727f6b0f814", size = 237244, upload-time = "2025-10-25T10:47:07.086Z" }, - { url = "https://files.pythonhosted.org/packages/c8/7a/8628c2f6b240680a67d73d8742bb9ff39b1820a693740e43096d5dcb01e5/psutil-7.1.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:2a486030d2fe81bec023f703d3d155f4823a10a47c36784c84f1cc7f8d39bedb", size = 238101, upload-time = "2025-10-25T10:47:09.523Z" }, - { url = "https://files.pythonhosted.org/packages/30/28/5e27f4d5a0e347f8e3cc16cd7d35533dbce086c95807f1f0e9cd77e26c10/psutil-7.1.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3efd8fc791492e7808a51cb2b94889db7578bfaea22df931424f874468e389e3", size = 258675, upload-time = "2025-10-25T10:47:11.082Z" }, - { url = "https://files.pythonhosted.org/packages/e5/5c/79cf60c9acf36d087f0db0f82066fca4a780e97e5b3a2e4c38209c03d170/psutil-7.1.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2aeb9b64f481b8eabfc633bd39e0016d4d8bbcd590d984af764d80bf0851b8a", size = 260203, upload-time = "2025-10-25T10:47:13.226Z" }, - { url = "https://files.pythonhosted.org/packages/f7/03/0a464404c51685dcb9329fdd660b1721e076ccd7b3d97dee066bcc9ffb15/psutil-7.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:8e17852114c4e7996fe9da4745c2bdef001ebbf2f260dec406290e66628bdb91", size = 246714, upload-time = "2025-10-25T10:47:15.093Z" }, - { url = "https://files.pythonhosted.org/packages/6a/32/97ca2090f2f1b45b01b6aa7ae161cfe50671de097311975ca6eea3e7aabc/psutil-7.1.2-cp37-abi3-win_arm64.whl", hash = "sha256:3e988455e61c240cc879cb62a008c2699231bf3e3d061d7fce4234463fd2abb4", size = 243742, upload-time = "2025-10-25T10:47:17.302Z" }, + { url = "https://files.pythonhosted.org/packages/bd/93/0c49e776b8734fef56ec9c5c57f923922f2cf0497d62e0f419465f28f3d0/psutil-7.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc", size = 239751, upload-time = "2025-11-02T12:25:58.161Z" }, + { url = "https://files.pythonhosted.org/packages/6f/8d/b31e39c769e70780f007969815195a55c81a63efebdd4dbe9e7a113adb2f/psutil-7.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0", size = 240368, upload-time = "2025-11-02T12:26:00.491Z" }, + { url = "https://files.pythonhosted.org/packages/62/61/23fd4acc3c9eebbf6b6c78bcd89e5d020cfde4acf0a9233e9d4e3fa698b4/psutil-7.1.3-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7", size = 287134, upload-time = "2025-11-02T12:26:02.613Z" }, + { url = "https://files.pythonhosted.org/packages/30/1c/f921a009ea9ceb51aa355cb0cc118f68d354db36eae18174bab63affb3e6/psutil-7.1.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251", size = 289904, upload-time = "2025-11-02T12:26:05.207Z" }, + { url = "https://files.pythonhosted.org/packages/a6/82/62d68066e13e46a5116df187d319d1724b3f437ddd0f958756fc052677f4/psutil-7.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa", size = 249642, upload-time = "2025-11-02T12:26:07.447Z" }, + { url = "https://files.pythonhosted.org/packages/df/ad/c1cd5fe965c14a0392112f68362cfceb5230819dbb5b1888950d18a11d9f/psutil-7.1.3-cp313-cp313t-win_arm64.whl", hash = "sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee", size = 245518, upload-time = "2025-11-02T12:26:09.719Z" }, + { url = "https://files.pythonhosted.org/packages/ef/94/46b9154a800253e7ecff5aaacdf8ebf43db99de4a2dfa18575b02548654e/psutil-7.1.3-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab", size = 238359, upload-time = "2025-11-02T12:26:25.284Z" }, + { url = "https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880", size = 239171, upload-time = "2025-11-02T12:26:27.23Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3", size = 263261, upload-time = "2025-11-02T12:26:29.48Z" }, + { url = "https://files.pythonhosted.org/packages/e0/95/992c8816a74016eb095e73585d747e0a8ea21a061ed3689474fabb29a395/psutil-7.1.3-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b", size = 264635, upload-time = "2025-11-02T12:26:31.74Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/c3ed1a622b6ae2fd3c945a366e64eb35247a31e4db16cf5095e269e8eb3c/psutil-7.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd", size = 247633, upload-time = "2025-11-02T12:26:33.887Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ad/33b2ccec09bf96c2b2ef3f9a6f66baac8253d7565d8839e024a6b905d45d/psutil-7.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1", size = 244608, upload-time = "2025-11-02T12:26:36.136Z" }, ] [[package]] @@ -3316,11 +3305,11 @@ wheels = [ [[package]] name = "redis" -version = "7.0.0" +version = "7.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d2/0e/80de0c7d9b04360331906b6b713a967e6523d155a92090983eba2e99302e/redis-7.0.0.tar.gz", hash = "sha256:6546ada54354248a53a47342d36abe6172bb156f23d24f018fda2e3c06b9c97a", size = 4754895, upload-time = "2025-10-22T15:38:36.128Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/8f/f125feec0b958e8d22c8f0b492b30b1991d9499a4315dfde466cf4289edc/redis-7.0.1.tar.gz", hash = "sha256:c949df947dca995dc68fdf5a7863950bf6df24f8d6022394585acc98e81624f1", size = 4755322, upload-time = "2025-10-27T14:34:00.33Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/de/68c1add9d9a49588e6f75a149e079e44bab973e748a35e0582ccada09002/redis-7.0.0-py3-none-any.whl", hash = "sha256:1e66c8355b3443af78367c4937484cd875fdf9f5f14e1fed14aa95869e64f6d1", size = 339526, upload-time = "2025-10-22T15:38:34.901Z" }, + { url = "https://files.pythonhosted.org/packages/e9/97/9f22a33c475cda519f20aba6babb340fb2f2254a02fb947816960d1e669a/redis-7.0.1-py3-none-any.whl", hash = "sha256:4977af3c7d67f8f0eb8b6fec0dafc9605db9343142f634041fb0235f67c0588a", size = 339938, upload-time = "2025-10-27T14:33:58.553Z" }, ] [[package]] @@ -3485,28 +3474,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.2" +version = "0.14.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/34/8218a19b2055b80601e8fd201ec723c74c7fe1ca06d525a43ed07b6d8e85/ruff-0.14.2.tar.gz", hash = "sha256:98da787668f239313d9c902ca7c523fe11b8ec3f39345553a51b25abc4629c96", size = 5539663, upload-time = "2025-10-23T19:37:00.956Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/55/cccfca45157a2031dcbb5a462a67f7cf27f8b37d4b3b1cd7438f0f5c1df6/ruff-0.14.4.tar.gz", hash = "sha256:f459a49fe1085a749f15414ca76f61595f1a2cc8778ed7c279b6ca2e1fd19df3", size = 5587844, upload-time = "2025-11-06T22:07:45.033Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/dd/23eb2db5ad9acae7c845700493b72d3ae214dce0b226f27df89216110f2b/ruff-0.14.2-py3-none-linux_armv6l.whl", hash = "sha256:7cbe4e593505bdec5884c2d0a4d791a90301bc23e49a6b1eb642dd85ef9c64f1", size = 12533390, upload-time = "2025-10-23T19:36:18.044Z" }, - { url = "https://files.pythonhosted.org/packages/5a/8c/5f9acff43ddcf3f85130d0146d0477e28ccecc495f9f684f8f7119b74c0d/ruff-0.14.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8d54b561729cee92f8d89c316ad7a3f9705533f5903b042399b6ae0ddfc62e11", size = 12887187, upload-time = "2025-10-23T19:36:22.664Z" }, - { url = "https://files.pythonhosted.org/packages/99/fa/047646491479074029665022e9f3dc6f0515797f40a4b6014ea8474c539d/ruff-0.14.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5c8753dfa44ebb2cde10ce5b4d2ef55a41fb9d9b16732a2c5df64620dbda44a3", size = 11925177, upload-time = "2025-10-23T19:36:24.778Z" }, - { url = "https://files.pythonhosted.org/packages/15/8b/c44cf7fe6e59ab24a9d939493a11030b503bdc2a16622cede8b7b1df0114/ruff-0.14.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d0bbeffb8d9f4fccf7b5198d566d0bad99a9cb622f1fc3467af96cb8773c9e3", size = 12358285, upload-time = "2025-10-23T19:36:26.979Z" }, - { url = "https://files.pythonhosted.org/packages/45/01/47701b26254267ef40369aea3acb62a7b23e921c27372d127e0f3af48092/ruff-0.14.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7047f0c5a713a401e43a88d36843d9c83a19c584e63d664474675620aaa634a8", size = 12303832, upload-time = "2025-10-23T19:36:29.192Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5c/ae7244ca4fbdf2bee9d6405dcd5bc6ae51ee1df66eb7a9884b77b8af856d/ruff-0.14.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bf8d2f9aa1602599217d82e8e0af7fd33e5878c4d98f37906b7c93f46f9a839", size = 13036995, upload-time = "2025-10-23T19:36:31.861Z" }, - { url = "https://files.pythonhosted.org/packages/27/4c/0860a79ce6fd4c709ac01173f76f929d53f59748d0dcdd662519835dae43/ruff-0.14.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1c505b389e19c57a317cf4b42db824e2fca96ffb3d86766c1c9f8b96d32048a7", size = 14512649, upload-time = "2025-10-23T19:36:33.915Z" }, - { url = "https://files.pythonhosted.org/packages/7f/7f/d365de998069720a3abfc250ddd876fc4b81a403a766c74ff9bde15b5378/ruff-0.14.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a307fc45ebd887b3f26b36d9326bb70bf69b01561950cdcc6c0bdf7bb8e0f7cc", size = 14088182, upload-time = "2025-10-23T19:36:36.983Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ea/d8e3e6b209162000a7be1faa41b0a0c16a133010311edc3329753cc6596a/ruff-0.14.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61ae91a32c853172f832c2f40bd05fd69f491db7289fb85a9b941ebdd549781a", size = 13599516, upload-time = "2025-10-23T19:36:39.208Z" }, - { url = "https://files.pythonhosted.org/packages/fa/ea/c7810322086db68989fb20a8d5221dd3b79e49e396b01badca07b433ab45/ruff-0.14.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1967e40286f63ee23c615e8e7e98098dedc7301568bd88991f6e544d8ae096", size = 13272690, upload-time = "2025-10-23T19:36:41.453Z" }, - { url = "https://files.pythonhosted.org/packages/a9/39/10b05acf8c45786ef501d454e00937e1b97964f846bf28883d1f9619928a/ruff-0.14.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2877f02119cdebf52a632d743a2e302dea422bfae152ebe2f193d3285a3a65df", size = 13496497, upload-time = "2025-10-23T19:36:43.61Z" }, - { url = "https://files.pythonhosted.org/packages/59/a1/1f25f8301e13751c30895092485fada29076e5e14264bdacc37202e85d24/ruff-0.14.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e681c5bc777de5af898decdcb6ba3321d0d466f4cb43c3e7cc2c3b4e7b843a05", size = 12266116, upload-time = "2025-10-23T19:36:45.625Z" }, - { url = "https://files.pythonhosted.org/packages/5c/fa/0029bfc9ce16ae78164e6923ef392e5f173b793b26cc39aa1d8b366cf9dc/ruff-0.14.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e21be42d72e224736f0c992cdb9959a2fa53c7e943b97ef5d081e13170e3ffc5", size = 12281345, upload-time = "2025-10-23T19:36:47.618Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ab/ece7baa3c0f29b7683be868c024f0838770c16607bea6852e46b202f1ff6/ruff-0.14.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b8264016f6f209fac16262882dbebf3f8be1629777cf0f37e7aff071b3e9b92e", size = 12629296, upload-time = "2025-10-23T19:36:49.789Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7f/638f54b43f3d4e48c6a68062794e5b367ddac778051806b9e235dfb7aa81/ruff-0.14.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5ca36b4cb4db3067a3b24444463ceea5565ea78b95fe9a07ca7cb7fd16948770", size = 13371610, upload-time = "2025-10-23T19:36:51.882Z" }, - { url = "https://files.pythonhosted.org/packages/8d/35/3654a973ebe5b32e1fd4a08ed2d46755af7267da7ac710d97420d7b8657d/ruff-0.14.2-py3-none-win32.whl", hash = "sha256:41775927d287685e08f48d8eb3f765625ab0b7042cc9377e20e64f4eb0056ee9", size = 12415318, upload-time = "2025-10-23T19:36:53.961Z" }, - { url = "https://files.pythonhosted.org/packages/71/30/3758bcf9e0b6a4193a6f51abf84254aba00887dfa8c20aba18aa366c5f57/ruff-0.14.2-py3-none-win_amd64.whl", hash = "sha256:0df3424aa5c3c08b34ed8ce099df1021e3adaca6e90229273496b839e5a7e1af", size = 13565279, upload-time = "2025-10-23T19:36:56.578Z" }, - { url = "https://files.pythonhosted.org/packages/2e/5d/aa883766f8ef9ffbe6aa24f7192fb71632f31a30e77eb39aa2b0dc4290ac/ruff-0.14.2-py3-none-win_arm64.whl", hash = "sha256:ea9d635e83ba21569fbacda7e78afbfeb94911c9434aff06192d9bc23fd5495a", size = 12554956, upload-time = "2025-10-23T19:36:58.714Z" }, + { url = "https://files.pythonhosted.org/packages/17/b9/67240254166ae1eaa38dec32265e9153ac53645a6c6670ed36ad00722af8/ruff-0.14.4-py3-none-linux_armv6l.whl", hash = "sha256:e6604613ffbcf2297cd5dcba0e0ac9bd0c11dc026442dfbb614504e87c349518", size = 12606781, upload-time = "2025-11-06T22:07:01.841Z" }, + { url = "https://files.pythonhosted.org/packages/46/c8/09b3ab245d8652eafe5256ab59718641429f68681ee713ff06c5c549f156/ruff-0.14.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d99c0b52b6f0598acede45ee78288e5e9b4409d1ce7f661f0fa36d4cbeadf9a4", size = 12946765, upload-time = "2025-11-06T22:07:05.858Z" }, + { url = "https://files.pythonhosted.org/packages/14/bb/1564b000219144bf5eed2359edc94c3590dd49d510751dad26202c18a17d/ruff-0.14.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9358d490ec030f1b51d048a7fd6ead418ed0826daf6149e95e30aa67c168af33", size = 11928120, upload-time = "2025-11-06T22:07:08.023Z" }, + { url = "https://files.pythonhosted.org/packages/a3/92/d5f1770e9988cc0742fefaa351e840d9aef04ec24ae1be36f333f96d5704/ruff-0.14.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b40d27924f1f02dfa827b9c0712a13c0e4b108421665322218fc38caf615c2", size = 12370877, upload-time = "2025-11-06T22:07:10.015Z" }, + { url = "https://files.pythonhosted.org/packages/e2/29/e9282efa55f1973d109faf839a63235575519c8ad278cc87a182a366810e/ruff-0.14.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5e649052a294fe00818650712083cddc6cc02744afaf37202c65df9ea52efa5", size = 12408538, upload-time = "2025-11-06T22:07:13.085Z" }, + { url = "https://files.pythonhosted.org/packages/8e/01/930ed6ecfce130144b32d77d8d69f5c610e6d23e6857927150adf5d7379a/ruff-0.14.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa082a8f878deeba955531f975881828fd6afd90dfa757c2b0808aadb437136e", size = 13141942, upload-time = "2025-11-06T22:07:15.386Z" }, + { url = "https://files.pythonhosted.org/packages/6a/46/a9c89b42b231a9f487233f17a89cbef9d5acd538d9488687a02ad288fa6b/ruff-0.14.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1043c6811c2419e39011890f14d0a30470f19d47d197c4858b2787dfa698f6c8", size = 14544306, upload-time = "2025-11-06T22:07:17.631Z" }, + { url = "https://files.pythonhosted.org/packages/78/96/9c6cf86491f2a6d52758b830b89b78c2ae61e8ca66b86bf5a20af73d20e6/ruff-0.14.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9f3a936ac27fb7c2a93e4f4b943a662775879ac579a433291a6f69428722649", size = 14210427, upload-time = "2025-11-06T22:07:19.832Z" }, + { url = "https://files.pythonhosted.org/packages/71/f4/0666fe7769a54f63e66404e8ff698de1dcde733e12e2fd1c9c6efb689cb5/ruff-0.14.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95643ffd209ce78bc113266b88fba3d39e0461f0cbc8b55fb92505030fb4a850", size = 13658488, upload-time = "2025-11-06T22:07:22.32Z" }, + { url = "https://files.pythonhosted.org/packages/ee/79/6ad4dda2cfd55e41ac9ed6d73ef9ab9475b1eef69f3a85957210c74ba12c/ruff-0.14.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456daa2fa1021bc86ca857f43fe29d5d8b3f0e55e9f90c58c317c1dcc2afc7b5", size = 13354908, upload-time = "2025-11-06T22:07:24.347Z" }, + { url = "https://files.pythonhosted.org/packages/b5/60/f0b6990f740bb15c1588601d19d21bcc1bd5de4330a07222041678a8e04f/ruff-0.14.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f911bba769e4a9f51af6e70037bb72b70b45a16db5ce73e1f72aefe6f6d62132", size = 13587803, upload-time = "2025-11-06T22:07:26.327Z" }, + { url = "https://files.pythonhosted.org/packages/c9/da/eaaada586f80068728338e0ef7f29ab3e4a08a692f92eb901a4f06bbff24/ruff-0.14.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:76158a7369b3979fa878612c623a7e5430c18b2fd1c73b214945c2d06337db67", size = 12279654, upload-time = "2025-11-06T22:07:28.46Z" }, + { url = "https://files.pythonhosted.org/packages/66/d4/b1d0e82cf9bf8aed10a6d45be47b3f402730aa2c438164424783ac88c0ed/ruff-0.14.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f3b8f3b442d2b14c246e7aeca2e75915159e06a3540e2f4bed9f50d062d24469", size = 12357520, upload-time = "2025-11-06T22:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/04/f4/53e2b42cc82804617e5c7950b7079d79996c27e99c4652131c6a1100657f/ruff-0.14.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c62da9a06779deecf4d17ed04939ae8b31b517643b26370c3be1d26f3ef7dbde", size = 12719431, upload-time = "2025-11-06T22:07:33.831Z" }, + { url = "https://files.pythonhosted.org/packages/a2/94/80e3d74ed9a72d64e94a7b7706b1c1ebaa315ef2076fd33581f6a1cd2f95/ruff-0.14.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5a443a83a1506c684e98acb8cb55abaf3ef725078be40237463dae4463366349", size = 13464394, upload-time = "2025-11-06T22:07:35.905Z" }, + { url = "https://files.pythonhosted.org/packages/54/1a/a49f071f04c42345c793d22f6cf5e0920095e286119ee53a64a3a3004825/ruff-0.14.4-py3-none-win32.whl", hash = "sha256:643b69cb63cd996f1fc7229da726d07ac307eae442dd8974dbc7cf22c1e18fff", size = 12493429, upload-time = "2025-11-06T22:07:38.43Z" }, + { url = "https://files.pythonhosted.org/packages/bc/22/e58c43e641145a2b670328fb98bc384e20679b5774258b1e540207580266/ruff-0.14.4-py3-none-win_amd64.whl", hash = "sha256:26673da283b96fe35fa0c939bf8411abec47111644aa9f7cfbd3c573fb125d2c", size = 13635380, upload-time = "2025-11-06T22:07:40.496Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/4168a751ddbbf43e86544b4de8b5c3b7be8d7167a2a5cb977d274e04f0a1/ruff-0.14.4-py3-none-win_arm64.whl", hash = "sha256:dd09c292479596b0e6fec8cd95c65c3a6dc68e9ad17b8f2382130f87ff6a75bb", size = 12663065, upload-time = "2025-11-06T22:07:42.603Z" }, ] [[package]] @@ -3520,15 +3509,15 @@ wheels = [ [[package]] name = "sentry-sdk" -version = "2.42.1" +version = "2.43.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/31/04/ec8c1dd9250847303d98516e917978cb1c7083024770d86d657d2ccb5a70/sentry_sdk-2.42.1.tar.gz", hash = "sha256:8598cc6edcfe74cb8074ba6a7c15338cdee93d63d3eb9b9943b4b568354ad5b6", size = 354839, upload-time = "2025-10-20T12:38:40.45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/18/09875b4323b03ca9025bae7e6539797b27e4fc032998a466b4b9c3d24653/sentry_sdk-2.43.0.tar.gz", hash = "sha256:52ed6e251c5d2c084224d73efee56b007ef5c2d408a4a071270e82131d336e20", size = 368953, upload-time = "2025-10-29T11:26:08.156Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/cb/c21b96ff379923310b4fb2c06e8d560d801e24aeb300faa72a04776868fc/sentry_sdk-2.42.1-py2.py3-none-any.whl", hash = "sha256:f8716b50c927d3beb41bc88439dc6bcd872237b596df5b14613e2ade104aee02", size = 380952, upload-time = "2025-10-20T12:38:38.88Z" }, + { url = "https://files.pythonhosted.org/packages/69/31/8228fa962f7fd8814d634e4ebece8780e2cdcfbdf0cd2e14d4a6861a7cd5/sentry_sdk-2.43.0-py2.py3-none-any.whl", hash = "sha256:4aacafcf1756ef066d359ae35030881917160ba7f6fc3ae11e0e58b09edc2d5d", size = 400997, upload-time = "2025-10-29T11:26:05.77Z" }, ] [package.optional-dependencies] @@ -3913,16 +3902,16 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.35.3" +version = "20.35.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/28/e6f1a6f655d620846bd9df527390ecc26b3805a0c5989048c210e22c5ca9/virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", size = 6028799, upload-time = "2025-10-29T06:57:40.511Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/73/d9a94da0e9d470a543c1b9d3ccbceb0f59455983088e727b8a1824ed90fb/virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a", size = 5981061, upload-time = "2025-10-10T21:23:30.433Z" }, + { url = "https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b", size = 6005095, upload-time = "2025-10-29T06:57:37.598Z" }, ] [[package]] @@ -3936,11 +3925,11 @@ wheels = [ [[package]] name = "webcolors" -version = "24.11.1" +version = "25.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, ] [[package]] @@ -3962,12 +3951,21 @@ wheels = [ ] [[package]] -name = "widgetsnbextension" -version = "4.0.14" +name = "whitenoise" +version = "6.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428, upload-time = "2025-04-10T13:01:25.628Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/95/8c81ec6b6ebcbf8aca2de7603070ccf37dbb873b03f20708e0f7c1664bc6/whitenoise-6.11.0.tar.gz", hash = "sha256:0f5bfce6061ae6611cd9396a8231e088722e4fc67bc13a111be74c738d99375f", size = 26432, upload-time = "2025-09-18T09:16:10.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503, upload-time = "2025-04-10T13:01:23.086Z" }, + { url = "https://files.pythonhosted.org/packages/6c/e9/4366332f9295fe0647d7d3251ce18f5615fbcb12d02c79a26f8dba9221b3/whitenoise-6.11.0-py3-none-any.whl", hash = "sha256:b2aeb45950597236f53b5342b3121c5de69c8da0109362aee506ce88e022d258", size = 20197, upload-time = "2025-09-18T09:16:09.754Z" }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402, upload-time = "2025-11-01T21:15:55.178Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, ] [[package]] diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.mo b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.mo deleted file mode 100644 index 692bae973dd4d2378be0bc2925675f8907af7490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmaiv&rX9t5XNit#L=^dJ$SQ&OHCWP{)s>-At}%xa9_)cYw9jpwniVs*YjB%F81h` z{4&YRH~1XO~*GqMTtqz;n!Uq2?x z(kwpy;^7OCR#qsC@zrBaD?aUYzvoijlHDsegRu8?wFdv_8{@tR1F_oaR;rE>|5;jR F@(W9IUxNSu diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.mo b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.mo deleted file mode 100644 index 692bae973dd4d2378be0bc2925675f8907af7490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmaiv&rX9t5XNit#L=^dJ$SQ&OHCWP{)s>-At}%xa9_)cYw9jpwniVs*YjB%F81h` z{4&YRH~1XO~*GqMTtqz;n!Uq2?x z(kwpy;^7OCR#qsC@zrBaD?aUYzvoijlHDsegRu8?wFdv_8{@tR1F_oaR;rE>|5;jR F@(W9IUxNSu

_#>gl|@G$-GQt|f{A8fQpkMB?Sc7Ec`6U0hT>@{C=~i? zs>C&?k+7R)hwZt$#H_K0aILyx*6if6uPFBs?Q5S&TeZ>w7UVMTC29wTvlxFMMS8RC zZbo?nHB{nlAJuLvb7&)^%e(g!>z>jin-vQo+Z-dIJ+;!m`0zv}M0sGLDQl*bP)W2t zh8c5M!E0Tyu0^~St{=s_XVv?iwZpcu>`cqWUNWYyR(kJ4e4I!g5acs&}=U8 z_ZZ&^Pf7`oSe-DM_0Flt4?9DiZo^4El>MJv8V4M)68!M>ib5hmW%-om7Rqgd%-;JG zoM@H3sOzZnffke}^PP{sI$;mx2JC_+DZ6V=VM|FxdgvHj`G0?*Lhzqu(PM%xSmM%8 zvg!Z&o&_(eO54%W<76^Udh{rz9!jXw*->PpV)Q@?>xa^9QxH^+`Q!5rxG`3xrS$=8 zZ09lg#8)=5dIfZL0ca zM^AxfogM}xrHV?^1EHMS0@nxR@dl4LVo`4G8J9R#r?%w~Z}9s)x)o=XoLZI>%V70P z{_r#t{Nef3{f>?srJfpBXMRoUPXM=LxTN1i=M80Ac zH$xb!{^f^zu7_ld9N}^BoVP?z%ko!6&m*k3F)A8(wS>x9{OS)WJJA&@x_ssoSmw5M zlz7J8Dt!5U!aj zcdfE+f6QGIzOWoo_hA+WXhmXlZu=uq*wJg!od7KQvY-u+sQ|A9tnRk*%6+{S0om?x z?q6K=^uy=il`FK#ZE10jFCCP>hN1%v*a^I%nxx6~g@5-!B(zcpln6RS z*k4s?Re{o!($TkaTUG*WohqTaHjbQqq^drw9PDiD@sWH-&+px$YVv^ZNBgYrc@x}g z%p=f26S~hL9m*1le!X5PI*fqL)S5k#Go0?g0!+kf;LfHsf zccEA{&R?|c-q7bsIlIrj+dlCqV%>ea>y^l@TcLXw5hb4mAs|XRyzsnUS%qKqvWC*< zSfSeDs{#VLs4I8CnY)^&rxop<5^Eg98K3ss#{Q*4=dqu+z;!{_eW;>CI+cf#W#;BitPttn(y_R>qX}S^hk0l8X9u?gcLvl1LYeg6$c@Do2-hpOXJTzUSF* z-o$vYjb(U@#hAy(c#XX5j$0Q7!)860K`rzJpWrv=B9@Y`;d9)?N<49&Utt}2=z;Xi z8hN9N1~HB!7{wVZ!tYp!3#c8gxP0B^fA9s*cTffA@gZKJI(6$T4#)C2pWbeqK!f z)zTXtXrUm9jH15KfE}1Ynqgx|ZT1tlul}zO>B7K3}YJF$;FBA7l$N&HU diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index 3a3adf09..90a18748 100644 --- a/evibes/locale/he_IL/LC_MESSAGES/django.po +++ b/evibes/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,71 @@ msgstr "אפשרויות SEO" msgid "Debugging Options" msgstr "אפשרויות ניפוי באגים" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"ברוכים הבאים לתיעוד של eVibes. eVibes היא פלטפורמת מסחר אלקטרוני עוצמתית המאפשרת להקים ולנהל חנות מקוונת מכל סוג בכמה לחיצות בלבד. ## תכונות עיקריות - **קטלוג מוצרים:** ניהול פרטי מוצרים, מחירים, מלאי וזמינות בקטגוריות מרובות. - **ניהול הזמנות:** עיבוד הזמנות, מעקב אחר ביצוען וטיפול יעיל בבקשות לקוחות.\n" +"- **אימות ואישור:** אימות משתמשים מקיף באמצעות אסימוני JWT והרשאות מבוססות תפקידים. - **עיבוד תשלומים:** שלבו מספר שערי תשלום ונהלו עסקאות בצורה מאובטחת. - **ניהול בלוג ותוכן:** צרו ונהלו פוסטים בבלוג ותוכן שיווקי לחנות שלכם. - **פעולות B2B:** נקודות קצה ייעודיות לעסקאות בין עסקים וניהול סיטונאי.\n" +"- **תמיכה בריבוי שפות:** שירות ללקוחות ברחבי העולם עם יכולות בינלאומיות מלאות (i18n). - **אינטגרציות מותאמות אישית:** ארכיטקטורת API ניתנת להרחבה לשילוב עם פלטפורמות ושירותים חיצוניים. - **ניתוחים ודיווחים:** יצירת דוחות מפורטים על מכירות, מלאי והתנהגות לקוחות. - **עדכונים בזמן אמת:** קבלת נתונים בזמן אמת על רמות המלאי, סטטוס ההזמנות ושינויים במחירים.\n" +"\n" +"## ממשקי API זמינים - **REST API:** ממשק RESTful מלא (תיעוד זה) - **GraphQL API:** זמין ב-`/graphql/` עם ממשק GraphiQL לשאילתות אינטראקטיביות ## אימות - האימות מתבצע באמצעות אסימוני JWT. כלול את האסימון בכותרת `X-EVIBES-AUTH` של בקשותיך בפורמט `Bearer `.\n" +"- אורך חיי אסימון הגישה הוא {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}. - אורך חיי אסימון הרענון הוא {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} שעות. - אסימוני הרענון מסתובבים באופן אוטומטי ומבוטלים לאחר השימוש לשם אבטחה משופרת. ## בינלאומיות (i18n) - הגדר את הכותרת `Accept-Language` כדי לציין את השפה המועדפת עליך (לדוגמה, `Accept-Language: en-US`).\n" +"- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** (הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" +"- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus (מוגנים באמצעות אימות בסיסי): `/prometheus/` ## גרסה גרסת ה-API הנוכחית: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "בית" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.mo b/evibes/locale/hi_IN/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index badc8147..bd849690 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/locale/hi_IN/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -160,6 +160,75 @@ msgstr "" msgid "Debugging Options" msgstr "" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and " +"manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and " +"availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle " +"customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with " +"JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage " +"transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing " +"content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business " +"transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full " +"internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with " +"external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " +"and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " +"and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " +"interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-" +"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " +"DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " +"type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for " +"enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., " +"`Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 6b2e56eb..c0948841 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -160,6 +160,75 @@ msgstr "" msgid "Debugging Options" msgstr "" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and " +"manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and " +"availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle " +"customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with " +"JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage " +"transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing " +"content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business " +"transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full " +"internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with " +"external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " +"and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " +"and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " +"interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-" +"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " +"DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " +"type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for " +"enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., " +"`Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index 8826865c32933d19e284ab6b6c0d1b03487febc1..000dba3fef542a38366dd339ddd5c04bf9c01bd4 100644 GIT binary patch literal 8637 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\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opsi SEO" msgid "Debugging Options" msgstr "Opsi Debugging" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Selamat datang di dokumentasi eVibes.\n" +"\n" +"eVibes adalah platform e-commerce yang kuat yang memungkinkan Anda untuk meluncurkan dan mengelola toko online dalam bentuk apa pun hanya dengan beberapa klik.\n" +"\n" +"## Fitur Utama\n" +"- Katalog Produk:** Kelola detail produk, harga, inventaris, dan ketersediaan di berbagai kategori.\n" +"- Manajemen Pesanan:** Memproses pesanan, melacak pemenuhan pesanan, dan menangani permintaan pelanggan secara efisien.\n" +"- Autentikasi & Otorisasi:** Autentikasi pengguna yang komprehensif dengan token JWT dan izin berbasis peran.\n" +"- Pemrosesan Pembayaran:** Mengintegrasikan beberapa gateway pembayaran dan mengelola transaksi dengan aman.\n" +"- Manajemen Blog & Konten:** Buat dan kelola posting blog dan konten pemasaran untuk toko Anda.\n" +"- ** Operasi B2B:** Titik akhir khusus untuk transaksi bisnis-ke-bisnis dan manajemen grosir.\n" +"- Dukungan Multi-bahasa:** Melayani pelanggan di seluruh dunia dengan kemampuan internasionalisasi penuh (i18n).\n" +"- Integrasi Khusus:** Arsitektur API yang dapat diperluas untuk berintegrasi dengan platform dan layanan eksternal.\n" +"- Analisis & Pelaporan:** Menghasilkan laporan terperinci tentang penjualan, inventaris, dan perilaku pelanggan.\n" +"- **Pembaruan Waktu Nyata:** Dapatkan data langsung tentang tingkat inventaris, status pesanan, dan perubahan harga.\n" +"\n" +"## API yang tersedia\n" +"- **REST API:** Antarmuka RESTful penuh (dokumentasi ini)\n" +"- API GraphQL:** Tersedia di `/graphql/` dengan antarmuka GraphiQL untuk kueri interaktif\n" +"\n" +"## Otentikasi\n" +"- Otentikasi ditangani melalui token JWT. Sertakan token di header `X-EVIBES-AUTH` pada permintaan Anda dalam format `Bearer `.\n" +"- Masa berlaku token akses adalah {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Masa berlaku token refresh adalah {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} jam.\n" +"- Refresh token secara otomatis dirotasi dan dibatalkan setelah digunakan untuk meningkatkan keamanan.\n" +"\n" +"## Internasionalisasi (i18n)\n" +"- Atur header `Accept-Language` untuk menentukan bahasa yang Anda inginkan (misalnya, `Accept-Language: en-US`).\n" +"- Bahasa yang tersedia dapat diambil dari titik akhir `/app/languages/`.\n" +"- Semua konten yang berhadapan dengan pengguna mendukung beberapa bahasa secara langsung.\n" +"\n" +"Format Tanggapan ## Format Tanggapan\n" +"API mendukung beberapa format respons:\n" +"- **JSON** (default, berformat camelCase)\n" +"- **XML** (tambahkan `?format=xml` atau setel `Accept: application/xml`)\n" +"- **YAML** (tambahkan `?format=yaml` atau setel `Accept: application/x-yaml`)\n" +"\n" +"## Kesehatan & Pemantauan\n" +"- Pemeriksaan kesehatan: `/health/`\n" +"- Metrik Prometheus (dilindungi oleh autentikasi dasar): `/prometheus/`\n" +"\n" +"## Versi\n" +"Versi API saat ini: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Beranda" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index fd1353cdf21fe5600e03cad73dccf914b172de0a..97e423fa6a0268e2bdeacd8b8df52e799b9e83e9 100644 GIT binary patch literal 9052 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 AL;wH) delta 985 zcmXxj%PT}-7{~Dk$9)*%KJNExX=;Q*F2&NyVirpI3n*(RD+^0mC^j~33u;oVC_70u zN=RAE+GK@NzP~fCC-3>3_sp4jpXYgBud_c<|E=8HHlm-=z*x;P8^yb9F2qHSSs7kB zZ?T&B3-;hAc3{0{R)UkL_vbKzix|Zf_xUDPG2cPn^X-(IN*-Ke7#}f&DJ;TI$C--?8o0xlf(l=}8Mj1_GJtnXmSFsp3un@OU z74EtDiJPBeE6;CG38ye0)2L2;Im0~E!dGNSPT?AM;5DkXDbyFg zoyD|8pEsgfJdIjt36+qK-FS#f=mGWK2ex3C{pHqTA^J~pHpT;P5qnez(u-aXP;qvO`b&~Gc0jG~XBv!*rFp)&3Nf9Qu*l@6go6?3?)R}(^= zP-rU@oTH#B{i7%uC7@`}5FBDvsnEG%yMu11&{~E%AD!T$sLNoD*vV*d^MBM<9nw~Y d&PW$SEl\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opzioni SEO" msgid "Debugging Options" msgstr "Opzioni di debug" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Benvenuti nella documentazione di eVibes.\n" +"\n" +"eVibes è una potente piattaforma di e-commerce che consente di lanciare e gestire un negozio online di qualsiasi tipo in pochi clic.\n" +"\n" +"## Caratteristiche principali\n" +"- **Catalogo dei prodotti:** Gestione dei dettagli dei prodotti, dei prezzi, delle scorte e della disponibilità di più categorie.\n" +"- Gestione degli ordini:** Elaborazione degli ordini, monitoraggio dell'evasione e gestione efficiente delle richieste dei clienti.\n" +"- Autenticazione e autorizzazione:** Autenticazione completa degli utenti con token JWT e autorizzazioni basate sui ruoli.\n" +"- Elaborazione dei pagamenti:** Integrazione di più gateway di pagamento e gestione sicura delle transazioni.\n" +"- Gestione di blog e contenuti:** Creazione e gestione di post sul blog e di contenuti di marketing per il vostro negozio.\n" +"- Operazioni B2B:** Endpoint dedicati per le transazioni business-to-business e la gestione della vendita all'ingrosso.\n" +"- Supporto multilingue:** Servite i clienti in tutto il mondo con funzionalità di internazionalizzazione completa (i18n).\n" +"- Integrazioni personalizzate:** Architettura API estensibile per l'integrazione con piattaforme e servizi esterni.\n" +"- **Analitica e reportistica:** Generazione di report dettagliati su vendite, inventario e comportamento dei clienti.\n" +"- Aggiornamenti in tempo reale:** Ottenete dati in tempo reale sui livelli di inventario, sullo stato degli ordini e sulle modifiche dei prezzi.\n" +"\n" +"## API disponibili\n" +"- API REST:** Interfaccia REST completa (questa documentazione)\n" +"- API **GraphQL:** Disponibile su `/graphql/` con interfaccia GraphiQL per le query interattive.\n" +"\n" +"## Autenticazione\n" +"- L'autenticazione è gestita tramite token JWT. Includere il token nell'intestazione `X-EVIBES-AUTH` delle richieste nel formato `Bearer `.\n" +"- La durata di vita del token di accesso è {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- La durata del token di aggiornamento è di {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} ore.\n" +"- I token di aggiornamento vengono ruotati e invalidati automaticamente dopo l'uso per una maggiore sicurezza.\n" +"\n" +"## Internazionalizzazione (i18n)\n" +"- Impostare l'intestazione `Accept-Language` per specificare la lingua preferita (ad esempio, `Accept-Language: en-US`).\n" +"- Le lingue disponibili possono essere recuperate dall'endpoint `/app/languages/`.\n" +"- Tutti i contenuti rivolti all'utente supportano immediatamente più lingue.\n" +"\n" +"## Formati di risposta\n" +"L'API supporta diversi formati di risposta:\n" +"- **JSON** (predefinito, formattato in camelCase)\n" +"- **XML** (aggiungere `?format=xml` o impostare `Accept: application/xml`)\n" +"- **YAML** (aggiungere `?format=yaml` o impostare `Accept: application/x-yaml`)\n" +"\n" +"## Salute e monitoraggio\n" +"- Controlli sulla salute: `/salute/`\n" +"- Metriche Prometheus (protetto da basic-auth): `/prometheus/`\n" +"\n" +"## Versione\n" +"Versione attuale dell'API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Casa" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index 0a4db392448b2e834965ed067b517f51f581c9d3..22cd5367db0f7eea9000c6781b2957807585d4c6 100644 GIT binary patch literal 9454 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 Za%W!Hf6>jJbEOyHXmP+HH(<(D{uj-|J3asa delta 985 zcmXxjODIH99LMp$G2YMdX1vE+O`}mrBC?ROv9Xv^7FHINh23OjF-uukC|P+Vi%E@a z6bnhoLMc%ewup_5^8MX8{>{0c`@iSjd(QdaGw)OHb@7)n|CSNGw0hcVhS@OQ`Zy4& zOtVrvbKYPT`4e{G7q(&0Z&rk3sQYIyfb&?3E3Q9*mE_yVeQ`VCq=E|;Da-p z(KWFFtif5-i?FixQ=yjDp4Rni0(^bNOB`LWB-Q3Kqe zUZ74+t;!ify(oe`IDu5wsJOM#Gal>Ec8c gP\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEOオプション" msgid "Debugging Options" msgstr "デバッグ・オプション" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"eVibes のドキュメントへようこそ。\n" +"\n" +"eVibesは、数クリックであらゆる種類のオンラインストアを立ち上げ、管理できる強力なeコマースプラットフォームです。\n" +"\n" +"## 主な機能\n" +"- 商品カタログ:** 複数のカテゴリにまたがる商品の詳細、価格、在庫、在庫状況を管理します。\n" +"- 注文管理:**注文を処理し、履行を追跡し、顧客の要求を効率的に処理します。\n" +"- JWT トークンとロールベースの権限による包括的なユーザー認証。\n" +"- 複数の決済ゲートウェイを統合し、トランザクションを安全に管理します。\n" +"- ブログ・コンテンツ管理:** ブログ記事やマーケティングコンテンツを作成・管理できます。\n" +"- B2B オペレーション:** 企業間取引と卸売管理のための専用エンドポイント。\n" +"- **多言語サポート:**完全な国際化(国際化)機能で世界中の顧客にサービスを提供します。\n" +"- カスタム統合:**外部プラットフォームやサービスと統合するための拡張可能なAPIアーキテクチャ。\n" +"- 分析&レポート:**売上、在庫、顧客行動に関する詳細なレポートを生成します。\n" +"- リアルタイム更新:**在庫レベル、注文状況、価格変更に関するライブデータを取得します。\n" +"\n" +"## 利用可能なAPI\n" +"- **REST API:** 完全なRESTfulインターフェース(このドキュメント)\n" +"- **GraphQL API:** `/graphql/` で利用可能で、対話的なクエリのための GraphiQL インターフェースがある。\n" +"\n" +"## 認証\n" +"- 認証はJWTトークンで行われる。リクエストの `X-EVIBES-AUTH` ヘッダーに `Bearer ` という形式でトークンを含めてください。\n" +"- アクセストークンの有効期限は {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}。\n" +"- リフレッシュ・トークンの有効期限は {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} 時間です。\n" +"- リフレッシュ・トークンはセキュリティ強化のため、使用後に自動的にローテーションされ無効化されます。\n" +"\n" +"## 国際化 (i18n)\n" +"- Accept-Language`ヘッダを設定して、希望する言語を指定する (例: `Accept-Language: en-US`) 。\n" +"- 利用可能な言語は `/app/languages/` エンドポイントから取得できます。\n" +"- すべてのユーザー向けコンテンツは、すぐに多言語をサポートします。\n" +"\n" +"## レスポンスフォーマット\n" +"APIは複数のレスポンスフォーマットをサポートしています:\n" +"- JSON** (デフォルト、キャメルケースフォーマット)\n" +"- XML** (`?format=xml` を追加するか、`Accept: application/xml` を設定する)\n" +"- YAML** (`?format=yaml` を追加するか、`Accept: application/x-yaml` を設定してください)\n" +"\n" +"## ヘルス&モニタリング\n" +"- ヘルスチェックヘルスチェック: `/health/`\n" +"- Prometheus メトリクス(Basic-Auth で保護されている):/prometheus/`\n" +"\n" +"## バージョン\n" +"現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "ホーム" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.mo b/evibes/locale/kk_KZ/LC_MESSAGES/django.mo index 692bae973dd4d2378be0bc2925675f8907af7490..7640ce0078328b8d3c57147021d7d1b23f128abd 100644 GIT binary patch delta 22 dcmaFH^qgse3Zw2sRed%i10z#ClZ}zQi~vqs1>yhz delta 21 ccmaFP^o(hO3Zu?MRee@tJp(<1jZwUe07!WSr2qf` diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index badc8147..bd849690 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/locale/kk_KZ/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -160,6 +160,75 @@ msgstr "" msgid "Debugging Options" msgstr "" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and " +"manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and " +"availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle " +"customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with " +"JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage " +"transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing " +"content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business " +"transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full " +"internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with " +"external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, " +"and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, " +"and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for " +"interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-" +"EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not " +"DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # " +"type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for " +"enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., " +"`Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index e0510015569af94c71f67a84746435beaa758aa1..06b6ecb38fff2902c674b3e395eae01cfd242427 100644 GIT binary patch literal 8824 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 HsfPatB1%q? delta 985 zcmYk*J7`mJ6vy$CCTTU%q=}CvrcGO$q%na~nnH@9C_xvYokJ-&i;GJ4i;Ee$6r_lV z4ho_;h>b!7!Io|+-2#FS5a}Q|lq_};`~BVg3m)>npPc*nKhFK%{Y!sR-uGl^-H0-6 zn6?rytKp|U4n#X>Hi&PXAMiB!7c62IbC?O49mk8P`xh~RS22w@-St&GMSdT-&$E~O zImwAljAI9n;Vwq7i~Q^_hgs|ko6TVrHP8(_fw!IO7$bj^EiUHP#vwIO8f{lzy_9Z3w7Ub)I=hbD~Ea1O0S@%U?2G#OdpCCQKl&-dia}|dHbP##q0Jbsfwm(+SKU_ v926>_LgmWS#%TXXkwg_4r)g6aX!=}RmDsajxH2_8HQoA=m=Cm`WIMqFXbViA diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index 9f79f0cb..a020c9de 100644 --- a/evibes/locale/ko_KR/LC_MESSAGES/django.po +++ b/evibes/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO 옵션" msgid "Debugging Options" msgstr "디버깅 옵션" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"eVibes 문서에 오신 것을 환영합니다.\n" +"\n" +"eVibes는 클릭 몇 번으로 모든 종류의 온라인 스토어를 시작하고 관리할 수 있는 강력한 전자상거래 플랫폼입니다.\n" +"\n" +"주요 기능 ## 주요 기능\n" +"- **제품 카탈로그:** 여러 카테고리에서 제품 세부 정보, 가격, 재고 및 가용성을 관리합니다.\n" +"- 주문 관리:** 주문을 처리하고, 주문 이행을 추적하고, 고객 요청을 효율적으로 처리하세요.\n" +"- 인증 및 권한 부여:** JWT 토큰 및 역할 기반 권한으로 포괄적인 사용자 인증을 수행합니다.\n" +"- 결제 처리:** 여러 결제 게이트웨이를 통합하고 거래를 안전하게 관리하세요.\n" +"- **블로그 및 콘텐츠 관리:** 스토어용 블로그 게시물과 마케팅 콘텐츠를 생성하고 관리합니다.\n" +"- B2B 운영:** B2B 거래 및 도매 관리를 위한 전용 엔드포인트.\n" +"- 다국어 지원:** 완전한 국제화(i18n) 기능으로 전 세계 고객에게 서비스를 제공합니다.\n" +"- **맞춤형 통합:** 외부 플랫폼 및 서비스와의 통합을 위한 확장 가능한 API 아키텍처.\n" +"- **분석 및 보고:** 판매, 재고, 고객 행동에 대한 상세한 보고서를 생성합니다.\n" +"- 실시간 업데이트:** 재고 수준, 주문 상태, 가격 변동에 대한 실시간 데이터를 확인할 수 있습니다.\n" +"\n" +"## 사용 가능한 API\n" +"- **REST API:** 전체 RESTful 인터페이스(이 문서)\n" +"- GraphQL API:** 대화형 쿼리를 위한 GraphiQL 인터페이스로 `/graphql/`에서 사용 가능\n" +"\n" +"## 인증\n" +"- 인증은 JWT 토큰을 통해 처리됩니다. 토큰을 요청의 `X-EVIBES-AUTH` 헤더에 `Bearer ` 형식으로 포함하세요.\n" +"- 액세스 토큰 수명은 {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"}입니다. {\"minutes\" if not DEBUG else \"hours\"}입니다.\n" +"- 새로 고침 토큰 수명은 {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} 시간입니다.\n" +"- 새로 고침 토큰은 보안 강화를 위해 사용 후 자동으로 교체되고 무효화됩니다.\n" +"\n" +"## 국제화(i18n)\n" +"- 수락 언어` 헤더를 설정하여 선호하는 언어를 지정합니다(예: `수락 언어: en-US`).\n" +"- 사용 가능한 언어는 `/app/languages/` 엔드포인트에서 검색할 수 있습니다.\n" +"- 모든 사용자 대상 콘텐츠는 기본적으로 여러 언어를 지원합니다.\n" +"\n" +"## 응답 형식\n" +"API는 여러 응답 형식을 지원합니다:\n" +"- JSON**(기본값, 카멜케이스 형식)\n" +"- XML** (`?format=xml` 추가 또는 `수락: application/xml` 설정)\n" +"- YAML** (`?format=yaml` 추가 또는 `수락: application/x-yaml` 설정)\n" +"\n" +"## 상태 및 모니터링\n" +"- 상태 확인: `/health/`\n" +"- 프로메테우스 메트릭(기본 인증 보호): `/prometheus/`\n" +"\n" +"## 버전\n" +"현재 API 버전입니다: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "홈" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index 84a06cc173509fccb926df022a4ccb13f39e67a5..a0e287af8af3a8be274da2a743646f308b58d9b4 100644 GIT binary patch literal 8699 zcmdU!O>iX1RmW>>V@w0aHa0dG?3~&4uB4rkH0$*+Xgs@aNiB`Ml3G@`X6+yxqwMbN z?owA*mFq)2J)$&cA-*Lx1M++~W7U{Ql?#&$|cx=MV4~&)E?67=)XFG4>JZ9!$; z2>LnbAD8scp(4+Zpr3{Q1N0Nn|AhW3^aCjIE6|TZMZeFK?=P3{o6sAKzX26_&!N8z z9YMuTSxNr{D*OHg^qbiF$IyRc!RHVP(Y+V=C~|zfq_04KpZELFJJ13u^8Y0i(Yzl+ zMZUj>eg^t4P_f&8K}FvWqP+0^EL7ILTE4#t75$n}k+%aC`;MVo&=mS6^sk_=Kz{)h z|9nb0x(1c?Z$kOxokD*PnnGpXpF$DA`)*191}ft}FW>(gD)N3Bqsji8P_gelsL0zW z$IqZ5_c`=cXbzQm-+_uBzE{#8l=N?*FEjp+&=;WMgBSV99`Z=6$|JnQ&SE=}12@bb z;r|7GVqbYgPqB^gl}GfDN90=L_hEjDA1PvGmt2zPB}c5B;uCo!$3DVOY$ow3Iq^&U zeutkt5_|H9?IZmdltyT^PnbInWCnoI|p)x)z$0qF>m4rI)$LSazI#)Uj<4LBbaUpC&T}0iX(os*1 zb)*M|f2ueNgUF~Xk5i-KK0{MA3YZc^>Y~Wtq55W`x?#{AW$UU|d+|l}mYJ$Oqw^v) zSGYPBNMG_@ zcY-j;r%HFzILp+y2=gEbjq2*$4B|8}*}C1Ynf6RtZXwo@4UwU1SQN`QHp)}o9VyJy z55iC;xqXJHFC0+~Yo{tT-zrR&XUg>ZNXEQy>Ncqt_#w&zHplkrWhDa$@x;E%mOJq{ zNez>-;L@lfgPmSpGzs#d`s&+l%s*n9)ijMm<9BpsdMYvLILI>Cmx`U}sfb!BgP~-f zg9!CgY%sS-QcfH&I?+?dx%4WUN15)5)S1dm7dKTpZQ~s@*@@xEHqJ?v1$R<>DnT)e zkB&@FVlj^!O-Ck2DAg?)5NZ-#sf!RYRU}EA+F)pz6pvI+&eSAM z!`>w58D%{}RD=XzZqmp~sl(E%Y9+XRH(Dj&5*LfJklV2VGjoO5R#a;|#*kUiLAv_M zfzoMr804lasbN)=O~iF#G`qE70lS8?Om(Iub}j?rw+uZdOo_Y3B*Q9N$QX<>JbZcv0Z8eXn8Y?~1*HrymXf!tA4yUL%1P|gSS17)IbSM*bucyx6 zbl>hj9*5^tF5E?mIrDER^roq?^?ySqxaHrdU$cIypUc3vb5?CVc|dLD+<#de#Zf?u zgXK`79PJJbozxbFrz9|KKRw%U16Ki+S6^-d<; zl3Pe~=hb^X+`ysY+(>ts&=-33h~UVjLBp>0$d{PVJ@(3jjDp18a&kOt;_OtjlcZ0u zC&F&r&Ae@KWsh8>AV&Ds+clkHFpv$JiEU-P-5}F)&~^$0pp}(TQZ%1>4VHzod5y>J zAX4_E6l09gscKkf)Amx^#PpVSbqDO6S9R=I86ULUC*rEdQ||#T;IE1FBvX{81DjM` z^cd4oDd=$|$#fJ)({YSvC6TiCxoCbOk*sdvk?3ey#?~O-F=l$&MT=v^$pum4(Tqj) z0~;0MTzPHfsWJJHPSkNs6(75a%t=6Gh*}Q)o-}=dS zZr}fg$yV)f`>=KGunDCJ9Qz$k+2zP3n#4!`LC-IMeMfEH-TKlWyt;XNbF+4+v)pe>PmSr~ z6z==YQ^jxl?6~<*eR-#O+^+Amzp{6B+F<11bbY6J^ajgZQ|-5n9&f2b>cm-nzwzAp zTPh0uD6AdPZ_G8iy}ns1F^Au_Ek#Zrya8AZqI=Rdrc~zpXYD=z?tGre%=zaxqHf%y z4s5BroglBBghfj0x<}Qgibjcj&F;T;kB(Zt++T^*jr;2M>b;r;)gyAS6I{?SUxTU5 z5~MaJQX>lCFb@XTg6fIZ>DU-`LF+{=WO~Ag8im0KcxMMnJUt1bkqOl$=dKAywvSRH zQbIcC6v#j!m4@6sLoN^O# zVK8uegaa|FKm$4BW?IociS8zS5*x9LSYd>ER&NWl*{#HIi>)>uifl)gQt9)+py*kE zcAXTljgo&9!H6O%`+?SFj+~bZ9l3A-U^A8TM06y*@uyf>l-uSSLc|viqLG9Z-GVf3 z11e$)x6&}3YGzrxxFB#IW6}(wQsXZTR~Cbk`*YCsPruLNIhzG^&EQx+4X(w9s+a(2 zB$mo8u7K;7Z5aa$tqk`z2|)%oySBpA*W+u1XW}4@WA2K?W0?e`vG}mbdy22=_&IS%qj~ixQ=F8>I<~o zTFkvYuOli>Xhd;OiMqw%wpCgN-7~*PcPYT*nXuc4^XE+uc`XMww~ze+*A^0;SF!i8 zF=KEws7fx^L?ntb8UGCEEmerZjoZqy#B5n@F~TDDzKDy-BKF>OB`(T(g~S?c+@@xL z8@Wc5&HsNO@vEB18HPpp!&TgKmHEF$=GarRe(8e1Ue-xfsGvEKO(qHgqBKhi#Ke6_ zWnpxz^(Y4~RA+;$1fmr6Th6x*K_>+o<*vi%wiuQ52SHk#ZZ?9R1erT3ym|*HadA+kQkn8Ud-%4mO*pM!*PuTI4WW$9cXq zc^Rl<7`M?PR38|}*}8HGu3yGx@DyIpV~cJm*I{MGtDv2fU&igrj2v)(J|~CXEi(bs z`{oHM+h)mz(nL$AK!D6YSnJAFzJ>CG*@A1~ycsRQdE1b2_5WUQ-qaoxfjvIO0X9GB z@vnmU{i3IlB``$6VOQiMK!F~a_CiC9n zcr80&RRlTQG>s6e8omJja@O1Y4+=eYOpM!Lt#sbAR|Kdn_XluW#QW85bvi|^EeJF> z$DUzdJ6x1dK)+9;JqP`i6e$yQ3uLO4818GN#dH<}?g#K($U|mKxND4n{_nX|%p`rS z>o(@y?tDGo(KAnS(&;|UzFaGduXs1sE?f-g@fBw;4PJ9KP?_y{*8|R)E?llO$sU&i zh+8(>9C1w`|BF}E$11Xy?gvD@%3uCO6WQzzXF*JBHrV!JLYhlN924+jLK_qOfblOphz ZT53-&5GuBjC-(*mZ_m0ekTji7`(GaF$Aka? delta 985 zcmXxjPe@cz6vy#1&iF5N#&H~VG|ikeOBfU-C6WF}Zba7!g0v8~8oG55gcgFEkPvDU zEeaQbgE2u1!A+DK7eY{oEo?m~gcyO}-<#vX_df65_nz;ZbMO2ceVxi4)kQXp=;64| zu^2KN#{CjbL_Ta*i=W+Z*ueNFcH=4D!j_0x4L(FYKZ$Xi!4xj|{WVN7-b9|u+D9(x znb^e`9%40~;59r&{_H=e0W2vs8^S@0OsL|HwUL_PNiwFKktlskuA%r7CGH9Bq`9C}BgVib2dl&C(gPStAtuYzs| zJ6VY+w0qgyc1Ht32`SV81^X!If_^C4a7t8>E)pyWbp)Y(#c~JTQ32|LI-gRz70pG0 sc6M^z?&B-ExzHxnM$@KJwfec{`lIi|rTv-SOmFUYd?b_$wOxcS0d;~)w*UYD diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.po b/evibes/locale/nl_NL/LC_MESSAGES/django.po index e7b8edc6..71a586b7 100644 --- a/evibes/locale/nl_NL/LC_MESSAGES/django.po +++ b/evibes/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO Opties" msgid "Debugging Options" msgstr "Debugopties" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Welkom bij de eVibes documentatie.\n" +"\n" +"eVibes is een krachtig e-commerce platform waarmee je in een paar klikken een online winkel van elk type kunt starten en beheren.\n" +"\n" +"## Belangrijkste functies\n" +"- **Productcatalogus:**Beheer productgegevens, prijzen, voorraad en beschikbaarheid in meerdere categorieën.\n" +"- **Order Management:** Verwerk bestellingen, volg de leveringen en behandel verzoeken van klanten efficiënt.\n" +"- **Authenticatie en autorisatie:**Uitgebreide gebruikersverificatie met JWT tokens en rolgebaseerde rechten.\n" +"- **Betalingsverwerking:** Integreer meerdere betalingsgateways en beheer transacties veilig.\n" +"- **Blog & Content Management:** Creëer en beheer blog posts en marketing content voor uw winkel.\n" +"- **B2B Operations:** Specifieke eindpunten voor business-to-business transacties en groothandelsbeheer.\n" +"- Ondersteuning voor meerdere talen:** Bedien klanten wereldwijd met volledige internationalisatiemogelijkheden (i18n).\n" +"- Aangepaste integraties:** Extensibele API-architectuur voor integratie met externe platforms en diensten.\n" +"- Analyse en rapportage:** Genereer gedetailleerde rapporten over verkoop, voorraad en klantgedrag.\n" +"- Realtime updates:** Ontvang live gegevens over voorraadniveaus, orderstatussen en prijswijzigingen.\n" +"\n" +"## Beschikbare API's\n" +"- **REST API:** Volledige RESTful interface (deze documentatie)\n" +"- **GraphQL API:** Beschikbaar op `/graphql/` met GraphiQL interface voor interactieve queries\n" +"\n" +"## Authenticatie\n" +"- Authenticatie wordt afgehandeld via JWT tokens. Neem het token op in de `X-EVIBES-AUTH` header van je verzoeken in het formaat `Bearer `.\n" +"- De levensduur van het toegangstoken is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- De levensduur van een verversingstoken is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} uur.\n" +"- Refresh tokens worden automatisch geroteerd en ongeldig gemaakt na gebruik voor een betere beveiliging.\n" +"\n" +"## Internationalisatie (i18n)\n" +"- Stel de `Accept-Language` header in om uw voorkeurstaal op te geven (bijvoorbeeld `Accept-Language: en-US`).\n" +"- Beschikbare talen kunnen worden opgehaald van het `/app/languages/` eindpunt.\n" +"- Alle gebruikerscontent ondersteunt standaard meerdere talen.\n" +"\n" +"## Antwoordformaten\n" +"De API ondersteunt meerdere antwoordformaten:\n" +"- **JSON** (standaard, camelCase geformatteerd)\n" +"- **XML** (voeg `?format=xml` toe of stel `Accept: application/xml` in)\n" +"- **YAML** (voeg `?format=yaml` toe of stel `Accept: application/x-yaml` in)\n" +"\n" +"## Gezondheid en bewaking\n" +"- Gezondheidscontroles: `/gezondheid/`\n" +"- Prometheus metriek (basic-auth beschermd): `/prometheus/`\n" +"\n" +"## Versie\n" +"Huidige API versie: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Home" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index 5aaad02b15413b3a3d1bbf85649ac7cd27917d3d..b23c629155ea97b65487a8ede9fe8cebf0357a97 100644 GIT binary patch literal 8666 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 Y!MdsvhX(!&#{~74nS+6FzU2-67kC-pz5oCK delta 985 zcmYk*O-NKx6u|N0%vhE=er_!)O$6L;bo@)w(2PGP1!;tZZfC%S>V@lJ99^You#KQ7^Z{E~iO#Y6OS+q51r z$c-zyh-Dnd9-PHaoWmV>58dJ8)PJ7(i+Gsl@6ZJ|aXYS}nfj9~@X(1XI6;;#W1jir zNyk?a8{puwD zEGE`@;F;&R*e{|Jm(c;M=m*!()J`JFiRt7m9H4(2$!w7EI6`wQW@2RcVGhH&{!ne!O@0F5Kg?hRl|kFP-ON tm?oo-c9b?i`#-D)i_~;`mKB;c&=|=-&9;vW*M@72pT*I(#*e=B>|e5LOAP=3 diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index 2a98f8e5..3342fd1c 100644 --- a/evibes/locale/no_NO/LC_MESSAGES/django.po +++ b/evibes/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO-alternativer" msgid "Debugging Options" msgstr "Alternativer for feilsøking" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Velkommen til eVibes-dokumentasjonen.\n" +"\n" +"eVibes er en kraftig e-handelsplattform som lar deg starte og administrere en hvilken som helst type nettbutikk med bare noen få klikk.\n" +"\n" +"## Nøkkelfunksjoner\n" +"- Produktkatalog:** Administrer produktdetaljer, priser, lagerbeholdning og tilgjengelighet på tvers av flere kategorier.\n" +"- Ordrehåndtering:** Behandle bestillinger, spore oppfyllelse og håndtere kundeforespørsler effektivt.\n" +"- Autentisering og autorisasjon:** Omfattende brukerautentisering med JWT-tokens og rollebaserte tillatelser.\n" +"- Betalingsbehandling: ** Integrer flere betalingsportaler og håndter transaksjoner på en sikker måte.\n" +"- Blogg- og innholdsadministrasjon:** Opprett og administrer blogginnlegg og markedsføringsinnhold for butikken din.\n" +"- B2B-drift: ** Dedikerte endepunkter for business-to-business-transaksjoner og grossistadministrasjon.\n" +"- Flerspråklig støtte:** Betjen kunder over hele verden med full internasjonaliseringsfunksjonalitet (i18n).\n" +"- Tilpassede integrasjoner:** Utvidbar API-arkitektur for integrering med eksterne plattformer og tjenester.\n" +"- Analyse og rapportering:** Generer detaljerte rapporter om salg, lagerbeholdning og kundeatferd.\n" +"- Sanntidsoppdateringer:** Få sanntidsdata om lagernivåer, ordrestatus og prisendringer.\n" +"\n" +"## Tilgjengelige API-er\n" +"- **REST API:** Fullt REST-grensesnitt (denne dokumentasjonen)\n" +"- GraphiQL API:** Tilgjengelig på `/graphql/` med GraphiQL-grensesnitt for interaktive spørringer\n" +"\n" +"## Autentisering\n" +"- Autentisering håndteres via JWT-tokens. Inkluder tokenet i `X-EVIBES-AUTH`-overskriften i forespørslene dine i formatet `Bearer `.\n" +"- Levetiden for tilgangstoken er {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"}. {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Levetiden for oppdateringstoken er {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} timer.\n" +"- Oppdateringstokener roteres automatisk og ugyldiggjøres etter bruk for økt sikkerhet.\n" +"\n" +"## Internasjonalisering (i18n)\n" +"- Angi `Accept-Language`-overskriften for å spesifisere ditt foretrukne språk (f.eks. `Accept-Language: en-US`).\n" +"- Tilgjengelige språk kan hentes fra endepunktet `/app/languages/`.\n" +"- Alt brukerrettet innhold støtter flere språk uten videre.\n" +"\n" +"## Svarformater\n" +"API-et støtter flere svarformater:\n" +"- **JSON** (standard, camelCase-formatert)\n" +"- XML** (legg til `?format=xml` eller angi `Accept: application/xml`)\n" +"- **YAML** (legg til `?format=yaml` eller angi `Accept: application/x-yaml`)\n" +"\n" +"## Helse og overvåking\n" +"- Helsesjekker: `/health/`\n" +"- Prometheus-beregninger (beskyttet med basic-auth): `/prometheus/`\n" +"\n" +"## Versjon\n" +"Gjeldende API-versjon: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hjem" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index 8e6c02225818260ee00ee4654bb5add86729cc73..11bb18dc52c4abc457189ab912564ac6d5c35b52 100644 GIT binary patch literal 8961 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\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opcje SEO" msgid "Debugging Options" msgstr "Opcje debugowania" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Witamy w dokumentacji eVibes.\n" +"\n" +"eVibes to potężna platforma e-commerce, która umożliwia uruchomienie i zarządzanie sklepem internetowym dowolnego rodzaju za pomocą zaledwie kilku kliknięć.\n" +"\n" +"## Kluczowe funkcje\n" +"- Katalog produktów:** Zarządzanie szczegółami produktów, cenami, zapasami i dostępnością w wielu kategoriach.\n" +"- **Zarządzanie zamówieniami:** Przetwarzanie zamówień, śledzenie realizacji i sprawna obsługa zgłoszeń klientów.\n" +"- Uwierzytelnianie i autoryzacja:** Kompleksowe uwierzytelnianie użytkowników za pomocą tokenów JWT i uprawnień opartych na rolach.\n" +"- Przetwarzanie płatności:** Integracja wielu bramek płatniczych i bezpieczne zarządzanie transakcjami.\n" +"- Blog i zarządzanie treścią:** Tworzenie i zarządzanie wpisami na blogu oraz treściami marketingowymi dla sklepu.\n" +"- Operacje B2B:** Dedykowane punkty końcowe dla transakcji między firmami i zarządzania sprzedażą hurtową.\n" +"- Obsługa wielu języków:** Obsługa klientów na całym świecie dzięki pełnym możliwościom internacjonalizacji (i18n).\n" +"- Integracje niestandardowe:** Rozszerzalna architektura API do integracji z zewnętrznymi platformami i usługami.\n" +"- Analityka i raportowanie:** Generowanie szczegółowych raportów dotyczących sprzedaży, zapasów i zachowań klientów.\n" +"- Aktualizacje w czasie rzeczywistym:** Uzyskaj dane na żywo o poziomach zapasów, statusach zamówień i zmianach cen.\n" +"\n" +"## Dostępne API\n" +"- **REST API:** Pełny interfejs RESTful (ta dokumentacja)\n" +"- API GraphQL:** Dostępne pod adresem `/graphql/` z interfejsem GraphiQL do interaktywnych zapytań.\n" +"\n" +"## Uwierzytelnianie\n" +"- Uwierzytelnianie jest obsługiwane za pomocą tokenów JWT. Dołącz token w nagłówku `X-EVIBES-AUTH` swoich żądań w formacie `Bearer `.\n" +"- Okres ważności tokenu dostępu wynosi {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Okres ważności tokenu odświeżania wynosi {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} godzin.\n" +"- Tokeny odświeżania są automatycznie obracane i unieważniane po użyciu w celu zwiększenia bezpieczeństwa.\n" +"\n" +"## Internacjonalizacja (i18n)\n" +"- Ustaw nagłówek `Accept-Language`, aby określić preferowany język (np. `Accept-Language: en-US`).\n" +"- Dostępne języki można pobrać z punktu końcowego `/app/languages/`.\n" +"- Cała zawartość skierowana do użytkownika obsługuje wiele języków od razu po wyjęciu z pudełka.\n" +"\n" +"## Formaty odpowiedzi\n" +"API obsługuje wiele formatów odpowiedzi:\n" +"- **JSON** (domyślny, sformatowany camelCase)\n" +"- **XML** (dodaj `?format=xml` lub ustaw `Accept: application/xml`)\n" +"- **YAML** (dodaj `?format=yaml` lub ustaw `Accept: application/x-yaml`)\n" +"\n" +"## Zdrowie i monitorowanie\n" +"- Sprawdzanie kondycji: `/health/`\n" +"- Metryki Prometheus (chronione przez basic-auth): `/prometheus/`\n" +"\n" +"## Wersja\n" +"Aktualna wersja API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Strona główna" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index 23acc17f4569a286a0b3183a78ccd470481989ef..617795852c68fcdfab67b9ac1c37a91f323e3b1d 100644 GIT binary patch literal 9059 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 delta 985 zcmXxjPblPJ9LMo5X0UdQf6MOp&oC^pQ)ERlk-cm=%0W3exHwSmznmN#B{@iGwJQg< zNy|+f6nhm#3e7<|NGTWP{rSz~o9FlXJ-->x^ZkB*&)ogEjd<6^fh8ka8I_FL46|PR zpUH*T%Q7p(edh_5F~7uSe8L8-2$i2EW&Y&;Eelx0ZW;$Am8(Bo10HOIKTot z!w{x051)`fd*#xJnL)E|{Epga8cT4_xrAZnn^=Q;_!%$U=Z{#;JdiCtvnV&pXaFm4 z6pL{dKjJ)oz(rJrt8TvK=DS$O^CMKkDa^q~RHt5?1w7QoF&v}ILl|a%ThC1=@E6sI zWBi6!*oGl?SA{+J1&2`;O=1IjsDyu^D*lIB=Nzl>0oB<&vQweus6^vjJZ0L;O&<?WGPD>ixfm7F0WxnL?+R z!);$RA@m9qYPEuM\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opções de SEO" msgid "Debugging Options" msgstr "Opções de depuração" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Bem-vindo à documentação do eVibes.\n" +"\n" +"O eVibes é uma poderosa plataforma de comércio eletrônico que lhe permite lançar e gerenciar uma loja on-line de qualquer tipo com apenas alguns cliques.\n" +"\n" +"## Principais recursos\n" +"- Catálogo de produtos:** Gerencie detalhes, preços, estoque e disponibilidade de produtos em várias categorias.\n" +"- Gerenciamento de pedidos:** Processar pedidos, rastrear o atendimento e lidar com as solicitações dos clientes de forma eficiente.\n" +"- Autenticação e autorização:** Autenticação abrangente de usuários com tokens JWT e permissões baseadas em funções.\n" +"- Processamento de pagamentos: integre vários gateways de pagamento e gerencie as transações com segurança.\n" +"- **Gerenciamento de blogs e conteúdo:** Crie e gerencie postagens de blogs e conteúdo de marketing para sua loja.\n" +"- Operações B2B:** Pontos de extremidade dedicados para transações business-to-business e gerenciamento de atacado.\n" +"- Suporte a vários idiomas:** Atenda a clientes em todo o mundo com recursos completos de internacionalização (i18n).\n" +"- Integrações personalizadas:** Arquitetura de API extensível para integração com plataformas e serviços externos.\n" +"- Análises e relatórios:** Gerar relatórios detalhados sobre vendas, estoque e comportamento do cliente.\n" +"- Atualizações em tempo real:** Obtenha dados em tempo real sobre níveis de estoque, status de pedidos e alterações de preços.\n" +"\n" +"## APIs disponíveis\n" +"- API REST:** Interface RESTful completa (esta documentação)\n" +"- API GraphQL:** Disponível em `/graphql/` com interface GraphiQL para consultas interativas\n" +"\n" +"## Autenticação\n" +"- A autenticação é tratada por meio de tokens JWT. Inclua o token no cabeçalho `X-EVIBES-AUTH` de suas solicitações no formato `Bearer `.\n" +"- O tempo de vida do token de acesso é {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- A vida útil do token de atualização é de {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} horas.\n" +"- Os tokens de atualização são automaticamente girados e invalidados após o uso para aumentar a segurança.\n" +"\n" +"## Internacionalização (i18n)\n" +"- Defina o cabeçalho `Accept-Language` para especificar o idioma de sua preferência (por exemplo, `Accept-Language: en-US`).\n" +"- Os idiomas disponíveis podem ser recuperados no ponto de extremidade `/app/languages/`.\n" +"- Todo o conteúdo voltado para o usuário é compatível com vários idiomas desde o início.\n" +"\n" +"## Formatos de resposta\n" +"A API oferece suporte a vários formatos de resposta:\n" +"- **JSON** (padrão, formatado em camelCase)\n" +"- **XML** (adicione `?format=xml` ou defina `Accept: application/xml`)\n" +"- **YAML** (adicione `?format=yaml` ou defina `Accept: application/x-yaml`)\n" +"\n" +"## Saúde e monitoramento\n" +"- Verificações de integridade: `/health/`\n" +"- Métricas do Prometheus (protegido por autenticação básica): `/prometheus/`\n" +"\n" +"## Versão\n" +"Versão atual da API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Início" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index de4831f176d1868ab2c82c08e50f4c17d286beaa..5dff1edb0add3b5a7fb40149dbbbf6869c0eb13e 100644 GIT binary patch literal 9089 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 delta 985 zcmYk*Pe@cz6oB!gj%78eqghR6S~_M;h%|yhOomWFixw`Vg&?jYC~*If}rnv-JrwV_j~uf$Ghj8`)2XNRyq69Rag$9$~eea zXo@(E@0vLfYb_C-_%!(j_cH&4Be;n}*jtF$jc3v4FJTGiu#DH!{ae_>{5JAj7OR}> z;lc~-zzSV#fAEC5bM~7^H{+wc^`exTlBdfXn`g6*DbCT z=|9)vBr`peyogpfgEhQ@G$Zb!tzAJYd6ayP$C$rIIvW;sghAnX98Dfa-%A~NhdSN= zf8hc{3|np3GCuD7#m>##u+;|NQQigrC?->77*=YKOJ0=cepe>${`(ENEq>JHNe+hl sYS>0wIKcQnMwqw-w$m*cX83n))Y?~CT5F?YqhpP4rFv7N+CNkH1ELm6i~s-t diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index 30634615..82ff35df 100644 --- a/evibes/locale/ro_RO/LC_MESSAGES/django.po +++ b/evibes/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Opțiuni SEO" msgid "Debugging Options" msgstr "Opțiuni de depanare" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Bine ați venit la documentația eVibes.\n" +"\n" +"eVibes este o platformă puternică de comerț electronic care vă permite să lansați și să gestionați un magazin online de orice tip în doar câteva clicuri.\n" +"\n" +"## Caracteristici principale\n" +"- **Product Catalog:** Gestionați detaliile produselor, prețurile, inventarul și disponibilitatea în mai multe categorii.\n" +"- **Order Management:** Procesați comenzile, urmăriți îndeplinirea și gestionați eficient cererile clienților.\n" +"- **Autentificare și autorizare:** Autentificare cuprinzătoare a utilizatorilor cu token-uri JWT și permisiuni bazate pe roluri.\n" +"- **Payment Processing:** Integrați mai multe gateway-uri de plată și gestionați tranzacțiile în siguranță.\n" +"- **Blog & Content Management:** Creați și gestionați postări pe blog și conținut de marketing pentru magazinul dvs.\n" +"- **B2B Operations:** Puncte finale dedicate pentru tranzacțiile business-to-business și gestionarea comerțului cu ridicata.\n" +"- **Suport multilingv:** Serviți clienții din întreaga lume cu capacități complete de internaționalizare (i18n).\n" +"- **Integrații personalizate:** Arhitectură API extensibilă pentru integrarea cu platforme și servicii externe.\n" +"- **Analytics & Reporting:** Generați rapoarte detaliate privind vânzările, stocurile și comportamentul clienților.\n" +"- **Actualizări în timp real:** Obțineți date în timp real privind nivelurile stocurilor, starea comenzilor și modificările prețurilor.\n" +"\n" +"## API-uri disponibile\n" +"- **REST API:** Interfață RESTful completă (această documentație)\n" +"- **GraphQL API:** Disponibil la `/graphql/` cu interfața GraphiQL pentru interogări interactive\n" +"\n" +"## Autentificare\n" +"- Autentificarea este gestionată prin jetoane JWT. Includeți tokenul în antetul `X-EVIBES-AUTH` al cererilor dvs. în formatul `Bearer `.\n" +"- Durata de viață a jetonului de acces este {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Durata de viață a jetonului de reînnoire este de {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} ore.\n" +"- Jetoanele de reîmprospătare sunt rotite automat și invalidate după utilizare pentru o securitate sporită.\n" +"\n" +"## Internaționalizare (i18n)\n" +"- Setați antetul `Accept-Language` pentru a specifica limba preferată (de exemplu, `Accept-Language: en-US`).\n" +"- Limbile disponibile pot fi preluate de la punctul final `/app/languages/`.\n" +"- Toate conținuturile destinate utilizatorilor acceptă din start mai multe limbi.\n" +"\n" +"## Formate de răspuns\n" +"API acceptă mai multe formate de răspuns:\n" +"- **JSON** (implicit, formatat camelCase)\n" +"- **XML** (adăugați `?format=xml` sau setați `Accept: application/xml`)\n" +"- **YAML** (adăugați `?format=yaml` sau setați `Accept: application/x-yaml`)\n" +"\n" +"## Sănătate și monitorizare\n" +"- Verificări de sănătate: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Versiune\n" +"Versiunea curentă a API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Acasă" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index 96474f33e05edf215985b02f44e92f6728459c76..37124d62e8aa0acfe3fd6ee36a2783e76a94c033 100644 GIT binary patch literal 11518 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 C5l}Ax diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.po b/evibes/locale/ru_RU/LC_MESSAGES/django.po index 20270328..bd023eb1 100644 --- a/evibes/locale/ru_RU/LC_MESSAGES/django.po +++ b/evibes/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "Параметры SEO" msgid "Debugging Options" msgstr "Параметры отладки" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Добро пожаловать в документацию eVibes.\n" +"\n" +"eVibes - это мощная платформа для электронной коммерции, которая позволяет запустить и управлять интернет-магазином любого типа всего за несколько кликов.\n" +"\n" +"## Ключевые особенности.\n" +"- **Каталог товаров:** Управление информацией о товарах, ценами, запасами и наличием товаров в нескольких категориях.\n" +"- **Управление заказами:** Обработка заказов, отслеживание выполнения и эффективная обработка запросов клиентов.\n" +"- **Аутентификация и авторизация:** Комплексная аутентификация пользователей с помощью JWT-токенов и ролевых разрешений.\n" +"- **Обработка платежей:** Интеграция нескольких платежных шлюзов и безопасное управление транзакциями.\n" +"- **Управление блогом и контентом:** Создание и управление записями в блоге и маркетинговым контентом для вашего магазина.\n" +"- **B2B-операции:** Выделенные конечные точки для транзакций между бизнесменами и управления оптовыми продажами.\n" +"- **Мультиязыковая поддержка:** Обслуживайте клиентов по всему миру, используя возможности полной интернационализации (i18n).\n" +"- **Заказные интеграции:** Расширяемая архитектура API для интеграции с внешними платформами и сервисами.\n" +"- **Аналитика и отчетность:** Генерируйте подробные отчеты о продажах, запасах и поведении клиентов.\n" +"- **Обновления в режиме реального времени:** Получайте данные об уровне запасов, состоянии заказов и изменениях цен в режиме реального времени.\n" +"\n" +"## Доступные API\n" +"- **REST API:** Полный REST-интерфейс (данная документация)\n" +"- **GraphQL API:** Доступен по адресу `/graphql/` с интерфейсом GraphiQL для интерактивных запросов\n" +"\n" +"## Аутентификация\n" +"- Аутентификация осуществляется с помощью JWT-токенов. Включите токен в заголовок `X-EVIBES-AUTH` ваших запросов в формате `Bearer <ваш_токен>`.\n" +"- Срок действия токена доступа составляет {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Время жизни токена обновления составляет {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} часов.\n" +"- Для повышения безопасности маркеры доступа автоматически поворачиваются и аннулируются после использования.\n" +"\n" +"## Интернационализация (i18n)\n" +"- Укажите в заголовке `Accept-Language` предпочтительный язык (например, `Accept-Language: en-US`).\n" +"- Доступные языки можно получить из конечной точки `/app/languages/`.\n" +"- Весь контент, предназначенный для пользователей, изначально поддерживает несколько языков.\n" +"\n" +"## Форматы ответов\n" +"API поддерживает несколько форматов ответов:\n" +"- **JSON** (по умолчанию, с форматированием в camelCase)\n" +"- **XML** (добавьте `?format=xml` или установите `Accept: application/xml`)\n" +"- **YAML** (добавьте `?format=yaml` или установите `Accept: application/x-yaml`)\n" +"\n" +"## Здоровье и мониторинг\n" +"- Проверка здоровья: `/health/`\n" +"- Метрики Prometheus (с защитой basic-auth): `/prometheus/`\n" +"\n" +"## Версия\n" +"Текущая версия API: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Главная" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index 07647db6689f3eff9dbd0cebbe81ce5404b745ce..cc3891850a07b98cc343f3bd76b6b8831f129ee4 100644 GIT binary patch literal 8754 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 delta 985 zcmYk*O-NKx6u|N0IHol*4=A%cN|gc-SM(Kh4~9HZP6 zF^jbf2V%21q60rAzhW=*Z#aqvID-Azh*NkS{r+w2#3d}?O1l3DPcwgte6JGkIO*ZS zXKcr9Jc)HYfd|MZesj2rnU;tdoJJSAhuyfAT*o}~H#mTscm{XU{e3Jl&mPlC#4smj zbOZbG4t8M~bNCRC;}dj;&(r*Ent#MWu5Y0U*Rd7%(MtVHwsX;iOSnjt7ckHI@v`k` z2k+5^zu*||;4o%b-BOm4Giai>@H{S~3*E;)e1>jl1J7a&t#BQ!*e^8E9ES?+i(XFV zun!mTF8V&aKz~p}TeFKM@&hgHA9Uvfl*xtXaRe8WYv?=m3QcqiZN(niqQe~Z=NZvP z!@barBo{+yC9Yrz=g`tGBkhYa@{CwbK0qt=7^!Sf@fc$GEaTD\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "SEO-alternativ" msgid "Debugging Options" msgstr "Alternativ för felsökning" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Välkommen till eVibes dokumentation.\n" +"\n" +"eVibes är en kraftfull e-handelsplattform som gör att du kan starta och hantera en onlinebutik av alla slag med bara några få klick.\n" +"\n" +"## Viktiga funktioner\n" +"- Produktkatalog:** Hantera produktinformation, priser, lager och tillgänglighet i flera kategorier.\n" +"- ** Orderhantering:** Behandla beställningar, spåra uppfyllande och hantera kundförfrågningar effektivt.\n" +"- Autentisering och auktorisering: ** Omfattande användarautentisering med JWT-tokens och rollbaserade behörigheter.\n" +"- **Betalningshantering:** Integrera flera betalningsgateways och hantera transaktioner på ett säkert sätt.\n" +"- **Blogg & Content Management:** Skapa och hantera blogginlägg och marknadsföringsinnehåll för din butik.\n" +"- **B2B Operations:** Dedikerade slutpunkter för transaktioner mellan företag och grossisthantering.\n" +"- Stöd för flera språk: ** Betjäna kunder över hela världen med fullständiga internationaliseringsfunktioner (i18n).\n" +"- **Kundanpassade integrationer:** Utökad API-arkitektur för integrering med externa plattformar och tjänster.\n" +"- **Analys och rapportering:** Generera detaljerade rapporter om försäljning, lager och kundbeteende.\n" +"- Uppdateringar i realtid: ** Få live-data om lagernivåer, orderstatus och prisändringar.\n" +"\n" +"## Tillgängliga API:er\n" +"- **REST API:** Fullständigt RESTful-gränssnitt (denna dokumentation)\n" +"- **GraphQL API:** Tillgängligt på `/graphql/` med GraphiQL-gränssnitt för interaktiva frågor\n" +"\n" +"## Autentisering\n" +"- Autentisering hanteras via JWT-tokens. Inkludera token i `X-EVIBES-AUTH`-huvudet för dina förfrågningar i formatet `Bearer `.\n" +"- Åtkomsttokenens livstid är {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Uppdateringstokenens livslängd är {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} timmar.\n" +"- Uppdateringstokens roteras automatiskt och ogiltigförklaras efter användning för ökad säkerhet.\n" +"\n" +"## Internationalisering (i18n)\n" +"- Ange önskat språk i rubriken `Accept-Language` (t.ex. `Accept-Language: en-US`).\n" +"- Tillgängliga språk kan hämtas från slutpunkten `/app/languages/`.\n" +"- Allt innehåll som vänder sig till användare stöder flera språk direkt.\n" +"\n" +"## Svarsformat\n" +"API:et stöder flera olika svarsformat:\n" +"- **JSON** (standard, camelCase-formaterad)\n" +"- **XML** (lägg till `?format=xml` eller ställ in `Accept: application/xml`)\n" +"- **YAML** (lägg till `?format=yaml` eller ställ in `Accept: application/x-yaml`)\n" +"\n" +"## Hälsa och övervakning\n" +"- Hälsokontroller: `/hälsa/`\n" +"- Prometheus-mätvärden (skyddade med grundläggande autentisering): `/prometheus/`\n" +"\n" +"## Version\n" +"Aktuell API-version: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Hem" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index 5ab198da21ebc77a82e7fe4fd953488926b63daa..aea2e55487f3b80aa248c3f918b689ecd7c8818c 100644 GIT binary patch literal 13349 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 delta 985 zcmYk*OGwmF6vy#1&ZuLlqn4@pNSl15Fb&N>LY7h}t_FfY1);5rB8Axx;-W>bMa)8Q z5DdX^;bMpsT_n*)+C?G=Mu87-Bd#%tr(woI{#-H#8E@KUD`R7O2#5hzW zGiFh4l+h!s$6>6(G+xG6Sb`r=JIwj)Tw|><<3KI0jj52$T36-=GpZMLn-(l@t!(6U<^e?&Cv@khLn6!URrXCw{@}_}6=e z8ST85dcVaO&f*&O;waly#xtlFtfF?hhqp0Iot4O4e2kN*gumlU&2yfEIOjdY9>z(| zO}#czLH%|1@0e)BkEroFMsX8I@E_LVQ#wisyg+iW_ud@p#fwN~jf&e%E(+#C)lp~@ zdOwA7J)!l_gX+6ZCP^2(%V=)5Q%$JJ6zUBHedHQUe-t+C{z2dpmlV\n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,71 @@ msgstr "ตัวเลือก SEO" msgid "Debugging Options" msgstr "ตัวเลือกการแก้ไขข้อผิดพลาด" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"ยินดีต้อนรับสู่เอกสารคู่มือของ eVibes eVibes เป็นแพลตฟอร์มอีคอมเมิร์ซที่ทรงพลังซึ่งช่วยให้คุณสามารถเปิดตัวและจัดการร้านค้าออนไลน์ได้ทุกประเภทเพียงแค่ไม่กี่คลิก ## คุณสมบัติหลัก - **แคตตาล็อกสินค้า:** จัดการรายละเอียดสินค้า ราคาสินค้า สินค้าคงคลัง และความพร้อมจำหน่ายในหลายหมวดหมู่ - **การจัดการคำสั่งซื้อ:** ประมวลผลคำสั่งซื้อ ติดตามการจัดส่ง และจัดการคำขอของลูกค้าอย่างมีประสิทธิภาพ\n" +"- **การตรวจสอบสิทธิ์และการอนุญาต:** การตรวจสอบสิทธิ์ผู้ใช้อย่างครอบคลุมด้วยโทเค็น JWT และสิทธิ์ตามบทบาท - **การประมวลผลการชำระเงิน:** ผสานรวมเกตเวย์การชำระเงินหลายช่องทางและจัดการธุรกรรมอย่างปลอดภัย - **การจัดการบล็อกและเนื้อหา:** สร้างและจัดการโพสต์บล็อกและเนื้อหาการตลาดสำหรับร้านค้าของคุณ - **การดำเนินงาน B2B:** จุดเชื่อมต่อเฉพาะสำหรับการทำธุรกรรมระหว่างธุรกิจและการจัดการขายส่ง\n" +"- **รองรับหลายภาษา:** ให้บริการลูกค้าทั่วโลกด้วยความสามารถในการรองรับภาษาสากลอย่างเต็มรูปแบบ (i18n) - **การผสานรวมแบบกำหนดเอง:** สถาปัตยกรรม API ที่สามารถขยายได้สำหรับการผสานรวมกับแพลตฟอร์มและบริการภายนอก - **การวิเคราะห์และรายงาน:** สร้างรายงานรายละเอียดเกี่ยวกับยอดขาย, สินค้าคงคลัง, และพฤติกรรมของลูกค้า - **การอัปเดตแบบเรียลไทม์:** รับข้อมูลสดเกี่ยวกับระดับสินค้าคงคลัง, สถานะการสั่งซื้อ, และการเปลี่ยนแปลงราคา\n" +"\n" +"## API ที่มีให้บริการ - **REST API:** อินเทอร์เฟซ RESTful แบบเต็มรูปแบบ (เอกสารนี้) - **GraphQL API:** สามารถใช้งานได้ที่ `/graphql/` พร้อมอินเทอร์เฟซ GraphiQL สำหรับการสืบค้นแบบโต้ตอบ ## การยืนยันตัวตน - การยืนยันตัวตนดำเนินการผ่านโทเค็น JWT โปรดใส่โทเค็นในหัวข้อ `X-EVIBES-AUTH` ของคำขอของคุณในรูปแบบ `Bearer `\n" +"- ระยะเวลาการใช้งานโทเค็นการเข้าถึงคือ {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}. - ระยะเวลาการใช้งานโทเค็นการรีเฟรชคือ {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} ชั่วโมง. - โทเค็นการรีเฟรชจะถูกหมุนเวียนและยกเลิกการใช้งานโดยอัตโนมัติหลังการใช้งานเพื่อเพิ่มความปลอดภัย. ## การแปลภาษา (i18n) - ตั้งค่าหัวข้อ `Accept-Language` เพื่อระบุภาษาที่คุณต้องการ (เช่น `Accept-Language: en-US`).\n" +"- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - **XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" +"- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus (ป้องกันด้วย basic-auth): `/prometheus/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "หน้าแรก" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index cc8719c8942a48390159df345e09836037c6a623..2184bb38d35229e00d69430a65dd41ccf37287be 100644 GIT binary patch literal 9046 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 delta 985 zcmXxiy-QnB7{~D^Z`NAh5?f8wrY~tVDh+{zR0u^0*iGrCP^JGu10pzuP7aPGgM*8U zii1P2q~IVZluD<9A_{^-I!Y9TQn2{_T~8iz?&qF+4>{*~?sNS9U#xT<36_l*Ve~WR zeP((5<>x|F17@B0-Fb-J%+D~1*Z2zif@WlkMqY?39j1UEWS z0sC+UBRG$ba0wscS5$_pZocK_JNSa<`=|rg@B!9QmHO-K;Gs4iz*(w1ff4q%wdVT_ zc2F7p#5Z{AY-V@;Q4Uq1Nz_5-Q0o>^6 zK^CJ}Kt2D6IV>Vov<>GrYW+9o0S+?%ja1fKs{@j_7kZ}{W+(yj@G8`)@81Zj?RBzB ztWfD_ZX42sP?IUt8w&c!YcN$%RT^O^Q~?EN@%l&i%AU{dRaFO9l4|Oh%C6|W$DZPA o#&b7skmN=cQKP9B1{f-BCDXnU2xU^~RJw8ze&?(FkIw|}037H`dH?_b diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index 4ff7d7d4..e699f9ee 100644 --- a/evibes/locale/tr_TR/LC_MESSAGES/django.po +++ b/evibes/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -131,7 +131,8 @@ msgstr "Anonim kullanıcılardan gelen mesajları kaç gün saklıyoruz" #: evibes/settings/constance.py:51 msgid "How many days we store messages from authenticated users" -msgstr "Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" +msgstr "" +"Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" #: evibes/settings/constance.py:57 msgid "General Options" @@ -157,6 +158,106 @@ msgstr "SEO Seçenekleri" msgid "Debugging Options" msgstr "Hata Ayıklama Seçenekleri" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"eVibes belgelerine hoş geldiniz.\n" +"\n" +"eVibes, sadece birkaç tıklamayla her türlü çevrimiçi mağazayı açmanıza ve yönetmenize olanak tanıyan güçlü bir e-ticaret platformudur.\n" +"\n" +"## Temel Özellikler\n" +"- Ürün Kataloğu:** Birden fazla kategoride ürün ayrıntılarını, fiyatlandırmayı, envanteri ve kullanılabilirliği yönetin.\n" +"- Sipariş Yönetimi:** Siparişleri işleyin, gönderimi takip edin ve müşteri taleplerini verimli bir şekilde ele alın.\n" +"- Kimlik Doğrulama ve Yetkilendirme:** JWT belirteçleri ve rol tabanlı izinler ile kapsamlı kullanıcı kimlik doğrulaması.\n" +"- **Ödeme İşleme:** Birden fazla ödeme ağ geçidini entegre edin ve işlemleri güvenli bir şekilde yönetin.\n" +"- **Blog ve İçerik Yönetimi:** Mağazanız için blog gönderileri ve pazarlama içeriği oluşturun ve yönetin.\n" +"- **B2B İşlemleri:** İşletmeler arası işlemler ve toptan satış yönetimi için özel uç noktalar.\n" +"- Çoklu Dil Desteği:** Tam uluslararasılaştırma (i18n) yetenekleri ile dünya çapındaki müşterilere hizmet verin.\n" +"- Özel Entegrasyonlar:** Harici platformlar ve hizmetlerle entegrasyon için genişletilebilir API mimarisi.\n" +"- Analitik ve Raporlama:** Satış, envanter ve müşteri davranışları hakkında ayrıntılı raporlar oluşturun.\n" +"- Gerçek Zamanlı Güncellemeler:** Envanter seviyeleri, sipariş durumları ve fiyat değişiklikleri hakkında canlı veriler alın.\n" +"\n" +"## Mevcut API'ler\n" +"- **REST API:** Tam RESTful arayüz (bu dokümantasyon)\n" +"- **GraphQL API:** Etkileşimli sorgular için GraphiQL arayüzü ile `/graphql/` adresinde mevcuttur\n" +"\n" +"## Kimlik Doğrulama\n" +"- Kimlik doğrulama JWT belirteçleri aracılığıyla gerçekleştirilir. Belirteci, isteklerinizin `X-EVIBES-AUTH` başlığına `Bearer ` biçiminde ekleyin.\n" +"- Erişim belirteci ömrü {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Yenileme belirteci ömrü {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} saattir.\n" +"- Yenileme belirteçleri, gelişmiş güvenlik için kullanımdan sonra otomatik olarak döndürülür ve geçersiz kılınır.\n" +"\n" +"## Uluslararasılaştırma (i18n)\n" +"- Tercih ettiğiniz dili belirtmek için `Accept-Language` başlığını ayarlayın (örneğin, `Accept-Language: en-US`).\n" +"- Mevcut diller `/app/languages/` uç noktasından alınabilir.\n" +"- Kullanıcıya yönelik tüm içerikler kutudan çıkar çıkmaz birden fazla dili destekler.\n" +"\n" +"## Yanıt Biçimleri\n" +"API birden fazla yanıt biçimini destekler:\n" +"- **JSON** (varsayılan, camelCase biçimlendirilmiş)\n" +"- **XML** (`?format=xml` ekleyin veya `Accept: application/xml` olarak ayarlayın)\n" +"- **YAML** (`?format=yaml` ekleyin veya `Accept: application/x-yaml` olarak ayarlayın)\n" +"\n" +"## Sağlık ve İzleme\n" +"- Sağlık kontrolleri: `/health/`\n" +"- Prometheus metrikleri (basic-auth korumalı): `/prometheus/`\n" +"\n" +"## Sürüm\n" +"Geçerli API sürümü: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Ev" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 006d5b5606a0e691693e4ca3af29c7423ffb099e..67f2fa90f6155aca764a00e5d6cb056912065d31 100644 GIT binary patch literal 9611 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 M0A|Zl-^HHwKi%xx$^ZZW delta 985 zcmYk*Pe{{Y9LMpm`&a4Obfu}&+O*k9k&y!n5o6#sVmx4W86TjYe~1IPjwATQ-7n)Hc@=rCWbZk- z%7srD#eEE88+);f{OlixEc$|G_i!H7(H368XU+;n$m@6mn|KYsyZaryP96x!lG!9D z8c`18Sil$-u@7J1C47aN;TxClxcmbqx&9e7;5J^s4ysaroKY^S<0*VZm6vgl{;hWL ztO8Bc09u&CpUxS2zfHc0Drpt<+zw9R7kB*_6XY6&?k8~+7g6sOP?g$1e)g0@Ni*E$ zB##w*jKA;}u5wc|E}~w1jw<bbhJgu#dbAray`{oCcuKOchMhn~cu294xoD{*2L^oHq5y w5(kCWNij}K(Gs-(BTb@Bnxtt{soeUzHs&Jl{K2`|%xtD{G_csy$R_f^Q)XvPNdN!< diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index dd650f86..8fcd3152 100644 --- a/evibes/locale/vi_VN/LC_MESSAGES/django.po +++ b/evibes/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -127,7 +127,8 @@ msgstr "Sử dụng chức năng của Telegram-bot" #: evibes/settings/constance.py:50 msgid "How many days we store messages from anonymous users" -msgstr "Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" +msgstr "" +"Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" #: evibes/settings/constance.py:51 msgid "How many days we store messages from authenticated users" @@ -158,6 +159,71 @@ msgstr "Các tùy chọn SEO" msgid "Debugging Options" msgstr "Các tùy chọn gỡ lỗi" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"Chào mừng đến với tài liệu hướng dẫn của eVibes. eVibes là một nền tảng thương mại điện tử mạnh mẽ cho phép bạn khởi chạy và quản lý cửa hàng trực tuyến bất kỳ loại nào chỉ với vài cú nhấp chuột. ## Tính năng chính - **Danh mục sản phẩm:** Quản lý chi tiết sản phẩm, giá cả, tồn kho và tình trạng sẵn có trên nhiều danh mục. - **Quản lý đơn hàng:** Xử lý đơn hàng, theo dõi quá trình giao hàng và xử lý yêu cầu của khách hàng một cách hiệu quả.\n" +"- **Xác thực & Quyền truy cập:** Hệ thống xác thực người dùng toàn diện với token JWT và quyền truy cập dựa trên vai trò. - **Xử lý thanh toán:** Tích hợp nhiều cổng thanh toán và quản lý giao dịch an toàn. - **Quản lý blog và nội dung:** Tạo và quản lý bài viết blog và nội dung tiếp thị cho cửa hàng của bạn. - **Hoạt động B2B:** Các điểm cuối chuyên dụng cho giao dịch B2B và quản lý bán sỉ.\n" +"- **Hỗ trợ đa ngôn ngữ:** Phục vụ khách hàng toàn cầu với khả năng quốc tế hóa (i18n) đầy đủ. - **Tích hợp tùy chỉnh:** Kiến trúc API mở rộng để tích hợp với các nền tảng và dịch vụ bên ngoài. - **Phân tích & Báo cáo:** Tạo báo cáo chi tiết về doanh số, hàng tồn kho và hành vi khách hàng. - **Cập nhật thời gian thực:** Nhận dữ liệu trực tiếp về mức tồn kho, trạng thái đơn hàng và thay đổi giá.\n" +"\n" +"## Các API có sẵn - **REST API:** Giao diện RESTful đầy đủ (tài liệu này) - **GraphQL API:** Có sẵn tại `/graphql/` với giao diện GraphiQL cho các truy vấn tương tác ## Xác thực - Xác thực được xử lý thông qua token JWT. Bao gồm token trong tiêu đề `X-EVIBES-AUTH` của yêu cầu của bạn theo định dạng `Bearer `.\n" +"- Thời hạn sử dụng của token truy cập là {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}. - Thời hạn sử dụng của token làm mới là {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} giờ. - Token làm mới được tự động xoay vòng và vô hiệu hóa sau khi sử dụng để tăng cường bảo mật. ## Quốc tế hóa (i18n) - Đặt tiêu đề `Accept-Language` để chỉ định ngôn ngữ ưa thích của bạn (ví dụ: `Accept-Language: en-US`).\n" +"- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. ## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: application/xml`)\n" +"- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus (bảo vệ bằng basic-auth): `/prometheus/` ## Phiên bản Phiên bản API hiện tại: {EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "Trang chủ" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index 4bac7b6be3e3a298fecb90190969da437dd0b100..b3d0bc3fe319b6a6e4e2e25de5bea3c4ed3e2735 100644 GIT binary patch literal 8163 zcmc&%>r))rb??}Y<4h9Uah$}7^SIJFYhX2icGp`9vNi@ZAZ%V?26xw|X4tg9Ee@Y|%{U&G&D2`WRpkDwz3;HVPInZOEAA-{U{{a0R(4Twss~E&l%C|uO z6!aC)-vf2Dbh?&>=8p5Q_A@3n$S0Dky#b3nN~bq}&ZEN~y$nkBSp+4!e+2qP(4T_(LH`l-70~|z zCA%DjP$W;aM?;{*Uj-%m+Msm)Bq&U#+y?yy=&DEm$(zr5^yeP^3O3Wa!=Pm6;~uT{ zXb_a-JOf$^YJifQ^B%noO7?!>(KS%~DgS_fFt6~z3!t=y9>OX;FX1J<=uA4FbjdyB z=RdmaPpU)fCZKkrg*{xY^i73(sGCH`tpA8$4K>*3H6EJ=|#*GoSB; z7uXN99#*BPPQub`pPv;KHCkpQ5q4Om>Znn(y{xE+)yWg$-b_SuR6S}RVR1_j>qh$# z@b7|Nrqy#qNThaQUTxK*y3@nduw~jdizT9t9*=4)tU6k|Y3Z6>EY54NBAVqLLDr!I zAwyWhCX?oHkYlOgP6qR|>Cq@HlIL_lec}k!U~P+8+K&^O?bu9fYlCE17wwUUlqcW^ z!_jd#Y|ma~GyoxfBEIR!N;4L>G%T|9E{!E@uv4Gj)U7)m?E60q!TgWHKz;=Md#EQP~U#nI7T`tXTeGfJ|$4(@zF}l<0hF$j#{0X1EE;hV*scTx-5wwX}5}( zD_8?G6K1kW{*zjStO$iQBN8`t1N>-bYr+QhY}@ac{@ic!+phF#v1&`#MY_o3DiblHih{l9RfQl#p=xCN9q*SAxS6P96 z^q5fyz{MpN^N_0)fXTapY)h&I&ccwk-U{i;8*7+qg*$Xd3sYza73mOi9T`m=tziRB zjpid&nikmU(t%$OdRWi{ zP`h-~l1DUYYSbUnk#L&h5pWdRRBH~45|%Nd63aX<7S*~mieC|4a5tjgrqjqnUQDwv zf~%c$pd?W)16mqJrirFNFhph|!&Q+BXn+!!a7CMn{8iv|Ah$i0^$JDES6gbl<1cG- z+jqGm&9#)k#PNt- z#B(w55RN7QD@xfS#&L-FXnDgQI9*c_2>Q#LL#J9;ho(}_LWULbl21F{a?07HNrk3b zSoU37bVe|Iy@ecB9u~<>9ud{s5QcCa1bfTJ@C0k>8fyb*kZFqBHK*Wkd1YlF7(5ed z_(7olOl?h7AXHNqI9yolm`KoPkP}QJViy#$k`ne>Dbw4SVLI$&prW~&!OI$Z<+ajM z#$I4fPh2Zwdb>f@;ja<~VDDEQ$NFpEIri4!m~JG1oWsvxaJT~s*oV)N>`hu53Pp!! zpXUqT6sQ6)PJJfnKZ~G3lmmhw?w}L$wF$!`Jw>BE%z}9+O%bR8eWV2n4ScsDXp!J4 z%Mg$>19%8yLS$D|ED8CVUz|~3h9H8AVA4Xqj642XFK^|sff8-UwXojSBQb*7(xzD! zj>)IE0CHa+z zpj?g?ybz>R*Zc_1y?Ni3sdi6^&U0X9!XcOw^H%e$v`mv`$B{8LRwZz5`$Cwdgn5t= zpdy#bkg&^Ox}u`*2OH{M5QESbV8?G!jDT%gOex z&5gy>vwAE6rJ=Clo*!i|VE{c9^)37>QV`te2EXatLh9U2k@Q6AU!uMGV%# zK^^E<74a*s+BQ1Bi1&pyO8z2y3XBC+bOO1Al89;9-zIz5N|5eFFgld++DoMw zKn(_KSwZQEdh^KN-#B{WN19zIhC{W%XAWyoY64^aR#e%ikqb1DkNhSlM^} z{H4;PrKP@F)pqZxHm(*pPEh9-u$qPf1|H2ZF4Lw%^cGW5Nw=B5BfYMP2G8|q%i zHrZ7BLz)^ZW3|W=&E?gB=dLefKk4wJINH8CbR4@n9W5^PdAAOKNHi4=I^hyrS9Rk! zHI5c?^NHqAmH*i8I+7X{&>t|uW(1j_j2&y$9baQKVWD}gLf%InHR9saKJoH#^wczS zqQGE>POzhe$9;;=y?-;aGnU%kNlz{1F4gYLfV=Sir@iO%_i6Xaa%!zNwRV>e&u1=d z^Q{fOcqcvkc6#b#{$PSn_w(TezWxy(UwN`M!pHAs=X%rU*ZIIEAGncPdk2H=`6a&c zkdH5?HgEC4t9)~VzdMpnE~F>=Q=6Nq?dkNxO@93y;<`Pxw^6lv-TeGNVk`rH?g^a{$@E$nHWtrvM?uCn=_V)4QY-)3rer!zg z2Ul=D#DUsw?;SeF&oarId~{l}l5F|n+YnHWV`FA@KC^b$9lDcQ7y(b-|1n>G?9L6j z(}Qv)Pu_F~S2N42?!)sQ&y9Pj&F$>nk<4-*PISix-D?*lbI<5>{dI2)WRfc+(fmeg zV=Qy$-OSL3&;V<*?@eTOuHry`aVdN4rZD;v9kPe9Jj$Jdaj!^0 zGjS_B)hn4u&Q#A*YqLO#=d!6KsG8d9qrv5M`6DGnAwvzV^YKgacyi_1Bs`VAw+vW$ zf-cTxmLFu6dZCy*(&s7MJDb@V$XkkE-Oj#uk&nzg*&3va>yxb^i6N*$+D}}N4s*vR zQlDIP=SCr%aXxB|}e#!G8Dp1WgU!;+KYVcA1CMfGPp{UOtt43bGPm3nNeg zVgTIf&3?JvSS;<=l3NVz~c$aUDyYsg)%QuDCG5~Q{Rv<*&QDxA{ zJ^P{wr^z5D;rCxv`QoG0+5_YARmq*~<)qvL&N6ej zbMv(A|LvmsneM4MysiRO{~P)LukWgSWgO@}C=DDYA;Bk*Qf4W9hnF(jNq1D_vc-o; z(eM%#pPSdIe2MhuWq#lqz&@BOL`nE0y`9WmiuT+|0UqFh96vIEu*u$@$@UJ(gam}A zK6!`VK9AY`m)YD+6v+3Kpo%yKXz#yf%3SBZ-{ ztRgL^uU>M;?m!rAbUW^VUU-kw@l+~Mua!-a$X;miHmcW){D;(b28#^+Y} zwO)l<88lbxJE$P8$khae_k3E{n%;0@* zCYSv^Im9h8wfR08FIh49drJz%*TTn&J9sIzd7rQJ^N}5hnMZzVXTj}ThC9d@i?e*? z5?}nlTa9!;8&*G*HQ+gWq)KQ#pjc{SBWGi2aGZE&MS)4E^^_lbE{~qp&$~bFZNxka zplx&SBO0hT6ZgiwYuvfs?7b^!1G6`;Df=c;+hf^*OZz8eg7#1XPi2;`@$ppzs3Ln2 zuN;dmUvVeqD8p<`yOYSARQWxj#1%2Mw&~7o$ZH|=BOYQL*$FL=_gmy2LXC8Qd+iqT zFB&S~SG0=zJ0-%WNG=LmeB?0F3N4)C6?I%5b3bum%>VQ*i45`p5#$>IFXev#<}U?l delta 985 zcmXxjJ4oA66vy$SiS=3I+p4j(^-(n_!BlGL5G^?B;M7vEQ=v=2g3vJtf`fDr$&f*D z5PXy(8U#BCrJX7cT?&FIh`5V`k3sPJ`{#Jb{eS-VfB(rn_uQM)f@mZ{;pF!SB*#6KG~Vv^p%P8HW2lmU^zpCmv^$5Y%p$7dKQKjd_M4j?{EG>^ zLRBQjax~$PJBpg%J*u>yQ3-rQZN(Bk!cBM2$4}i$x0tf(y=W=*SBd+%$RT$GmFYW- z<0n+28FvZ!En9K7PzmiKl?~o~hO8rq=WaJ@<@&D9M1}VMKB#hVl2vMjR?6YFE_DbU zGKE&G;2Z^$>W`viV>Cr;j-Ybn6NI*t?GE-|XGp8pp>9ZWQ8ebTW^AXmc>kVGZnPyj fXgX9KH2qz(iSpG@L83R_8_%9pCiAlE(O0260)k5E diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index 135f6301..f9a1668e 100644 --- a/evibes/locale/zh_Hans/LC_MESSAGES/django.po +++ b/evibes/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" -"Project-Id-Version: EVIBES 3.0.0\n" +"Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-26 18:45+0300\n" +"POT-Creation-Date: 2025-11-08 03:29+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -157,6 +157,106 @@ msgstr "搜索引擎优化选项" msgid "Debugging Options" msgstr "调试选项" +#: evibes/settings/drf.py:50 +msgid "" +"\n" +"Welcome to the eVibes documentation.\n" +"\n" +"eVibes is a powerful e-commerce platform that allows you to launch and manage an online store of any kind in just a few clicks. \n" +"\n" +"## Key Features\n" +"- **Product Catalog:** Manage product details, pricing, inventory, and availability across multiple categories.\n" +"- **Order Management:** Process orders, track fulfillment, and handle customer requests efficiently.\n" +"- **Authentication & Authorization:** Comprehensive user authentication with JWT tokens and role-based permissions.\n" +"- **Payment Processing:** Integrate multiple payment gateways and manage transactions securely.\n" +"- **Blog & Content Management:** Create and manage blog posts and marketing content for your store.\n" +"- **B2B Operations:** Dedicated endpoints for business-to-business transactions and wholesale management.\n" +"- **Multi-language Support:** Serve customers worldwide with full internationalization (i18n) capabilities.\n" +"- **Custom Integrations:** Extensible API architecture for integrating with external platforms and services.\n" +"- **Analytics & Reporting:** Generate detailed reports on sales, inventory, and customer behavior.\n" +"- **Real-Time Updates:** Get live data on inventory levels, order statuses, and pricing changes.\n" +"\n" +"## Available APIs\n" +"- **REST API:** Full RESTful interface (this documentation)\n" +"- **GraphQL API:** Available at `/graphql/` with GraphiQL interface for interactive queries\n" +"\n" +"## Authentication\n" +"- Authentication is handled via JWT tokens. Include the token in the `X-EVIBES-AUTH` header of your requests in the format `Bearer `.\n" +"- Access token lifetime is {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"} {\"minutes\" if not DEBUG else \"hours\"}.\n" +"- Refresh token lifetime is {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} hours.\n" +"- Refresh tokens are automatically rotated and invalidated after usage for enhanced security.\n" +"\n" +"## Internationalization (i18n)\n" +"- Set the `Accept-Language` header to specify your preferred language (e.g., `Accept-Language: en-US`).\n" +"- Available languages can be retrieved from the `/app/languages/` endpoint.\n" +"- All user-facing content supports multiple languages out of the box.\n" +"\n" +"## Response Formats\n" +"The API supports multiple response formats:\n" +"- **JSON** (default, camelCase formatted)\n" +"- **XML** (add `?format=xml` or set `Accept: application/xml`)\n" +"- **YAML** (add `?format=yaml` or set `Accept: application/x-yaml`)\n" +"\n" +"## Health & Monitoring\n" +"- Health checks: `/health/`\n" +"- Prometheus metrics (basic-auth protected): `/prometheus/`\n" +"\n" +"## Version\n" +"Current API version: {EVIBES_VERSION}\n" +msgstr "" +"\n" +"欢迎使用 eVibes 文档。\n" +"\n" +"eVibes 是一个功能强大的电子商务平台,只需点击几下,您就可以创建和管理任何类型的网上商店。\n" +"\n" +"## 关键功能\n" +"- 产品目录:** 管理多个类别的产品详情、定价、库存和可用性。\n" +"- 订单管理:** 处理订单、跟踪执行情况并有效处理客户请求。\n" +"- 身份验证和授权:** 使用 JWT 标记和基于角色的权限进行全面的用户身份验证。\n" +"- 支付处理:** 集成多种支付网关,安全管理交易。\n" +"- 博客和内容管理:** 为您的商店创建和管理博客文章和营销内容。\n" +"- B2B 业务:** 用于企业对企业交易和批发管理的专用端点。\n" +"- 多语言支持:** 通过全面的国际化(i18n)功能为全球客户提供服务。\n" +"- 自定义集成:** 可扩展的应用程序接口架构,用于与外部平台和服务集成。\n" +"- 分析和报告:** 生成有关销售、库存和客户行为的详细报告。\n" +"- 实时更新:** 获取有关库存水平、订单状态和定价变化的实时数据。\n" +"\n" +"## 可用的应用程序接口\n" +"- REST API:** 完整的 REST 接口(本文档)\n" +"- **GraphQL 应用程序接口:** 可在 `/graphql/`使用 GraphiQL 接口进行交互式查询\n" +"\n" +"## 验证\n" +"- 通过 JWT 标记进行身份验证。在请求的 `X-EVIBES-AUTH` 头中包含令牌,格式为 `Bearer `。\n" +"- 访问令牌的有效期为 {\n" +" SIMPLE_JWT.get(\"ACCESS_TOKEN_LIFETIME\").total_seconds() // 60 if not DEBUG else 3600 # type: ignore [union-attr]\n" +"}{\"minutes\" if not DEBUG else \"hours\"}。\n" +"- 刷新令牌的有效期为 {\n" +" SIMPLE_JWT.get(\"REFRESH_TOKEN_LIFETIME\").total_seconds() // 3600 # type: ignore [union-attr]\n" +"} 小时。\n" +"- 刷新令牌在使用后会自动轮换和失效,以增强安全性。\n" +"\n" +"### 国际化(i18n)\n" +"- 设置 `Accept-Language` 标头,指定首选语言(例如,`Accept-Language: en-US`)。\n" +"- 可从 `/app/languages/` 端点检索可用语言。\n" +"- 所有面向用户的内容均支持多种语言。\n" +"\n" +"## 响应格式\n" +"应用程序接口支持多种响应格式:\n" +"- **JSON**(默认,驼峰编码格式)\n" +"- **XML**(添加 `?format=xml` 或设置 `Accept: application/xml`)\n" +"- **YAML**(添加 `?format=yaml`或设置`Accept: application/x-yaml)\n" +"\n" +"## 健康与监控\n" +"- 健康检查:健康检查\n" +"- Prometheus 指标(受 basic-auth 保护):`/prometheus/`\n" +"\n" +"## 版本\n" +"当前 API 版本:{EVIBES_VERSION}\n" + #: evibes/settings/jazzmin.py:20 msgid "Home" msgstr "首页" diff --git a/evibes/middleware.py b/evibes/middleware.py index ef00a006..77065f41 100644 --- a/evibes/middleware.py +++ b/evibes/middleware.py @@ -13,8 +13,6 @@ from rest_framework_simplejwt.authentication import JWTAuthentication from rest_framework_simplejwt.exceptions import InvalidToken from sentry_sdk import capture_exception -from evibes.settings import DEBUG - logger = logging.getLogger(__name__) @@ -74,14 +72,10 @@ class BlockInvalidHostMiddleware: "worker:8000", "beat:8000", "localhost:8000", - "api.localhost:8000", - "b2b.localhost:8000", "127.0.0.1:8000", - "api.127.0.0.1:8000", - "b2b.127.0.0.1:8000", ] - if DEBUG: + if bool(int(getenv("DEBUG", "1"))): allowed_hosts += ["*"] else: allowed_hosts += getenv("ALLOWED_HOSTS").split(" ") diff --git a/evibes/models.png b/evibes/models.png deleted file mode 100644 index 5c2377e5296026c2523120466ec673f66bd118f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2864119 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